{"id":31362491,"url":"https://github.com/tencentcloud/tencentcloud-iot-sdk-embedded-c","last_synced_at":"2025-09-27T04:54:33.300Z","repository":{"id":56295225,"uuid":"109129997","full_name":"TencentCloud/tencentcloud-iot-sdk-embedded-c","owner":"TencentCloud","description":"SDK for connecting to Tencent Cloud IoT from a device using embedded C.","archived":false,"fork":false,"pushed_at":"2025-07-08T02:06:31.000Z","size":9082,"stargazers_count":155,"open_issues_count":15,"forks_count":74,"subscribers_count":56,"default_branch":"master","last_synced_at":"2025-07-08T04:12:55.313Z","etag":null,"topics":["coap","linux","mqtt","sdk","tls","topic"],"latest_commit_sha":null,"homepage":"https://cloud.tencent.com/product/iothub","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TencentCloud.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-11-01T12:41:03.000Z","updated_at":"2025-07-08T02:06:36.000Z","dependencies_parsed_at":"2024-09-10T09:57:48.347Z","dependency_job_id":"b2cbe2ea-1599-4fc0-96be-fdca164bd1bc","html_url":"https://github.com/TencentCloud/tencentcloud-iot-sdk-embedded-c","commit_stats":null,"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/TencentCloud/tencentcloud-iot-sdk-embedded-c","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TencentCloud%2Ftencentcloud-iot-sdk-embedded-c","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TencentCloud%2Ftencentcloud-iot-sdk-embedded-c/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TencentCloud%2Ftencentcloud-iot-sdk-embedded-c/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TencentCloud%2Ftencentcloud-iot-sdk-embedded-c/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TencentCloud","download_url":"https://codeload.github.com/TencentCloud/tencentcloud-iot-sdk-embedded-c/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TencentCloud%2Ftencentcloud-iot-sdk-embedded-c/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277184134,"owners_count":25775285,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-27T02:00:08.978Z","response_time":73,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["coap","linux","mqtt","sdk","tls","topic"],"created_at":"2025-09-27T04:54:28.658Z","updated_at":"2025-09-27T04:54:33.295Z","avatar_url":"https://github.com/TencentCloud.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"#  腾讯云物联网设备端 C-SDK \n\n腾讯云物联网设备端 C-SDK 依靠安全且性能强大的数据通道，为物联网领域开发人员提供设备端快速接入云端，并和云端进行双向通信的能力。\n\n在版本v3.1.0之后，SDK对编译环境，代码及目录结构进行了重构优化，提高了可用性和可移植性。\n\n本SDK仅适用于物联网通信平台IoT Hub，对于物联网开发平台，请访问 [IoT Explorer C-SDK](https://github.com/tencentyun/qcloud-iot-explorer-sdk-embedded-c)\n\n## 一、C-SDK 适用范围\nC-SDK 采用模块化设计，分离核心协议服务与硬件抽象层，并提供灵活的配置选项和多种编译方式，适用于不同设备的开发平台和使用环境。\n\n#### 1. 具备网络通讯能力并使用Linux/Windows操作系统的设备\n\n对于具备网络通讯能力并使用标准 Linux/Windows 系统的设备比如PC/服务器/网关设备，及较高级的嵌入式设备比如树莓派等等，可直接在该设备上编译运行SDK。\n对于需要交叉编译的嵌入式 Linux 设备，如果开发环境的toolchain具备glibc或类似的库，可以提供包括socket通讯，select同步IO，动态内存分配，获取时间/休眠/随机数/打印函数，以及临界数据保护如Mutex机制（仅在需要多线程时）等系统调用，则只要做简单适配（比如在CMakeLists.txt或make.settings里面修改交叉编译器的设定）就可以编译运行SDK。\n\n#### 2. 具备网络通讯能力并采用RTOS系统的设备\n\n对于具备网络通讯能力并采用RTOS的物联网设备，C-SDK需要针对不同的RTOS做移植适配工作，目前C-SDK已经适配了包括FreeRTOS/RT-Thread/TencentOS tiny等多个面向物联网的RTOS平台。\n在RTOS设备移植SDK时，如果平台提供了类似newlib的C运行库和类似lwIP的嵌入式TCP/IP协议栈，则移植适配工作也可以轻松完成。\n\n#### 3. MCU+通讯模组的设备\n\n对于不具备网络通讯能力的MCU，一般采用MCU+通讯模组的方式，通讯模组（包括WiFi/2G/4G/NB-IoT）一般提供了基于串口的AT指令协议供MCU进行网络通讯。针对这种场景，C-SDK 封装了AT-socket网络层，网络层之上的核心协议和服务层无须移植。并提供了基于FreeRTOS和不带操作系统（nonOS）两种方式的HAL实现，具体可以参考docs目录文档。\n\n除此之外，腾讯云物联网还提供了专用的AT指令集，如果通讯模组实现了该指令集，则设备接入和通讯更为简单，所需代码量更少，针对这种场景，请参考面向腾讯云定制AT模组专用的 [MCU AT SDK](https://github.com/tencentyun/qcloud-iot-sdk-tencent-at-based.git)\n\n## 二、SDK 目录结构简介\n\n#### 1. 目录结构及顶层文件简介\n\n| 名称               | 说明                                                         |\n| ------------------ | ------------------------------------------------------------ |\n| CMakeLists.txt     | cmake编译描述文件                                            |\n| CMakeSettings.json | visual studio下的cmake配置文件                               |\n| cmake_build.sh     | Linux下使用cmake的编译脚本                                   |\n| make.settings      | Linux下使用Makefile直接编译的配置文件                        |\n| Makefile           | Linux下使用Makefile直接编译                                  |\n| device_info.json   | 设备信息文件，当DEBUG_DEV_INFO_USED=OFF时，将从该文件解析出设备信息 |\n| docs               | 文档目录，SDK在不同平台下使用说明文档。                      |\n| external_libs      | 第三方软件包组件，如mbedtls                                  |\n| samples            | 应用示例                                                     |\n| include            | 提供给用户使用的外部头文件                                   |\n| platform           | 平台相关的源码文件，目前提供了针对不同OS(Linux/Windows/FreeRTOS/nonOS)，TLS(mbedtls)以及AT模组下的实现。 |\n| sdk_src            | SDK核心通信协议及服务代码                                    |\n| tools              | SDK配套的编译及代码生成脚本工具                              |\n\n## 三、SDK 编译方式说明\n\nC-SDK 支持三种编译方式：\n\n- cmake 方式\n- Makefile 方式\n- 代码抽取方式\n\n编译方式以及编译配置选项的详细说明请参考docs目录文档 **C-SDK_Build编译环境及配置选项说明**\n\n## 四、SDK 示例体验\n\nC-SDK的samples目录有使用各个功能的示例，关于运行示例的详细说明，请参考docs目录各个文档\n\n## 五、注意事项\n\n#### 多设备连接\n从版本3.2.0开始，SDK支持多个设备作为客户端同时访问物联网后台，并对多线程环境下的接口使用进行优化增强，具体请参考docs目录文档**C-SDK_MTMC多线程多设备支持**\n该版本以面向对象方式对状态变量和参数进行封装，对外部接口的影响是证书设备进行初始化上有变化，其他的接口都没有变化，用户只要参考相关示例修改_setup_connect_init_params函数即可。\n\n#### OTA升级API变化\n从SDK版本3.0.3开始，OTA升级支持了断点续传，当固件下载过程中如果因为网络异常或其他原因被打断，可以将已经下载的固件部分保存，在下次恢复下载时候可以不用从零开始下载，而是从未下载的部分开始。\n在支持这一新特性之后，OTA相关API的使用方法发生了变化，对于从3.0.2及以前的版本升级的用户，需要修改用户逻辑代码，否则固件下载会失败，请参考**samples/ota/ota_mqtt_sample.c**进行修改。\n\n#### 代码命名变化\n为了提高代码可读性，保证命名规范，SDK 3.1.0版本对部分变量、函数及宏命名进行了变更，对于从3.0.3及以前的版本升级的用户，可以在Linux环境下面执行tools/update_from_old_SDK.sh脚本对自己的用户代码执行名字替换，替换完成就可以直接使用新版本的SDK。\n\n| 旧命名              | 新命名                                                         |\n| ------------------ | ------------------------------------------------------------ |\n| QCLOUD_ERR_SUCCESS     | QCLOUD_RET_SUCCESS                                            |\n| QCLOUD_ERR_MQTT_RECONNECTED | QCLOUD_RET_MQTT_RECONNECTED                               |\n| QCLOUD_ERR_MQTT_MANUALLY_DISCONNECTED     | QCLOUD_RET_MQTT_MANUALLY_DISCONNECTED                                   |\n| QCLOUD_ERR_MQTT_CONNACK_CONNECTION_ACCEPTED      | QCLOUD_RET_MQTT_CONNACK_CONNECTION_ACCEPTED                        |\n| QCLOUD_ERR_MQTT_ALREADY_CONNECTED           | QCLOUD_RET_MQTT_ALREADY_CONNECTED                                  |\n| MAX_SIZE_OF_DEVICE_SERC   | MAX_SIZE_OF_DEVICE_SECRET |\n| devCertFileName               | dev_cert_file_name                      |\n| devPrivateKeyFileName      | dev_key_file_name                                  |\n| devSerc            | device_secret                                                     |\n| MAX_SIZE_OF_PRODUCT_KEY            | MAX_SIZE_OF_PRODUCT_SECRET                                   |\n| product_key           | product_secret。 |\n| DEBUG            | eLOG_DEBUG                                    |\n| INFO              | eLOG_INFO                              |\n| WARN            | eLOG_WARN                                                     |\n| ERROR            | eLOG_ERROR                                   |\n| DISABLE           | eLOG_DISABLE |\n| Log_writter            | IOT_Log_Gen                                    |\n| qcloud_iot_dyn_reg_dev              | IOT_DynReg_Device                              |\n| IOT_SYSTEM_GET_TIME              | IOT_Get_SysTime                              |\n\n```\n#! /bin/bash\n\nsed -i \"s/QCLOUD_ERR_SUCCESS/QCLOUD_RET_SUCCESS/g\" `grep -rwl QCLOUD_ERR_SUCCESS ./*`\nsed -i \"s/QCLOUD_ERR_MQTT_RECONNECTED/QCLOUD_RET_MQTT_RECONNECTED/g\" `grep -rwl QCLOUD_ERR_MQTT_RECONNECTED ./*`\nsed -i \"s/QCLOUD_ERR_MQTT_MANUALLY_DISCONNECTED/QCLOUD_RET_MQTT_MANUALLY_DISCONNECTED/g\" `grep -rwl QCLOUD_ERR_MQTT_MANUALLY_DISCONNECTED ./*`\nsed -i \"s/QCLOUD_ERR_MQTT_CONNACK_CONNECTION_ACCEPTED/QCLOUD_RET_MQTT_CONNACK_CONNECTION_ACCEPTED/g\" `grep -rwl QCLOUD_ERR_MQTT_CONNACK_CONNECTION_ACCEPTED ./*`\nsed -i \"s/QCLOUD_ERR_MQTT_ALREADY_CONNECTED/QCLOUD_RET_MQTT_ALREADY_CONNECTED/g\" `grep -rwl QCLOUD_ERR_MQTT_ALREADY_CONNECTED ./*` \nsed -i \"s/MAX_SIZE_OF_DEVICE_SERC/MAX_SIZE_OF_DEVICE_SECRET/g\" `grep -rwl MAX_SIZE_OF_DEVICE_SERC ./*`\nsed -i \"s/devCertFileName/dev_cert_file_name/g\" `grep -rwl devCertFileName ./*`\nsed -i \"s/devPrivateKeyFileName/dev_key_file_name/g\" `grep -rwl devPrivateKeyFileName ./*`\nsed -i \"s/devSerc/device_secret/g\" `grep -rwl devSerc ./*`\nsed -i \"s/MAX_SIZE_OF_PRODUCT_KEY/MAX_SIZE_OF_PRODUCT_SECRET/g\" `grep -rwl MAX_SIZE_OF_PRODUCT_KEY ./*`\nsed -i \"s/product_key/product_secret/g\" `grep -rwl product_key ./*` \nsed -i \"s/DEBUG/eLOG_DEBUG/g\" `grep -rwl DEBUG ./*`\nsed -i \"s/INFO/eLOG_INFO/g\" `grep -rwl INFO ./*`\nsed -i \"s/WARN/eLOG_WARN/g\" `grep -rwl WARN ./*`\nsed -i \"s/ERROR/eLOG_ERROR/g\" `grep -rwl ERROR ./*`\nsed -i \"s/DISABLE/eLOG_DISABLE/g\" `grep -rwl DISABLE ./*`\nsed -i \"s/Log_writter/IOT_Log_Gen/g\" `grep -rwl Log_writter ./*` \nsed -i \"s/qcloud_iot_dyn_reg_dev/IOT_DynReg_Device/g\" `grep -rwl qcloud_iot_dyn_reg_dev ./*`\nsed -i \"s/IOT_SYSTEM_GET_TIME/IOT_Get_SysTime/g\" `grep -rwl IOT_SYSTEM_GET_TIME ./*`\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftencentcloud%2Ftencentcloud-iot-sdk-embedded-c","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftencentcloud%2Ftencentcloud-iot-sdk-embedded-c","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftencentcloud%2Ftencentcloud-iot-sdk-embedded-c/lists"}