Skip to content

TencentCloud/tencentcloud-iot-sdk-embedded-c

Folders and files

NameName
Last commit message
Last commit date

Latest commit

c3ff8ab · Sep 10, 2024
Sep 19, 2019
Sep 10, 2024
Aug 1, 2022
Oct 26, 2022
Oct 26, 2022
Aug 11, 2022
Jun 21, 2023
Sep 26, 2022
Aug 4, 2020
Sep 19, 2019
Aug 11, 2022
Sep 19, 2019
Sep 19, 2019
Aug 11, 2022
Apr 30, 2020
Sep 3, 2021
Apr 30, 2020
Oct 19, 2021
Aug 11, 2022

Repository files navigation

腾讯云物联网设备端 C-SDK

腾讯云物联网设备端 C-SDK 依靠安全且性能强大的数据通道,为物联网领域开发人员提供设备端快速接入云端,并和云端进行双向通信的能力。

在版本v3.1.0之后,SDK对编译环境,代码及目录结构进行了重构优化,提高了可用性和可移植性。

本SDK仅适用于物联网通信平台IoT Hub,对于物联网开发平台,请访问 IoT Explorer C-SDK

一、C-SDK 适用范围

C-SDK 采用模块化设计,分离核心协议服务与硬件抽象层,并提供灵活的配置选项和多种编译方式,适用于不同设备的开发平台和使用环境。

1. 具备网络通讯能力并使用Linux/Windows操作系统的设备

对于具备网络通讯能力并使用标准 Linux/Windows 系统的设备比如PC/服务器/网关设备,及较高级的嵌入式设备比如树莓派等等,可直接在该设备上编译运行SDK。 对于需要交叉编译的嵌入式 Linux 设备,如果开发环境的toolchain具备glibc或类似的库,可以提供包括socket通讯,select同步IO,动态内存分配,获取时间/休眠/随机数/打印函数,以及临界数据保护如Mutex机制(仅在需要多线程时)等系统调用,则只要做简单适配(比如在CMakeLists.txt或make.settings里面修改交叉编译器的设定)就可以编译运行SDK。

2. 具备网络通讯能力并采用RTOS系统的设备

对于具备网络通讯能力并采用RTOS的物联网设备,C-SDK需要针对不同的RTOS做移植适配工作,目前C-SDK已经适配了包括FreeRTOS/RT-Thread/TencentOS tiny等多个面向物联网的RTOS平台。 在RTOS设备移植SDK时,如果平台提供了类似newlib的C运行库和类似lwIP的嵌入式TCP/IP协议栈,则移植适配工作也可以轻松完成。

3. MCU+通讯模组的设备

对于不具备网络通讯能力的MCU,一般采用MCU+通讯模组的方式,通讯模组(包括WiFi/2G/4G/NB-IoT)一般提供了基于串口的AT指令协议供MCU进行网络通讯。针对这种场景,C-SDK 封装了AT-socket网络层,网络层之上的核心协议和服务层无须移植。并提供了基于FreeRTOS和不带操作系统(nonOS)两种方式的HAL实现,具体可以参考docs目录文档。

除此之外,腾讯云物联网还提供了专用的AT指令集,如果通讯模组实现了该指令集,则设备接入和通讯更为简单,所需代码量更少,针对这种场景,请参考面向腾讯云定制AT模组专用的 MCU AT SDK

二、SDK 目录结构简介

1. 目录结构及顶层文件简介

名称 说明
CMakeLists.txt cmake编译描述文件
CMakeSettings.json visual studio下的cmake配置文件
cmake_build.sh Linux下使用cmake的编译脚本
make.settings Linux下使用Makefile直接编译的配置文件
Makefile Linux下使用Makefile直接编译
device_info.json 设备信息文件,当DEBUG_DEV_INFO_USED=OFF时,将从该文件解析出设备信息
docs 文档目录,SDK在不同平台下使用说明文档。
external_libs 第三方软件包组件,如mbedtls
samples 应用示例
include 提供给用户使用的外部头文件
platform 平台相关的源码文件,目前提供了针对不同OS(Linux/Windows/FreeRTOS/nonOS),TLS(mbedtls)以及AT模组下的实现。
sdk_src SDK核心通信协议及服务代码
tools SDK配套的编译及代码生成脚本工具

三、SDK 编译方式说明

C-SDK 支持三种编译方式:

  • cmake 方式
  • Makefile 方式
  • 代码抽取方式

编译方式以及编译配置选项的详细说明请参考docs目录文档 C-SDK_Build编译环境及配置选项说明

四、SDK 示例体验

C-SDK的samples目录有使用各个功能的示例,关于运行示例的详细说明,请参考docs目录各个文档

五、注意事项

多设备连接

从版本3.2.0开始,SDK支持多个设备作为客户端同时访问物联网后台,并对多线程环境下的接口使用进行优化增强,具体请参考docs目录文档C-SDK_MTMC多线程多设备支持 该版本以面向对象方式对状态变量和参数进行封装,对外部接口的影响是证书设备进行初始化上有变化,其他的接口都没有变化,用户只要参考相关示例修改_setup_connect_init_params函数即可。

OTA升级API变化

从SDK版本3.0.3开始,OTA升级支持了断点续传,当固件下载过程中如果因为网络异常或其他原因被打断,可以将已经下载的固件部分保存,在下次恢复下载时候可以不用从零开始下载,而是从未下载的部分开始。 在支持这一新特性之后,OTA相关API的使用方法发生了变化,对于从3.0.2及以前的版本升级的用户,需要修改用户逻辑代码,否则固件下载会失败,请参考samples/ota/ota_mqtt_sample.c进行修改。

代码命名变化

为了提高代码可读性,保证命名规范,SDK 3.1.0版本对部分变量、函数及宏命名进行了变更,对于从3.0.3及以前的版本升级的用户,可以在Linux环境下面执行tools/update_from_old_SDK.sh脚本对自己的用户代码执行名字替换,替换完成就可以直接使用新版本的SDK。

旧命名 新命名
QCLOUD_ERR_SUCCESS QCLOUD_RET_SUCCESS
QCLOUD_ERR_MQTT_RECONNECTED QCLOUD_RET_MQTT_RECONNECTED
QCLOUD_ERR_MQTT_MANUALLY_DISCONNECTED QCLOUD_RET_MQTT_MANUALLY_DISCONNECTED
QCLOUD_ERR_MQTT_CONNACK_CONNECTION_ACCEPTED QCLOUD_RET_MQTT_CONNACK_CONNECTION_ACCEPTED
QCLOUD_ERR_MQTT_ALREADY_CONNECTED QCLOUD_RET_MQTT_ALREADY_CONNECTED
MAX_SIZE_OF_DEVICE_SERC MAX_SIZE_OF_DEVICE_SECRET
devCertFileName dev_cert_file_name
devPrivateKeyFileName dev_key_file_name
devSerc device_secret
MAX_SIZE_OF_PRODUCT_KEY MAX_SIZE_OF_PRODUCT_SECRET
product_key product_secret。
DEBUG eLOG_DEBUG
INFO eLOG_INFO
WARN eLOG_WARN
ERROR eLOG_ERROR
DISABLE eLOG_DISABLE
Log_writter IOT_Log_Gen
qcloud_iot_dyn_reg_dev IOT_DynReg_Device
IOT_SYSTEM_GET_TIME IOT_Get_SysTime
#! /bin/bash

sed -i "s/QCLOUD_ERR_SUCCESS/QCLOUD_RET_SUCCESS/g" `grep -rwl QCLOUD_ERR_SUCCESS ./*`
sed -i "s/QCLOUD_ERR_MQTT_RECONNECTED/QCLOUD_RET_MQTT_RECONNECTED/g" `grep -rwl QCLOUD_ERR_MQTT_RECONNECTED ./*`
sed -i "s/QCLOUD_ERR_MQTT_MANUALLY_DISCONNECTED/QCLOUD_RET_MQTT_MANUALLY_DISCONNECTED/g" `grep -rwl QCLOUD_ERR_MQTT_MANUALLY_DISCONNECTED ./*`
sed -i "s/QCLOUD_ERR_MQTT_CONNACK_CONNECTION_ACCEPTED/QCLOUD_RET_MQTT_CONNACK_CONNECTION_ACCEPTED/g" `grep -rwl QCLOUD_ERR_MQTT_CONNACK_CONNECTION_ACCEPTED ./*`
sed -i "s/QCLOUD_ERR_MQTT_ALREADY_CONNECTED/QCLOUD_RET_MQTT_ALREADY_CONNECTED/g" `grep -rwl QCLOUD_ERR_MQTT_ALREADY_CONNECTED ./*` 
sed -i "s/MAX_SIZE_OF_DEVICE_SERC/MAX_SIZE_OF_DEVICE_SECRET/g" `grep -rwl MAX_SIZE_OF_DEVICE_SERC ./*`
sed -i "s/devCertFileName/dev_cert_file_name/g" `grep -rwl devCertFileName ./*`
sed -i "s/devPrivateKeyFileName/dev_key_file_name/g" `grep -rwl devPrivateKeyFileName ./*`
sed -i "s/devSerc/device_secret/g" `grep -rwl devSerc ./*`
sed -i "s/MAX_SIZE_OF_PRODUCT_KEY/MAX_SIZE_OF_PRODUCT_SECRET/g" `grep -rwl MAX_SIZE_OF_PRODUCT_KEY ./*`
sed -i "s/product_key/product_secret/g" `grep -rwl product_key ./*` 
sed -i "s/DEBUG/eLOG_DEBUG/g" `grep -rwl DEBUG ./*`
sed -i "s/INFO/eLOG_INFO/g" `grep -rwl INFO ./*`
sed -i "s/WARN/eLOG_WARN/g" `grep -rwl WARN ./*`
sed -i "s/ERROR/eLOG_ERROR/g" `grep -rwl ERROR ./*`
sed -i "s/DISABLE/eLOG_DISABLE/g" `grep -rwl DISABLE ./*`
sed -i "s/Log_writter/IOT_Log_Gen/g" `grep -rwl Log_writter ./*` 
sed -i "s/qcloud_iot_dyn_reg_dev/IOT_DynReg_Device/g" `grep -rwl qcloud_iot_dyn_reg_dev ./*`
sed -i "s/IOT_SYSTEM_GET_TIME/IOT_Get_SysTime/g" `grep -rwl IOT_SYSTEM_GET_TIME ./*`