腾讯云物联网开发平台 IoT Explorer 设备端 C SDK ,配合平台对设备数据模板化的定义,实现和云端基于数据模板协议的数据交互框架,开发者基于 IoT_Explorer C-SDK 数据模板框架,通过脚本自动生成模板代码,快速实现设备和平台、设备和应用之间的数据交互。
步骤1:创建云端设备
另外,数据模板是将物理实体设备进行数字化描述,构建其数字模型。在物联网开发平台定义数据模板即定义产品功能,完成功能定义后,系统将自动生成该产品的数据模板。
功能元素 | 功能描述 | 功能标识符 |
属性 | 包括布尔型、整数型、字符型、浮点型、枚举型和时间型等6种基本数据类型。 用于描述设备的实时状态,支持读取和设置,如模式、亮度、开关等。 | PropertiesId |
事件 | 包括告警、故障和信息3种类型,事件型功能属性可以添加具体的事件参数,这些参数可以由属性中6种基本数据类型组成。 用于描述设备运行时的事件,包括告警、信息和故障等3种事件类型,可添加多个输出参数,如环境传感器检测到空气质量很差,空调异常告警等。 | EventId |
行为 | 用于描述复杂的业务逻辑,可添加多个调用参数和返回参数,可用于让设备执行某项特定的任务。例如,开锁动作需要知道是哪个用户在什么时间开锁,锁的状态如何等。并且行为的输入参数和输出参数可添加上述6种属性的基本数据类型。 | ActionId |
数据类型支持以下六种:
布尔型:非真即假的二值型变量。例如,开关功能。
整数型:可用于线性调节的整数变量。例如,空调的温度。
字符型:以字符串形式表达的功能点,例如,灯的位置。
浮点型:精度为浮点型的功能点。例如,压力值的范围:0.0 - 24.0。
枚举型:自定义的有限集合值。例如,灯的颜色:白色、红色、黄色等。
时间型:string 类型的 UTC 时间戳(毫秒)。
数据模板是一个 JSON 格式的文件,使用数据模板协议,用户的设备需按数据模板定义要求传输设备数据到云端,并可使用基于数据模板的诸多业务功能,单击查看 JSON,可查看到已创建功能的 JSON 格式协议。
![](https://qcloudimg.tencent-cloud.cn/image/document/c106e3ee2d5a4848a9183ec16ff949a2.jpeg)
![](https://qcloudimg.tencent-cloud.cn/image/document/c106e3ee2d5a4848a9183ec16ff949a2.jpeg)
步骤2:移植 mbedtls
腾讯云 C SDK 对接云端时如果配置建立安全链接,将会用到 mbedtls 加密库,所以需要先移植 mbedtls。
1. TencentOS-tiny 中已经移植适配好 mbedtls 库,并作为 TencentOS-tiny 的一个组件,在 ![](https://qcloudimg.tencent-cloud.cn/image/document/956b36f28a4f53117f0e773835e080bb.png)
components\\security\\mbedtls
目录下,将此目录复制到工程目录中,复制过程中保持目录架构不变,并将其余的文件删除。
![](https://qcloudimg.tencent-cloud.cn/image/document/956b36f28a4f53117f0e773835e080bb.png)
2. 将 mbedtls 相关的 c 文件添加到 Keil-MDK 工程中:
2.1 在 Keil 工程中新建 mbedtls 目录分组。
2.2 将
components\\security\\mbedtls\\wrapper\\src
目录下的移植适配文件添加至 mbedtls 目录下。2.3 将
components\\security\\mbedtls\\3rdparty\\src
目录下的源码文件添加至 mbedtls 目录下 。![](https://qcloudimg.tencent-cloud.cn/image/document/739595f9eee8a53c8a91b28eba2244b7.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/739595f9eee8a53c8a91b28eba2244b7.png)
3. 将 mbedtls 相关的头文件路径都添加到 Keil-MDK 工程中,移植完成。
![](https://qcloudimg.tencent-cloud.cn/image/document/ea3887f9b442fae6f303649940d31f2a.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/ea3887f9b442fae6f303649940d31f2a.png)
注意:
此时还没有指定 mbedtls 配置文件,编译会报错,继续按后续的步骤操作即可。
步骤3:移植腾讯云 C SDK
TencentOS-tiny 官方已经将 IoT_Explorer C SDK 移植适配完成,在
components\\connectivity\\qcloud-iot-explorer-sdk
目录下,其中:3rdparty:IoT_Explorer C SDK 源码。
port\\TencentOS_tiny:移植适配文件 qcloud/port。
用于使用 TencentOS-tiny 物联网操作系统时,只需要添加相关文件,并修改云端设备对接信息即可,方便快捷。
接下来将介绍基于之前步骤已移植成功的网络工程,讲述如何移植 C SDK。
1. 将 TencentOS-tiny 源码中 ![](https://qcloudimg.tencent-cloud.cn/image/document/35c5ba8586a3f2fa2983a0c97ffd3e20.png)
qcloud-iot-explorer-sdk
整个目录复制到工程目录中,保持原有目录架构不变并删除其余的目录。
![](https://qcloudimg.tencent-cloud.cn/image/document/35c5ba8586a3f2fa2983a0c97ffd3e20.png)
2. 添加腾讯云 C SDK 移植到 TencentOS-tiny 的适配文件。
2.1 在Keil 工程下新增 qcloud/port 目录分组。
2.2 将
components\\connectivity\\qcloud-iot-explorer-sdk\\port\\TencentOS_tiny
分组下的部分文件添加至 qcloud/port 目录下。![](https://qcloudimg.tencent-cloud.cn/image/document/a453d86546bb0704ae87b8d389634288.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/a453d86546bb0704ae87b8d389634288.png)
3. 添加腾讯云 C SDK 中的 MQTT 协议相关源码。
3.1 在Keil 工程下新增 qcloud/protocol/mqtt 目录分组。
3.2 将
components\\connectivity\\qcloud-iot-explorer-sdk\\3rdparty\\sdk_src\\protocol\\mqtt
目录下的文件添加至 qcloud/protocol/mqtt 目录下。![](https://qcloudimg.tencent-cloud.cn/image/document/47f3fdbdb11e4bf05f4690cc81eae9e8.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/47f3fdbdb11e4bf05f4690cc81eae9e8.png)
4. 添加腾讯云 C SDK 中的数据模板相关源码。
4.1 在Keil 工程下新增 qcloud/services/data_template 目录分组。
4.2 将
components\\connectivity\\qcloud-iot-explorer-sdk\\3rdparty\\sdk_src\\services\\data_template
目录下的文件添加至 qcloud/services/data_template 目录下。![](https://qcloudimg.tencent-cloud.cn/image/document/825a1c7bf105c6741d34d2b90e05de8d.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/825a1c7bf105c6741d34d2b90e05de8d.png)
5. 添加腾讯云 C SDK 中所使用到的工具源码。
5.1 在Keil 工程下新增 qcloud/utils 目录分组。
5.2 将
components\\connectivity\\qcloud-iot-explorer-sdk\\3rdparty\\sdk_src\\utils
目录下的文件添加至 qcloud/utils 目录下。![](https://qcloudimg.tencent-cloud.cn/image/document/ed588e4d13131ce2496ec8f4dbec2f0f.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/ed588e4d13131ce2496ec8f4dbec2f0f.png)
6. 添加腾讯云 C SDK 中所用到网络封装层源。
6.1 在Keil 工程下新增 qcloud/network 目录分组。
6.2 将
components\\connectivity\\qcloud-iot-explorer-sdk\\3rdparty\\sdk_src\\network
目录下的文件添加至 qcloud/network 目录下。6.3 将
components\\connectivity\\qcloud-iot-explorer-sdk\\3rdparty\\platform\\tls\\mbedtls
目录下的文件添加至 qcloud/network 目录下。![](https://qcloudimg.tencent-cloud.cn/image/document/86381c603c1427b343dc80cd757e6c7d.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/86381c603c1427b343dc80cd757e6c7d.png)
7. 添加所有用到的头文件路径。
![](https://qcloudimg.tencent-cloud.cn/image/document/c9918f1f187b0bbf9b14670bdedc7f58.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/c9918f1f187b0bbf9b14670bdedc7f58.png)
8. 最后添加宏定义 ![](https://qcloudimg.tencent-cloud.cn/image/document/469f300449009bfb230a242e8bb9b1ab.png)
MBEDTLS_CONFIG_FILE=<qcloud/tls_psk_config.h>
,指定 mbedtls 库的配置文件。
![](https://qcloudimg.tencent-cloud.cn/image/document/469f300449009bfb230a242e8bb9b1ab.png)
移植完成,此时编译时未发现错误信息,其中警告可暂时忽略。
步骤4:修改端云对接信息
修改
HAL_Device_tencentos_tiny.c
文件。在 TencentOS-tiny\\components\\connectivity\\qcloud-iot-explorer-sdk\\port\\TencentOS_tiny
目录中,将下图中的数据分别替换为控制台“设备详情页”中的参数并保存。产品 ID: 将控制台的产品 ID ,复制到下图 sg_product_id。
设备名称: 将控制台的设备名称,复制到下图 sg_device_name。
设备密钥:将控制台的设备密钥,复制到下图 sg_device_secret。
![](https://qcloudimg.tencent-cloud.cn/image/document/5f69d3c25b8f47236f5ddced6a8c0752.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/5f69d3c25b8f47236f5ddced6a8c0752.png)
步骤5:加入示例代码
1. 由于腾讯云 C SDK 的测试代码较多,所以将直接使用官方仓库中提供的示例文件。
1.1 在 ![](https://qcloudimg.tencent-cloud.cn/image/document/be0fe25621f8398c22c74b87ad575680.png)
examples\\qcloud_iot_explorer_sdk_data_template
目录下,将此目录复制到工程目录中,保持原有目录架构不变。
![](https://qcloudimg.tencent-cloud.cn/image/document/be0fe25621f8398c22c74b87ad575680.png)
1.2 将示例代码加入到 Keil-MDK 工程中。
注意:
请勿将
data_config.c
文件加入。1.2.1 在 Keil 工程中新增 examples 目录分组。
1.2.2 将
examples\\qcloud_iot_explorer_sdk_data_template
目录下的文件添加至 example 目录下。![](https://qcloudimg.tencent-cloud.cn/image/document/d2d3653b9c76d537b2aa57aa4567eba0.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/d2d3653b9c76d537b2aa57aa4567eba0.png)
1.3 修改 ![](https://qcloudimg.tencent-cloud.cn/image/document/80b3a84aab8f021551924f008abf3f77.png)
entry.c
中的配置信息。
![](https://qcloudimg.tencent-cloud.cn/image/document/80b3a84aab8f021551924f008abf3f77.png)
2. 示例代码中的任务入口函数为 application_entry,所以需要将 task1 任务的任务入口函数修改为 application_entry,并再次扩大 task1 的任务栈为4096字节,使示例程序正常运行。
![](https://qcloudimg.tencent-cloud.cn/image/document/ad575b52854a6ee6c4bc9abf26edf792.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/ad575b52854a6ee6c4bc9abf26edf792.png)
3. 然后修改创建任务的代码。
![](https://qcloudimg.tencent-cloud.cn/image/document/2f7ca4b6e9ad0e58b18738e913ef60cd.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/2f7ca4b6e9ad0e58b18738e913ef60cd.png)
4. 最后进行编译,将程序下载到开发板中,复位开发板后开始运行,便可以在串口助手中查看打印信息。
步骤6:查看设备状态
1. 保持 light Demo 程序为运行状态。
2. 进入 控制台 > 产品开发 > 设备调试,可查看到设备 "dev001" 的状态为“上线”状态,表示 Demo 程序已成功连接上开发平台。
![](https://qcloudimg.tencent-cloud.cn/image/document/83f3da407e4504bdde7c420c9f23de54.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/83f3da407e4504bdde7c420c9f23de54.png)
3. 单击查看,可进入设备详情页。
![](https://qcloudimg.tencent-cloud.cn/image/document/78c5434bc3aa0cc449ff2cf37470c750.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/78c5434bc3aa0cc449ff2cf37470c750.png)
步骤7:下发控制指令
1. 在串口助手中看到设备查看到在等待平台下发控制指令。
![](https://qcloudimg.tencent-cloud.cn/image/document/10b6eb5384381d333584eb9110f6fcf1.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/10b6eb5384381d333584eb9110f6fcf1.png)
2. 然后在云端平台进入设备在线调试,下发控制指令。
![](https://qcloudimg.tencent-cloud.cn/image/document/60b3eb1e2ab7c49045c331e450f02985.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/60b3eb1e2ab7c49045c331e450f02985.png)
3. 最后可以在串口助手中查看到设备收到后在串口打印控制指令。
![](https://qcloudimg.tencent-cloud.cn/image/document/fa70a758dcba1897535f74fa568f1cd8.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/fa70a758dcba1897535f74fa568f1cd8.png)
步骤8:设备行为调用
1. 在云端的数据模板中手动新建一个设备行为功能。
![](https://qcloudimg.tencent-cloud.cn/image/document/3bd1bdf5436d99b6f1579f72d1f33c3c.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/3bd1bdf5436d99b6f1579f72d1f33c3c.png)
2. 在 ![](https://qcloudimg.tencent-cloud.cn/image/document/27637a92402ae4dba23d0789449d0db2.png)
data_template_sample.c
文件中使能 Action。
![](https://qcloudimg.tencent-cloud.cn/image/document/27637a92402ae4dba23d0789449d0db2.png)
3. 重新编译下载,按复位运行。
在云端下发设备行为调用:
![](https://qcloudimg.tencent-cloud.cn/image/document/30f61904ade40ab73b3ad4f4f796e454.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/30f61904ade40ab73b3ad4f4f796e454.png)
在串口助手中可以看到设备行为被调用:
![](https://qcloudimg.tencent-cloud.cn/image/document/046849cd80e8cc7a3e821b193186d76c.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/046849cd80e8cc7a3e821b193186d76c.png)
步骤9:设备事件调用
1. 修改 ![](https://qcloudimg.tencent-cloud.cn/image/document/71c6a2fda814c956b39b74d47c0c113f.png)
config.h
文件,将设备行为调用关闭,开启设备事件支持。
![](https://qcloudimg.tencent-cloud.cn/image/document/71c6a2fda814c956b39b74d47c0c113f.png)
2. 修改 ![](https://qcloudimg.tencent-cloud.cn/image/document/851b267a2e5df938811dbec2c8679f9d.png)
data_template_sample.c
文件,开启事件上报示例,屏蔽设备行为调用示例。
![](https://qcloudimg.tencent-cloud.cn/image/document/851b267a2e5df938811dbec2c8679f9d.png)
3. 编译程序,下载到开发板中,复位。
在串口助手中可以看到设备上报事件的日志:
![](https://qcloudimg.tencent-cloud.cn/image/document/8ddf2e69876bc034792dd3e051d5f042.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/8ddf2e69876bc034792dd3e051d5f042.png)
在平台端可以看到设备上报事件的日志:
![](https://qcloudimg.tencent-cloud.cn/image/document/159742c08b91a5bc31ca9bad7b4315c8.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/159742c08b91a5bc31ca9bad7b4315c8.png)