对于不具备网络通讯能力的 MCU,一般采用 MCU+ 通讯模组的方式,通讯模组(包括 Wi-Fi/2G/4G/NB-IoT)一般提供基于串口的 AT 指令协议供 MCU 进行网络通讯。针对这种场景,C SDK 封装 AT-socket 网络层,网络层之上的核心协议和服务层无需移植。
相较于有 RTOS 场景,AT-socket 网络接收数据的处理会有差异,应用层需要周期性的调用 IOT_MQTT_Yield 来接收服务端下行数据,错过接收窗口则会存在数据丢失的情况,所以在业务逻辑较为复杂的场景建议使用 RTOS,通过配置
FEATURE_AT_OS_USED = OFF
选择无 OS 方式。SDK 获取
接入指引
MCU+ 通用 TCP AT 模组(nonOS)接入腾讯云物联网开发平台可以分为以下4个步骤。
SDK 功能配置
无 RTOS 使用通用 TCP 模组编译配置选项配置如下:
名称 | 配置 | 说明 |
BUILD_TYPE | debug/release | 根据需要设置。 |
EXTRACT_SRC | ON | 使能代码抽取。 |
COMPILE_TOOLS | gcc/MSVC | 根据需要设置,IDE 情况不关注。 |
PLATFORM | Linux/Windows | 根据需要设置,IDE 情况不关注。 |
FEATURE_OTA_COMM_ENABLED | ON/OFF | 根据需要设置。 |
FEATURE_AUTH_MODE | KEY | 资源受限设备认证方式建议选密钥认证。 |
FEATURE_AUTH_WITH_NOTLS | ON/OFF | 根据需要是否使能 TLS。 |
FEATURE_EVENT_POST_ENABLED | ON/OFF | 根据需要是否使能事件上报。 |
FEATURE_AT_TCP_ENABLED | ON | 使能 AT-socket 组件。 |
FEATURE_AT_UART_RECV_IRQ | ON | 使能 AT 串口中断接收。 |
FEATURE_AT_OS_USED | OFF | AT-socket 组件无 RTOS 环境使用。 |
FEATURE_AT_DEBUG | OFF | 默认关闭 AT 模组调试功能,有调试需要再打开。 |
代码抽取
1. 在 Linux 环境运行以下命令:
mkdir buildcd buildcmake ..
2. 即可在 output/qcloud_iot_c_sdk 中,找到相关代码文件,目录层次如下:
qcloud_iot_c_sdk├── include│ ├── config.h│ ├── exports├── platform└── sdk_src└── internal_inc
说明:
include 目录:SDK 提供用户使用的 API 及可变参数,其中 config.h 为根据编译选项生成的编译宏。
platform 目录:平台相关的代码,可根据设备的具体情况进行修改适配。
sdk_src :SDK 的核心逻辑及协议相关代码,一般不需要修改,其中 internal_inc 为 SDK 内部使用的头文件。
3. 用户可将 qcloud_iot_c_sdk 拷贝到其目标平台的编译开发环境,并根据具体情况修改编译选项。
HAL 层移植
对于网络相关的 HAL 接口,通过本文编译选项已选择 SDK 提供的 AT_Socket 框架,SDK 会调用
network_at_tcp.c
的 AT-socket
接口,AT-socket
层不需要移植,需要实现 AT 串口驱动及 AT 模组驱动,AT 模组驱动只需要实现 AT 框架中 AT_device
的驱动结构体 AT_device_op_t
的驱动接口即可,可以参照 AT_device
目录下的已支持的模组。AT 串口驱动需要实现串口的中断接收,然后在中断服务程序中调用回调函数 AT_client_uart_rx_isr_cb
即可,可以参考 HAL_OS_nonos.c
实现目标平台的移植。