Azure IOT 中心设备 SDK 允许使用 C99 或更高版本或 C++ 编写的应用程序与 Azure IoT 中心、Azure IoT Central 以及 Azure IoT 设备预配轻松通信。该存储库包括库的源代码、设置说明以及演示使用场景的示例。
对于内存以千字节而不是兆字节为单位的受限设备,甚至还有更轻量级的 SDK 选项可用。请参阅其他 Azure IoT SDK 以了解更多信息。
建议所有 Azure IoT SDK 用户注意 Azure IoT 中心和设备预配服务即将发生的 TLS 证书更改,这将影响 SDK 连接到这些服务的能力。 2022 年 10 月,这两项服务将从当前的巴尔的摩 CyberTrust CA 根迁移到 DigiCert Global G2 CA 根。事先会有一个过渡期,您的 IoT 设备必须同时拥有 Baltimore 和 Digicert 公共证书,这些证书可能会硬编码在其应用程序中或闪存到您的 WiFi 模块上,以防止连接问题。
仅具有巴尔的摩公共证书的设备将在 2022 年 10 月失去连接到 Azure IoT 中心和设备预配服务的能力。
要准备此更改,请确保您设备的 TLS 堆栈已配置这两个公共信任根证书。
有关物联网服务为何这样做的更深入解释,请参阅本文。
请注意,对于 mbed 和 Arduino 等受限设备场景,有更好、更轻量级的 SDK 选项可用。请参阅其他 Azure IoT SDK 以了解更多信息。
在受支持的平台上开始使用 Azure IoT SDK 的最简单方法是使用以下包和库:
Arduino:Arduino IDE 中的设备 SDK 库
Windows:Vcpkg 上的设备 SDK
iOS:CocoaPod 上的设备 SDK
iOS 限制
要获得更完整的iOS 体验(包括上述两个缺失的功能),请参阅我们基于嵌入式 C SDK 构建的示例本机 Swift 库。
对于其他平台(包括 Linux),您需要直接克隆和构建 SDK。您也可以直接为上述平台构建它。
SDK 有许多可用的示例。更多信息可以在这里找到。
可以在此处找到 C SDK 的 API 参考文档。
要查找其他语言的 Azure IoT SDK,请参阅此处的指南。
要了解有关构建 Azure IoT 应用程序的更多信息,您可以访问 Azure IoT 开发中心。
IoT Hub 支持设备连接的多种协议:MQTT、AMQP 和 HTTPS。 MQTT 和 AMQP 可以选择在 WebSocket 上运行。设备客户端 SDK 允许在创建连接时选择协议。
设备/模块客户端 SDK 允许创建 IoT 即插即用设备。
如果您不确定使用哪个协议,您应该使用 MQTT 或 MQTT-WS。 MQTT 需要的资源比 AMQP 少得多,并且支持比 HTTPS 多得多的 IoT 中心功能。 AMQP 和 HTTPS 都不能保证为未来的新功能(例如 Azure IoT 即插即用)提供设备客户端 SDK 实现。
✔️ 功能可用 ✖️ 功能计划但不支持 ➖ 没有支持计划
特征 | MQTT | mqtt-ws | 阿姆奎普 | amqp-ws | https | 描述 |
---|---|---|---|---|---|---|
验证 | ✔️ | ✔️* | ✔️ | ✔️* | ✔️* | 通过支持的身份验证(包括私钥、SASToken、X-509 自签名和证书颁发机构 (CA) 签名)将您的设备安全地连接到 IoT 中心。 *IoT Hub 目前仅支持通过 AMQP 和 MQTT 签名的 X-509 CA。 |
发送设备到云消息 | ✔️* | ✔️* | ✔️* | ✔️* | ✔️* | 将设备到云消息(最大 256KB)发送到 IoT 中心,并可选择添加自定义属性。 IoT 中心目前仅支持通过 AMQP 和 HTTPS 批量发送。该SDK支持通过HTTP批量发送。 * 通过 AMQP 和 AMQP-WS 批量发送,以及在 D2C 消息上添加系统属性正在进行中。 |
接收云到设备的消息 | ✔️* | ✔️* | ✔️ | ✔️ | ✔️ | 接收云到设备的消息并从 IoT 中心读取关联的自定义和系统属性,并可选择完成/拒绝/放弃 C2D 消息。 *IoT Hub 目前仅支持通过 HTTPS 和 AMQP 完成/拒绝/放弃 C2D 消息的选项。 |
设备双胞胎 | ✔️* | ✔️* | ✔️* | ✔️* | ➖ | IoT 中心为连接到 IoT 中心的每个设备保留一个设备孪生。该设备可以执行诸如获取双标签、订阅所需属性等操作。 *发送报告的属性版本和所需的属性版本正在进行中。 |
直接法 | ✔️ | ✔️ | ✔️ | ✔️ | ➖ | IoT 中心使您能够从云端调用设备上的直接方法。 SDK 支持方法特定和通用操作的处理程序。 |
将文件上传到 Blob | ➖ | ➖ | ➖ | ➖ | ✔️ | 设备可以发起文件上传,并在上传完成时通知 IoT 中心。文件上传需要 HTTPS 连接,但可以使用任何协议从客户端发起进行其他操作。 |
连接状态和错误报告 | ✔️* | ✔️* | ✔️* | ✔️* | ✖️ | IoT 中心支持的错误代码的错误报告。 *此SDK支持身份验证和未找到设备的错误报告。 |
重试策略 | ✔️* | ✔️* | ✔️* | ✔️* | ✖️ | 不成功的设备到云消息的重试策略有两个选项:不尝试、带抖动的指数退避(默认)。 *自定义重试政策正在进行中。 |
通过单一连接进行多路复用的设备 | ➖ | ➖ | ✔️ | ✔️ | ✔️ | 多路复用的限制比该表中列出的要多。请参阅此文档以获取更多信息。 |
连接池 - 指定连接数 | ➖ | ➖ | ✖️ | ✖️ | ✖️ | |
Azure IoT 即插即用支持 | ✔️ | ✔️ | ➖ | ➖ | ➖ | 能够构建 Azure IoT 即插即用设备。 |
该 SDK 还包含您可以设置的选项和平台特定功能。您可以在本文档中找到详细列表。
此存储库包含设备配置服务的配置客户端 SDK。
✔️ 功能可用 ✖️ 功能计划但不支持 ➖ 没有支持计划
特征 | MQTT | mqtt-ws | 阿姆奎普 | amqp-ws | https | 描述 |
---|---|---|---|---|---|---|
TPM 个人注册 | ➖ | ➖ | 我们宣布弃用 Azure IoT C-SDK 中的 utpm-c 库支持和 DPS-TPM 身份验证支持。从 2023 年 5 月开始,Microsoft 将不再提供对此库的支持。使用该库的现有应用程序将继续按原样运行。我们强烈建议使用 tpm2tss OpenSSL 引擎切换到 DPS-X509 身份验证。 使用可信平台模块通过单独注册将您的设备连接到设备配置服务将继续按原样工作。本快速入门回顾如何创建模拟设备以进行 TPM 个人注册。设备配置服务当前不支持基于 MQTT 的 TPM。 | |||
X.509个人招生 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | 此 SDK 支持使用 X.509 叶证书通过单独注册将您的设备连接到设备配置服务。本快速入门回顾了如何创建用于使用 X.509 进行个人注册的模拟设备。 |
X.509 注册组 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | 此 SDK 支持使用 X.509 根证书通过注册组将您的设备连接到设备配置服务。 |
适用于 C 的 IoT 中心设备 SDK 可与各种操作系统平台和设备一起使用。
设备平台的最低要求是支持以下功能:
平台支持详细信息可以在本文档中找到。您可以在 Azure IoT 认证设备目录中找到各种 SDK 已测试过的操作系统平台的详尽列表。请注意,您可能仍然可以在本页未列出的操作系统和硬件平台上使用 SDK:所有 SDK 都是开源的,并且设计为可移植的。如果您有建议、反馈或问题要报告,请参阅下面的贡献和支持部分。
C SDK 和库:
在存储库中,您将找到在 Linux、Windows 和微控制器平台上编译和运行 C 设备客户端 SDK 的说明和构建工具(有关编译 C 设备客户端的更多信息,请参阅上面的链接)。
如果您正在考虑将 C 语言的设备客户端 SDK 移植到新平台,请查看移植指南文档。
MBED OS
另请参阅下面的已弃用文件夹以了解其他相关说明。
如果您遇到任何错误,对新功能有建议,或者如果您想成为该项目的积极贡献者,请按照贡献指南中提供的说明进行操作。
/c-utility, /deps, /umqtt, /uamqp
-
这些是包含代码的 git 子模块,例如与其他项目共享的适配器和协议实现。
/build, /build_all
构建并签入与门相关的文件夹。
/certs
包含与 Azure IoT 中心通信所需的证书。
/doc
此文件夹包含应用程序开发指南和设备设置说明。
/iothub_client
包含提供库的原始消息传递功能的 Azure IoT 中心客户端组件。有关如何使用它的信息,请参阅 API 文档和示例。
/provisioning_client
此文件夹包含设备配置客户端的客户端库。
/samples
包含使用 SDK 演示更复杂的 E2E 场景的示例。
/testtools
包含用于测试库的工具。
/tools
各种工具。
以下文件夹已被弃用。
/iothub_service_client
包含支持与 IoT 中心服务交互以执行操作(例如向设备发送消息和管理设备身份注册表)的库。
/provisioning_service_client
包含允许与设备配置服务交互以执行操作(例如设置有关注册的策略)的库。
/serializer
包含在原始消息传递库之上提供建模和 JSON 序列化功能的库。
C SDK 提供新功能版本、关键错误修复和长期支持 (LTS)。一般错误修复不会收到单独的版本,而是包含在 LTS 版本中。版本控制遵循语义版本控制、 xyz
或major.minor.patch
。每当版本更新时,它都会被标记为xyz
。
新功能和关键错误修复(包括安全更新)将在主分支上发布。这些版本将使用格式为yyyy-mm-dd
日期进行标记。功能发布将提升minor
版本并将patch
版本重置为 0。关键错误修复将仅提升patch
版本。
新的 LTS 版本从主分支分支出来,并将被标记为LTS_
。新的 LTS 版本将继承发布时主分支的版本。 LTS 分支根据创建分支的月份和年份命名为lts_mm_yyyy
。
当从主分支移植关键错误修复(包括安全更新)时,将发布更新的 LTS 版本。这些更新的版本将以相同的方式标记,除了增加的 Ref## 之外,例如LTS_
。 patch
版本也将被提升。 LTS 更新不会移植任何新功能和一般错误修复。
下表显示了 LTS 分支到已发布软件包的映射。
包裹 | GitHub 分支 | 长期支持标签 | LTS 开始日期 | 维护结束日期 |
---|---|---|---|---|
vcpkg: 2024-08-12 | lts_08_2024 | LTS_08_2024 | 2024-08-12 | 2025-08-12 |
vcpkg: 2024-03-04 | lts_03_2024 | LTS_03_2024 | 2024-03-04 | 2025-03-04 |
“维护结束日期”是指相关版本的生命支持结束。
下面是 C SDK 版本控制和标记的假设示例。 minor
版本通过颜色区分。
1.9.0
,发布标记为2020-02-23
。LTS_07_2020
。主分支升级到 1.10.0 并标记为1.10.0
。2020-08-02
。1.10.1
,发布标记为2020-09-28
。通过创建名为lts_07_2020_ref02
的分支,将关键错误修复移植到 lts 版本LTS_07_2020
(以及任何其他现有的 LTS 分支),其版本升至 1.9.1 并标记为1.9.1
和LTS_07_2020_Ref02
。属于关键错误修复一部分的任何子模块都将标记为LTS_07_2020_Ref02
。1.11.0
,发布标记为2020-12-14
。该项目采用了微软开源行为准则。有关详细信息,请参阅行为准则常见问题解答或联系 [email protected] 提出任何其他问题或意见。
Microsoft 收集性能和使用信息,这些信息可用于提供和改进 Microsoft 产品和服务以及增强您的体验。要了解更多信息,请查看隐私声明。