有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
腾讯云物联网开发平台 IoT Explorer 设备端 C SDK ,配合平台对设备数据模板化的定义,实现和云端基于数据模板协议的数据交互框架,开发者基于 IoT_Explorer C-SDK 数据模板框架,通过脚本自动生成模板代码,快速实现设备和平台、设备和应用之间的数据交互。

步骤1:创建云端设备

登录腾讯云 物联网开发平台控制台,创建云端设备,详情可参考 基于 TencentOS tiny 接入指引
另外,数据模板是将物理实体设备进行数字化描述,构建其数字模型。在物联网开发平台定义数据模板即定义产品功能,完成功能定义后,系统将自动生成该产品的数据模板。
进入 物联网开发控制台,单击项目 > 产品开发 > 智能灯产品 > 数据模板 > 新建功能,填写功能信息。

功能类型包含三种元素:
功能元素
功能描述
功能标识符
属性
包括布尔型、整数型、字符型、浮点型、枚举型和时间型等6种基本数据类型。
用于描述设备的实时状态,支持读取和设置,如模式、亮度、开关等。
PropertiesId
事件
包括告警、故障和信息3种类型,事件型功能属性可以添加具体的事件参数,这些参数可以由属性中6种基本数据类型组成。
用于描述设备运行时的事件,包括告警、信息和故障等3种事件类型,可添加多个输出参数,如环境传感器检测到空气质量很差,空调异常告警等。
EventId
行为
用于描述复杂的业务逻辑,可添加多个调用参数和返回参数,可用于让设备执行某项特定的任务。例如,开锁动作需要知道是哪个用户在什么时间开锁,锁的状态如何等。并且行为的输入参数和输出参数可添加上述6种属性的基本数据类型。
ActionId
数据类型支持以下六种:
布尔型:非真即假的二值型变量。例如,开关功能。
整数型:可用于线性调节的整数变量。例如,空调的温度。
字符型:以字符串形式表达的功能点,例如,灯的位置。
浮点型:精度为浮点型的功能点。例如,压力值的范围:0.0 - 24.0。
枚举型:自定义的有限集合值。例如,灯的颜色:白色、红色、黄色等。
时间型:string 类型的 UTC 时间戳(毫秒)。
数据模板是一个 JSON 格式的文件,使用数据模板协议,用户的设备需按数据模板定义要求传输设备数据到云端,并可使用基于数据模板的诸多业务功能,单击查看 JSON,可查看到已创建功能的 JSON 格式协议。



步骤2:移植 mbedtls

腾讯云 C SDK 对接云端时如果配置建立安全链接,将会用到 mbedtls 加密库,所以需要先移植 mbedtls。
1. TencentOS-tiny 中已经移植适配好 mbedtls 库,并作为 TencentOS-tiny 的一个组件,在 components\\security\\mbedtls 目录下,将此目录复制到工程目录中,复制过程中保持目录架构不变,并将其余的文件删除。


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 目录下 。



3. 将 mbedtls 相关的头文件路径都添加到 Keil-MDK 工程中,移植完成。


注意:
此时还没有指定 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 源码中 qcloud-iot-explorer-sdk 整个目录复制到工程目录中,保持原有目录架构不变并删除其余的目录。


2. 添加腾讯云 C SDK 移植到 TencentOS-tiny 的适配文件。
2.1 在Keil 工程下新增 qcloud/port 目录分组。
2.2 components\\connectivity\\qcloud-iot-explorer-sdk\\port\\TencentOS_tiny 分组下的部分文件添加至 qcloud/port 目录下。



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 目录下。



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 目录下。



5. 添加腾讯云 C SDK 中所使用到的工具源码。
5.1 在Keil 工程下新增 qcloud/utils 目录分组。
5.2 components\\connectivity\\qcloud-iot-explorer-sdk\\3rdparty\\sdk_src\\utils 目录下的文件添加至 qcloud/utils 目录下。



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 目录下。



7. 添加所有用到的头文件路径。


8. 最后添加宏定义 MBEDTLS_CONFIG_FILE=<qcloud/tls_psk_config.h>,指定 mebedtls 库的配置文件。


移植完成,此时编译时未发现错误信息,其中警告可暂时忽略。

步骤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。




步骤5:加入示例代码

1. 由于腾讯云 C SDK 的测试代码较多,所以将直接使用官方仓库中提供的示例文件。
1.1 examples\\qcloud_iot_explorer_sdk_data_template 目录下,将此目录复制到工程目录中,保持原有目录架构不变。


1.2 将示例代码加入到 Keil-MDK 工程中。
注意:
请勿将 data_config.c 文件加入。
1.2.1 在 Keil 工程中新增 examples 目录分组。
1.2.2 examples\\qcloud_iot_explorer_sdk_data_template 目录下的文件添加至 example 目录下。



1.3 修改 entry.c 中的配置信息。


2. 示例代码中的任务入口函数为 application_entry,所以需要将 task1 任务的任务入口函数修改为 application_entry,并再次扩大 task1 的任务栈为4096字节,使示例程序正常运行。


3. 然后修改创建任务的代码。


4. 最后进行编译,将程序下载到开发板中,复位开发板后开始运行,便可以在串口助手中查看打印信息。

步骤6:查看设备状态

1. 保持 light Demo 程序为运行状态。
2. 进入 控制台 > 产品开发 > 设备调试,可查看到设备 "dev001" 的状态为“上线”状态,表示 Demo 程序已成功连接上开发平台。



3. 单击查看,可进入设备详情页。




步骤7:下发控制指令

1. 在串口助手中看到设备查看到在等待平台下发控制指令。


2. 然后在云端平台进入设备在线调试,下发控制指令。


3. 最后可以在串口助手中查看到设备收到后在串口打印控制指令。



步骤8:设备行为调用

1. 在云端的数据模板中手动新建一个设备行为功能。


2. data_template_sample.c 文件中使能 Action。


3. 重新编译下载,按复位运行。
在云端下发设备行为调用:


在串口助手中可以看到设备行为被调用:



步骤9:设备事件调用

1. 修改 config.h 文件,将设备行为调用关闭,开启设备事件支持。


2. 修改 data_template_sample.c 文件,开启事件上报示例,屏蔽设备行为调用示例。


3. 编译程序,下载到开发板中,复位。
在串口助手中可以看到设备上报事件的日志:


在平台端可以看到设备上报事件的日志: