无操作系统的MCU设备通过TCP模组接入物联网平台,实现数据上报。
前提条件
在进行本实践前,您需要完成以下准备工作:
- 注册阿里云账号,并完成实名认证。
- 开通物联网平台,点击查看物联网平台详情页。
- 准备MCU开发板及软件开发环境。
说明 本文中使用以下设备进行开发实践。
- 开发环境为IAR Embedded Workbench for ARM,点击查看详情。
- MCU为ST公司(意法半导体公司)生产的STM32F103,点击查看详情。
- 开发板NUCLEO-F103RB,点击查看详情。
- 通信模组为SIMCom公司(芯讯通无线科技有限公司)生产的SIM800C,点击查看详情。
- 开发板SIM800C mini V2,您可以点击登录淘宝购买。
背景信息
阿里云物联网平台官方发布的C语言版本的设备端SDK 可以接入到无操作系统的MCU(Micro controller)上,使用MQTT协议完成设备上云。点击查看设备端SDK详情。
无操作系统设备通过TCP模组上云的流程图如下图所示。
图 1. 上云流程图
创建产品和设备
在物联网平台创建产品和设备,获取设备证书信息。在物联网平台注册产品和设备,获取设备证书信息(ProductKey、DeviceName和DeviceSecret)。设备证书信息需配置到设备端SDK中。当设备请求连接物联网平台时,物联网平台会根据设备证书信息进行设备身份验证。
- 点击登录物联网平台控制台。
- 创建产品。
- 在左侧导航栏,选择设备管理>产品。
- 在产品管理页,单击创建产品。
- 填入产品信息,单击确定。完成产品创建。

- 创建设备。
- 在左侧导航栏,选择设备。
- 在设备管理页,单击添加设备。
- 选择刚创建的产品,输入设备名称和备注名称,单击确定。完成设备创建。
设备创建成功后,会弹出设备证书信息。您也可以在设备管理页,单击设备对应的查看按钮,进入设备详情页查看设备证书信息。
开发设备端
- 连接硬件。
将两个开发板的接收和发送串口连接,作为AT指令通道,如下图所示。

- 搭建软件环境。
- 打开ST-cubemx,新建Project。
- 在Board Seletor中,选择NUCLEO-F103RB开发板。
- 在Connectivity菜单中,添加串口USART1作为MCU与模组通信的端口,并进行以下配置。
- 在Configuration中选择USARTx。
- 将USART1(AT端口)的interrupt设置为enable。

- 在Middleware菜单中,选择FREERTOS,并配置为使用计数信号量和堆大小(用于给每个线程分配栈)。

- 单击Apply>OK。
- 单击Cubemx的Project选项中的Generate Code,并进行设置。
- Toolchain/IDE选择为IAR™。
- Heap/Satck size按需进行配置。

- 单击OK生成代码工程。
- 配置设备端SDK。
本示例使用的设备端C语言SDK版本为3.0.1。
- 点击下载SDK。
- 从下载包中提取SDK代码。
本文以Linux系统操作为例。
- 运行make menuconfig。
- 选中ATM Configurations,单击Select。

- 选中AT HAL Configurations,单击Select。

- 配置如下项目。
FEATURE_PLATFORM_HAS_STDINT=y
FEATURE_INFRA_STRING=y
FEATURE_INFRA_NET=y
FEATURE_INFRA_LIST=y
FEATURE_INFRA_LOG=y
FEATURE_INFRA_LOG_ALL_MUTED=y
FEATURE_INFRA_LOG_MUTE_FLW=y
FEATURE_INFRA_LOG_MUTE_DBG=y
FEATURE_INFRA_LOG_MUTE_INF=y
FEATURE_INFRA_LOG_MUTE_WRN=y
FEATURE_INFRA_LOG_MUTE_ERR=y
FEATURE_INFRA_LOG_MUTE_CRT=y
FEATURE_INFRA_TIMER=y
FEATURE_INFRA_SHA256=y
FEATURE_INFRA_REPORT=y
FEATURE_INFRA_COMPAT=y
FEATURE_DEV_SIGN=y
FEATURE_MQTT_COMM_ENABLED=y
FEATURE_MQTT_DEFAULT_IMPL=y
FEATURE_MQTT_DIRECT=y
FEATURE_DEVICE_MODEL_CLASSIC=y
FEATURE_ATM_ENABLED=y
FEATURE_AT_TCP_ENABLED=y
FEATURE_AT_PARSER_ENABLED=y
FEATURE_AT_TCP_HAL_SIM800=y
- 配置完成后,在Linux中运行
./extract.sh
提取代码。

提取的代码位于
output/eng目录。

其中,各子目录分别包含的代码如下表。
目录 |
代码内容 |
atm |
AT指令收发模块 |
dev_sign |
设备身份认证模块 |
infra |
内部实现模块 |
mqtt |
MQTT协议模块 |
wrappers |
HAL对接模块 |
- 在wrappers目录下,新建文件wrappers.c,该文件中的代码需实现以下HAL函数。
int32_t HAL_AT_Uart_Deinit(uart_dev_t *uart)
int32_t HAL_AT_Uart_Init(uart_dev_t *uart)
int32_t HAL_AT_Uart_Recv(uart_dev_t *uart, void *data, uint32_t expect_size, uint32_t
*recv_size, uint32_t timeout)
int32_t HAL_AT_Uart_Send(uart_dev_t *uart, const void *data, uint32_t size, uint32_t
timeout)
int HAL_GetFirmwareVersion(char *version)
int HAL_GetDeviceName(char device_name[IOTX_DEVICE_NAME_LEN])
int HAL_GetDeviceSecret(char device_secret[IOTX_DEVICE_SECRET_LEN])
int HAL_GetProductKey(char product_key[IOTX_PRODUCT_KEY_LEN])
void*HAL_Malloc(uint32_t size)
void HAL_Free(void *ptr)
void*HAL_MutexCreate(void)
void HAL_MutexDestroy(void *mutex)
void HAL_MutexLock(void *mutex)
void HAL_MutexUnlock(void *mutex)
void HAL_Printf(const char *fmt, ...)
void HAL_SleepMs(uint32_t ms)
int HAL_Snprintf(char *str, const int len, const char *fmt, ...)
uint64_t HAL_UptimeMs(void)
- 在代码Demo中,替换设备证书信息为您的设备证书信息。

点击下载wrappers.c文件的代码Demo。
说明 如果通信模组为其他模组,则在配置
FEATURE_AT_TCP_HAL_SIM800=n
。需实现的HAL函数列表如下所示。
int HAL_AT_CONN_Close(int fd, int32_t remote_port)
int HAL_AT_CONN_Deinit(void)
int HAL_AT_CONN_DomainToIp(char *domain, char ip[16])
int HAL_AT_CONN_Init(void)
int HAL_AT_CONN_Send(int fd, uint8_t *data, uint32_t len, char remote_ip[16],int32_t remote_port, int32_t timeout)
int HAL_AT_CONN_Start(at_conn_t *conn)
int32_t HAL_AT_Uart_Deinit(uart_dev_t *uart)
int32_t HAL_AT_Uart_Init(uart_dev_t *uart)
int32_t HAL_AT_Uart_Recv(uart_dev_t *uart, void *data, uint32_t expect_size, uint32_t
*recv_size, uint32_t timeout)
int32_t HAL_AT_Uart_Send(uart_dev_t *uart, const void *data, uint32_t size, uint32_t
timeout)
int HAL_GetDeviceName(char device_name[IOTX_DEVICE_NAME_LEN + 1])
int HAL_GetDeviceSecret(char device_secret[IOTX_DEVICE_SECRET_LEN + 1])
int HAL_GetFirmwareVersion(char *version)
int HAL_GetProductKey(char product_key[IOTX_PRODUCT_KEY_LEN + 1])
void*HAL_Malloc(uint32_t size)
void HAL_Free(void *ptr)
void*HAL_MutexCreate(void)
void HAL_MutexDestroy(void *mutex)
void HAL_MutexLock(void *mutex)
void HAL_MutexUnlock(void *mutex)
void HAL_Printf(const char *fmt, ...)
void HAL_SleepMs(uint32_t ms)
int HAL_Snprintf(char *str, const int len, const char *fmt, ...)
uint64_t HAL_UptimeMs(void)
整合SDK
- 将SDK整合到IAR工程中。
如下图所示。

- 运行SDK。
运行SDK,进行测试。运行成功后,设备端日志如下。

在物联网平台控制台,
监控运维>
日志服务中,也可查看设备上报数据到云端的日志。

名词解释
- MCU
微控制单元(Microcontroller Unit) ,又称单片机。
- 设备端SDK
阿里云物联网平台提供的Link Kit SDK即设备端SDK,用于设备端开发。设备需要支持TCP/IP协议栈才能集成Link Kit SDK。设备厂商将设备端SDK集成到设备上,设备便可通过该SDK安全地接入到阿里云物联网平台。目前,物联网平台提供六种设备端SDK:C
SDK、Java SDK、Python SDK、Node.js SDK、Android SDK和iOS SDK。本示例使用的是C SDK。
点击下载SDK并查看使用说明。
- 设备证书
设备证书指ProductKey、DeviceName和DeviceSecret,是阿里云物联网平台认证设备的标识。设备证书信息不可泄露。
- ProductKey
物联网平台为产品颁发的全局唯一标识。
- DeviceName
在注册设备时,自定义的或系统自动生成的设备名称,具备产品维度内的唯一性。
- DeviceSecret
物联网平台为设备颁发的设备密钥。
在文档使用中是否遇到以下问题
更多建议
匿名提交