Azure IoT C SDKs and Libraries
此仓库包含以下内容
- Azure IoT Hub 设备 C SDK 以连接运行 C 代码的设备到 Azure IoT Hub。
- Azure IoT Hub 设备预配服务客户端 SDK 用于注册设备到 Azure IoT 设备预配服务 并管理注册列表。
- Azure IoT Hub 服务 C SDK 以从服务器端的 C 应用程序与 Azure IoT Hub 服务实例接口。
- C 序列化库 以帮助在设备上序列化和反序列化数据。
包和库
开始使用 Azure IoT SDK 的最简单方法是使用以下包和库
- Linux (Ubuntu 14.04, 16.04): apt-get 上的设备 SDK
- mbed: MBED 上的设备 SDK 库
- Arduino: Arduino IDE 中的设备 SDK 库
- Windows: NuGet 上的设备 SDK
示例
以下是一些简单示例,将帮助您开始
编译 SDK
当您的平台没有可用的包或库,或者您想修改 SDK 代码,或将 SDK 移植到新平台时,您可以利用存储库中提供的构建环境。
SDK API 参考文档
C SDK 的 API 参考文档可以在这里找到:https://azure.github.io/azure-iot-sdk-c/index.html。
其他 Azure IoT SDK
要查找其他语言版本的 Azure IoT SDK,请参阅 azure-iot-sdks 仓库。
开发 Azure IoT 应用程序
要了解更多关于构建 Azure IoT 应用程序的信息,您可以访问 Azure IoT 开发中心。
关键特性和路线图
设备客户端 SDK
特性 | mqtt | mqtt-ws | amqp | amqp-ws | https | 描述 |
---|---|---|---|---|---|---|
身份认证 | 使用受支持的认证方法(包括私钥、SASToken、X-509 自签名和证书颁发机构(CA)签名)安全地将您的设备连接到 IoT Hub。*目前 IoT Hub 只在 AMQP 和 MQTT 上支持 X-509 CA 签名。 | |||||
发送设备到云的消息 | 发送设备到云的消息(最大 256KB)到 IoT Hub,可添加自定义属性。目前 IoT Hub 只支持在 AMQP 和 HTTPS 上批量发送。该 SDK 支持通过 HTTP 批量发送。*正在实施通过 AMQP 和 AMQP-WS 批量发送,并在 D2C 消息上添加系统属性。 | |||||
接收云到设备的消息 | 接收云到设备的消息,并从 IoT Hub 读取相关的自定义和系统属性,同时可选择完成/拒绝/放弃 C2D 消息。*目前 IoT Hub 只支持通过 HTTPS 和 AMQP 完成接收/拒绝/放弃 C2D 消息。 | |||||
设备孪生 | IoT Hub 为您连接到 IoT Hub 的每个设备保留一个设备孪生。设备可以执行获取孪生标签、订阅所需属性等操作。*正在实施发送上报属性版本和所需属性版本。 | |||||
直接方法 | IoT Hub 允许您从云中调用设备的直接方法。SDK 支持处理特定方法和通用操作。 | |||||
将文件上传到 Blob | 设备可以启动文件上传,并在上传完成后通知 IoT Hub。文件上传需要 HTTPS 连接,但可以使用任何协议(除了上传操作外)从客户端启动。 | |||||
连接状态和错误报告 | 对 IoT Hub 支持的错误代码进行错误报告。*该 SDK 支持%认证和设备未找到的错误报告。 | |||||
重试策略 | 对于不成功的设备到云消息的重试策略有两个选项:不尝试,带抖动的指数后退(默认)。*正在实施自定义重试策略。 | |||||
单个连接上多路复用设备 | ||||||
连接池 - 指定连接数 |
此 SDK 还包含您可设置和特定于平台的功能。您可以在本文档中找到详细列表。
服务客户端 SDK
特性 | C | 描述 |
---|---|---|
身份注册(CRUD) | 使用您的后端应用执行单个设备或批量的 CRUD 操作。SDK 仅支持使用 ID/密钥对创建单个设备的 CRUD 操作。 | |
云到设备消息 | 使用您的后端应用通过 AMQP 和 AMQP-WS 发送云到设备消息,并设置云到设备消息接收器。 | |
直接方法操作 | 使用您的后端应用调用设备上的直接方法。 | |
设备孪生操作 | 使用您的后端应用执行设备孪生操作。*正在实施孪生上报属性更新回调和替换孪生。 | |
查询 | 使用您的后端应用执行信息查询。 | |
作业 | 使用您的后端应用执行作业操作。 | |
文件上传 | 设置您的后端应用以发送文件上传通知接收器。 |
预配客户端 SDK
该存储库包含用于设备预配服务SDK的设备预配服务。C语言的预配服务SDK正在开发中。请在此期间查看Node.js、Java和.NET中的预配服务SDK。
特性 | mqtt | mqtt-ws | amqp | amqp-ws | https | 描述 |
---|---|---|---|---|---|---|
TPM个体注册 | 此SDK支持通过个体注册和可信平台模块将设备连接到设备预配服务。此快速入门回顾了如何创建使用TPM的模拟个体注册设备。目前,设备预配服务不支持TPM通过MQTT。 | |||||
X.509个体注册 | 此SDK支持通过个体注册和X.509叶证书将设备连接到设备预配服务。此快速入门回顾了如何创建使用X.509的模拟个体注册设备。 | |||||
X.509注册组 | 该SDK支持通过使用注册组和X.509根证书将设备连接到设备预配服务。 |
操作系统平台和硬件兼容性
C语言物联网中心设备SDK可与广泛的各种操作系统平台和设备一起使用。
最小要求是设备平台需要支持以下
- 能够建立IP连接:只有支持IP的设备才能直接与Azure物联网中心通信。
- 支持TLS:这是与Azure物联网中心建立安全通信通道所必需的。
- 支持SHA-256(可选):用于生成用于设备服务身份验证的安全令牌。有不同类型的身份验证方法可用,并非所有方法都需要SHA-256。
- 拥有实时时钟或实现连接NTP服务器的代码:对于建立TLS连接和生成用于身份验证的安全令牌都是必需的。
- 至少有64KB的RAM:SDK的内存占用取决于SDK、使用的协议以及目标平台。以微控制器为目标可以达到最小的内存占用。
您可以查看已经在Azure IoT设备认证目录中测试过的各种SDK的操作系统平台列表。请注意,您可能在未列出在此页面的操作系统和硬件平台上仍然可以使用SDK:所有SDK都是开源的,并设计为可移植。如果您有建议、反馈或要报告的问题,请参阅下方的贡献和支持部分。
将 Azure IoT 设备客户端 SDK for C 迁移到新设备
C SDKs 和库
- 使用 ANSI C (C99) 编写,避免使用编译器扩展,以最大化代码可移植性和广泛平台兼容性。
- 公开一个平台抽象层以隔离操作系统依赖(例如线程和互斥机制、通信协议,例如 HTTP)。有关抽象层的更多信息,请参阅我们的迁移指南。
在存储库中您可以找到有关在 Linux、Windows 和微控制器平台上编译和运行设备客户端 SDK for C 的说明和构建工具(有关编译 C 设备客户端的更多信息,请参阅上面的链接)。
如果您考虑将设备客户端 SDK for C 迁移到新平台,请查看迁移指南文档。
贡献、反馈和问题
如果您遇到任何错误,有何新功能建议,或想成为此项目的积极贡献者,请按照贡献指南提供的说明操作。
支持
- 对 SDK 有特性请求?请将其发布在用户声音上,以帮助我们确定优先级。
- 有技术问题?请使用标签“azure-iot-hub”在Stack Overflow提问。
- 需要支持?拥有活跃 Azure 订阅的每一位客户都有权获得支持,并有明确的响应时间。请提交工单并从微软支持团队获得帮助。
- 发现了一个错误?请通过彻底记录它并在 GitHub(C、Java、.NET、Node.js、Python)上提交问题来帮助我们修复它。
阅读更多
- Azure IoT Hub 文档
- 准备开发环境以使用 Azure IoT 设备 SDK for C
- 设置 IoT Hub
- Azure IoT 设备 SDK for C 教程
- 如何将 C 库移植到其他操作系统平台
- 交叉编译实例
- C SDKs API 参考手册
SDK 文件夹结构
/c-utility, /uamqp, /umqtt, /parson
这些是 git 子模块,其中包含与其他项目共享的代码,如适配器和协议实现。请注意,其中一些包含嵌套子模块。
/blob
该文件夹包含使访问 Azure Blob 存储 成为可能的客户端组件。
/dps_client
该文件夹包含设备预配服务的客户端库。
/certs
包含与 Azure IoT Hub 进行通信所需的证书。
/doc
本文件夹包含应用程序开发指南和设备配置说明。
/build_all
本文件夹包含客户端库和相关组件的平台特定构建脚本。
/iothub_client
包含提供库原始消息能力的服务。请参阅API文档和示例了解如何使用。
- 构建:每个平台(例如,Windows、Linux、Mbed)都有一个子文件夹。包含构建库二进制文件的makefiles、批处理文件和解决方案。
- devdoc:包含需求、设计笔记、手册。
- inc:公共包含文件。
- src:客户端库源文件。
- 示例:包含简单示例。
- tests:源代码的单元测试和端到端测试。
/序列化器
包含库,提供在原始消息库之上建模和JSON序列化的能力。这些库简化了数据结构和命令控制的上传,以便与Azure IoT服务一起使用。请参阅API文档和示例了解如何使用。
- 构建:每个平台(例如,Windows、Linux、Mbed)都有一个子文件夹。包含构建库二进制文件的makefiles、批处理文件和解决方案。
- devdoc:包含需求、设计笔记、手册。
- inc:公共包含文件。
- src:客户端库源文件。
- 示例:包含简单示例。
- tests:源代码的单元测试和端到端测试。
/iothub_service_client
包含允许与IoT Hub服务交互的库,以执行发送消息到设备和管理设备标识注册表等操作。
/testtools
包含用于测试客户端库当前使用的工具:模拟框架(micromock)、通用测试运行器(CTest)、单元测试项目模板等。
/tools
其他工具:compilembed、mbed_build、可追溯性工具(检查规范需求与代码实现的比对)。
长期支持
该项目提供一个长期支持(LTS)版本,以便不需要最新特性的用户不受不必要变化的干扰。
每6个月将创建一个新的LTS版本。目前计划LTS分支的生命周期为一年。LTS分支将接收所有属于以下类别的错误修复
- 安全错误修复
- 关键错误修复(崩溃、内存泄漏等)
在LTS分支中不会添加新功能或改进。
LTS分支的名称为lts_mm_yyyy,其中mm和yyyy分别为分支创建时的月份和年份。这样分支的一个例子是lts_07_2017。
时间表1
以下是显示LTS分支与发布包之间的映射的表格
包 | github分支 | LTS状态 | LTS开始日期 | 维护结束日期 | 移除日期 |
---|---|---|---|---|---|
Nuget: 1.1.33 Xenial: 0.1.0.0-35xenial Trusty: 0.1.0-37trusty |
lts_01_2018 | 活跃 | 2018-01-01 | 2018-06-30 | 2018-12-31 |
1.x.x | lts_07_2017 | 已弃用 | 2017-07-01 | 2017-12-31 | 2018-06-30 |
- 1 所有计划日期均可由Azure IoT SDK团队更改。
计划发布时间表
本项目已采用微软开源行为准则。更多相关信息请参阅行为准则常见问题解答,或联系[email protected]以提出任何额外的问题或评论。