Skip to content
Yang, Xiao edited this page Nov 16, 2017 · 25 revisions

物联网套件设备端SDK

物联网套件是阿里云专门为物联网领域的开发人员推出的, 其目的是帮助开发者搭建安全且性能强大的数据通道, 方便终端(如传感器, 执行器, 嵌入式设备或智能家电等等)和云端的双向通信.

具体来说, 物联网套件提供了如下的能力:

  • 嵌入式设备快速接入(设备端SDK)
  • 设备管理
  • 设备和数据信息安全
  • 桥接到阿里云其他产品, 对设备数据存储/计算

image

在物联网套件场景架构图中, 物联网设备端SDK就是将嵌入式设备连接到阿里云的部分, 也是这组维基页面将要详细介绍的

设备端SDK的概述

架构框图

image

目录和文件组成

+-- build-rules             : 编译构建系统, 基于GNU Make和bash脚本
+-- doc                     : 阿里云产品帮助文档页面(https://help.aliyun.com/product/30520.html)的文档镜像
+-- layout.mk               : 编译系统配置, 指定SDK的目录排布
+-- LICENSE                 : 软件许可证, 物联网套件设备端SDK使用的是Apache-2.0版本软件许可证
+-- makefile                : 基于GNU Make编译SDK的Makefile
+-- make.settings           : 功能裁剪配置, 可编辑该文件裁剪通信模块如MQTT|CoAP, 或裁剪服务模块如OTA|Shadow
+-- README.md               : 快速开始导引, 可浏览该文件快速体验如何注册自己的阿里云设备ID, 并结合设备端SDK连接
+-- sample                  : 例程目录, 演示通信模块和服务模块的使用
|   +-- mqtt                :     演示如何使用通信模块MQTT的API
|   +-- coap                :     演示如何使用通信模块CoAP的API
|   +-- device-shadow       :     演示如何使用服务模块DeviceShadow的API
|   +-- http                :     演示如何使用通信模块HTTP的API
|   +-- ota                 :     演示如何使用服务模块OTA的API
+-- src
    +-- sdk-impl            : SDK的接口层, 提供总体的头文件, 和一些API的接口封装
    +-- sdk-tests           : SDK的单元测试
    +-- mqtt                : 通信模块, 实现以MQTT协议接入
    +-- guider              : 通信模块, 允许以HTTPS+MQTT协议接入, 保持向下兼容
    +-- coap                : 通信模块, 实现以CoAP协议接入
    +-- http                : 通信模块, 实现以HTTP协议接入
    +-- ota                 : 服务模块, 实现基于MQTT|CoAP+HTTP+TLS的固件下载通道
    +-- shadow              : 服务模块, 实现设备影子
    +-- platform            : 硬件平台抽象层, 存放不同嵌入式设备的抽象层接口实现, 支撑以上模块形成跨平台
    +-- import              : 外部输入目录, 存放芯片/模组厂商提供的头文件/二进制库, 如高通NBIoT芯片MDM9206和芯讯通开发板SIM7000C相关文件
    +-- configs             : 硬件平台编译配置, 存放编译系统需要读入的各平台编译方式, 如交叉编译工具链的设置, 软件模块的裁剪等
    +-- scripts             : 编译过程将要外部引用的脚本, 用户不必关注
    +-- packages            : SDK引用的外部软件模块, 用户不必关注
    +-- log                 : 基础模块, 实现运行日志
    +-- system              : 基础模块, 实现全局信息保存, 如预置的TLS/DTLS连接时的阿里云官方根证书, 设备标识ID等
    +-- tls                 : 基础模块, 实现TLS/DTLS, 来自裁剪过的开源软件mbedtls
    +-- utils               : 基础模块, 实现工具函数, 如连接鉴权时的SHA1摘要计算, 或NTP服务器的epoch对时等

设备端SDK的使用

根据所编译目标硬件平台的不同, SDK编译的产物也会不同, 但是大体上都一致的呈现如下的结构

output/release/
+-- bin
+-- include
|   +-- exports
|   |   +-- iot_export_coap.h
|   |   +-- iot_export_errno.h
|   |   +-- iot_export_http.h
|   |   +-- iot_export_mqtt.h
|   |   +-- iot_export_ota.h
|   |   +-- iot_export_shadow.h
|   +-- imports
|   |   +-- iot_import_coap.h
|   |   +-- iot_import_config.h
|   |   +-- iot_import_dtls.h
|   |   +-- iot_import_ota.h
|   +-- iot_export.h
|   +-- iot_import.h
+-- lib
|   +-- libiot_sdk.a
+-- src
    +-- coap-example.c
    +-- http-example.c
    +-- Makefile
    +-- mqtt-example.c

概要说明如下:

  • include/iot_import.h: 这个头文件中列出为SDK适配新硬件平台时, 需要实现的平台抽象层函数, 以HAL_*()的方式命名; 编写平台抽象层实现时, 包含此头文件即可
  • include/imports/iot_import_*.h: 这组头文件按功能模块分列各模块依赖的平台抽象层函数, 例如iot_import_coap.h中列出用CoAP协议通信需要实现的那些, 若不使用CoAP, 可直接忽略该文件
  • include/iot_export.h: 这个头文件中列出SDK能提供的所有用户级别API, 也就是供用户调用编写业务应用程序的函数
  • include/exports/iot_export_*.h: 这组头文件按功能模块分列各模块提供的用户级别API, 例如iot_export_coap.h中列出用CoAP协议通信时可用的那些, 若不使用CoAP, 可直接忽略该文件
  • lib/libiot_sdk.a: 这个二进制的压缩库文件就是编译好的所谓**"物联网套件设备端SDK"**, 它配合上面的include/iot_export.h文件, 分别提供API的接口实现和接口声明, 供用户link到自己的业务应用程序中
  • src/Makefile: 示例用Makefile, 演示得到lib/libiot_sdk.a之后, 如何在SDK之外链接它使用起来

SDK提供的API说明

以下为华东2站点V2.0+版本的C-SDK提供的功能和对应的API, 用于让用户编写业务逻辑, 封装AT命令时, 也是基于这些API

具体的API列表和对每个API的说明, 可以访问API参考手册页面

更加准确详细和权威的描述, 以代码output/release/include/iot_export.h, 以及output/release/include/exports/*.h中的注释为准

如何使用这些API编写应用逻辑, 以代码sample/*/*.c的示例程序为准

SDK提供的裁剪开关说明

SDK顶层目录的make.settings文件, 列出了对功能进行裁剪时可以选择打开或者关闭的开关, 可以说明如下:

$ cat make.settings 
FEATURE_MQTT_COMM_ENABLED   = y
FEATURE_MQTT_DIRECT         = y
FEATURE_MQTT_DIRECT_NOTLS   = n
FEATURE_COAP_COMM_ENABLED   = y
FEATURE_HTTP_COMM_ENABLED   = y

它们的含义是:

配置选项 含义
FEATURE_MQTT_COMM_ENABLED 是否使能MQTT通道功能的总开关
FEATURE_MQTT_DIRECT 是否用MQTT直连模式代替HTTPS三方认证模式做设备认证
FEATURE_MQTT_DIRECT_NOTLS 使用MQTT直连模式做设备认证时, 是否要关闭MQTT over TLS
FEATURE_COAP_COMM_ENABLED 是否使能CoAP通道功能的总开关
FEATURE_HTTP_COMM_ENABLED 是否使能Https通道功能的总开关

可以编辑make.settings文件, 把不需要的功能模块关闭, 来减小最终编译出output/release/lib/libiot_sdk.a库文件的大小, 来节省嵌入式设备上的资源

例如只需要以MQTT的方式连接, 不需要CoAPHTTP的通道, 可以将默认的make.settings改动为:

FEATURE_MQTT_COMM_ENABLED   = y
FEATURE_MQTT_DIRECT         = y
FEATURE_MQTT_DIRECT_NOTLS   = n
FEATURE_COAP_COMM_ENABLED   = n
FEATURE_HTTP_COMM_ENABLED   = n

又比如所使用的嵌入式硬件平台资源非常有限, 不能够运行TLS加密通道甚至根本没有TLS/DTLS加解密库, 打算以MQTT over TCP的方式连接, 则可改动为:

FEATURE_MQTT_COMM_ENABLED   = y
FEATURE_MQTT_DIRECT         = y
FEATURE_MQTT_DIRECT_NOTLS   = y

以上列出的只是功能开关的其中一部分, SDK被编译完成之后, 会显示所有的功能开关和当前配置, 以y表示打开, 以n表示关闭, 例如:

$ make
...
...
=========================================================================
o BUILD COMPLETE WITH FOLLOWING SWITCHES:
----
    FEATURE_MQTT_COMM_ENABLED    : y
    FEATURE_MQTT_SHADOW          : y
    FEATURE_MQTT_DIRECT          : y
    FEATURE_MQTT_DIRECT_NOTLS    : n
    FEATURE_COAP_COMM_ENABLED    : y
    FEATURE_COAP_DTLS_SUPPORT    : y
    FEATURE_OTA_ENABLED          : y
    FEATURE_OTA_SIGNAL_CHANNEL   : MQTT
    FEATURE_OTA_FETCH_CHANNEL    : HTTP
    FEATURE_MQTT_ID2_AUTH        : n
    FEATURE_MQTT_ID2_CRYPTO      : n
    FEATURE_MQTT_ID2_ENV         : online
    FEATURE_HTTP_COMM_ENABLED    : y

设备端SDK的更新历史

设备端SDK大约每个月都会迭代更新一次, 可访问迭代历史页面查看更新历史

设备端SDK的编译

在Ubuntu上编译主机版本

交叉编译到已适配硬件平台

交叉编译到未适配硬件平台

设备端SDK的分部介绍

编译构建系统

  • src/configs
  • src/scripts
  • layout.mk
  • make.settings
  • makefile
  • build-rules/

基础模块

  • src/log
  • src/tls
  • src/utils
  • src/system

硬件平台抽象层

  • src/platform/os
  • src/platform/ssl

通信模块

  • src/mqtt
  • src/guider
  • src/coap
  • src/http

服务模块

  • src/shadow
  • src/ota

例子程序

  • sample

设备端SDK的FAQ

硬件平台相关

编译相关

运行相关

Clone this wiki locally