使用 Azure IoT C SDK 针对受限制设备进行开发

Azure IoT 中心 C SDK 使用 ANSI C (C99) 编写,因而非常适合用于运行各种平台,磁盘和内存占用都很小。 建议 RAM 至少为 64 KB,但具体内存占用取决于使用的协议、打开的连接数以及目标平台。

注意

  • Azure IoT C SDK 会定期发布资源消耗信息,以帮助进行开发。 请访问我们的 GitHub 存储库并查看最新的基准。

C SDK 可通过 apt-get、NuGet 和 MBED 以程序包的形式提供。 若要以受限制设备为目标,则可能需要为目标平台在本地构建 SDK。 本文档演示如何使用 cmake 删除特定功能,从而缩小 C SDK 占用的空间。 此外,本文档讨论使用受限制设备的最佳编程模型。

针对受限制设备构建 C SDK

针对受限制设备构建 C SDK。

注意

嵌入式 C SDK 是支持自带网络 (BYON) 方法的受限制设备的替代项。 IoT 开发人员可以自由选择使用 MQTT 客户端、TLS 和套接字来创建设备解决方案。 详细了解嵌入式 C SDK

先决条件

请按照本 C SDK 设置指南准备用于构建 C SDK 的开发环境。 在开始执行使用 cmake 进行构建的步骤前,可调用 cmake 标记来删除未使用的功能。

删除其他协议库

C SDK 当前支持五种协议:MQTT、基于 WebSocket 的 MQTT、AMQP、基于 WebSocket 的 AMQP 和 HTTPS。 大多数方案需要在客户端上运行一到两个协议,因此可从 SDK 中删除未使用的协议库。 有关为方案选择适当通信协议的其他信息,请参阅选择 IoT 中心通信协议。 例如,MQTT 是一种轻量级协议,通常更适合用于受限制设备。

可以使用以下 cmake 命令删除 AMQP 和 HTTP 库:

cmake -Duse_amqp=OFF -Duse_http=OFF <Path_to_cmake>

删除 SDK 日志记录功能

C SDK 提供各种日志记录功能来帮助进行调试。 可以使用以下 cmake 命令删除生产设备的日志记录功能:

cmake -Dno_logging=OFF <Path_to_cmake>

删除上传到 blob 的功能

可以使用 SDK 的内置功能将大文件上传到 Azure 存储。 Azure IoT 中心充当关联 Azure 存储帐户的调度程序。 可以使用此功能发送媒体文件、大型遥测批次和日志。 可以在使用 IoT 中心上传文件中获取详细信息。 如果应用程序不需要此功能,则可以使用以下 cmake 命令删除此功能:

cmake -Ddont_use_uploadtoblob=ON <Path_to_cmake>

在 Linux 环境中运行 strip

如果二进制文件在 Linux 系统上运行,则可以在编译后利用 strip 命令缩小最终应用程序的大小。

strip -s <Path_to_executable>

适用于受限制设备的编程模型

接下来,查看适用于受限制设备的编程模型。

避免使用序列化程序

C SDK 具有可选的 C SDK 序列化程序,它允许使用声明式映射表来定义方法和设备孪生属性。 序列化程序旨在简化开发,但也会增加开销,因而对于受限制设备而言不是最优选择。 在这种情况下,请考虑使用原始客户端 API,并使用轻量级分析程序(例如 parson)分析 JSON。

使用较低层 (LL)

C SDK 支持两种编程模型。 其中一组拥有具有 LL 中缀的 API,该中缀代表较低层。 这组 API 权重更轻且不会启动工作线程,这意味着用户必须手动控制调度。 例如,对于设备客户端,可在此头文件中找到 LL API。

另一组没有 LL 索引的 API 称为便捷层,工作线程会在其中自动启动。 例如,设备客户端的便捷层 API 可以在此 IoT 设备客户端头文件中找到。 对于每个额外的线程会占用大量系统资源的受限制设备,请考虑使用 LL API。

后续步骤

若要详细了解 Azure IoT C SDK 体系结构,请参阅: