本文详细阐述了基于华为云IoT物联网平台实现设备端到端数据交互的完整流程。整体方案分为两个核心阶段:

模拟设备调试:首先,使用 MQTTX 客户端模拟设备,完成与华为云物联网平台(IoTDA)的连接测试,验证设备属性上报与平台命令下发的机制。

硬件设备接入:其次,以 ESP8266 WiFi 模块作为硬件载体,通过MQTT协议接入华为云平台,实现真实设备的数据采集上报与平台指令接收响应。

1.初始操作

准备烧固件软件ESPFlashDownloadTool、支持MQTT的固件(1471)ESP8266-AT_MQTT-1M.bin

ESP8266WiFi模块与Android APP实现数据传输(三)---AT/MQTT固件下载-腾讯云开发者社区-腾讯云

MQTT AT 命令集 - ESP32 - — ESP-AT 用户指南 latest 文档

使用串口AT指令对ESP8266模块测试

2.MQTTX与华为云连接测试功能

实现功能

当设备上报的属性数据满足fall_flag或heartrate_exc_flag的值为true时,平台会自动触发向设备(MQTT)下发一条“询问佩戴者是否安全”的命令。具体操作如下。

在华为云平台
1.配置好华为云的产品模型

可参考 使用MQTT.fx工具连接华为云_mqtt.fx接入华为云-CSDN博客 里面的华为云部分配置

注意平台生成的MQTT连接参数、设备id,后面要用到

2.创建设备联动规则

在MQTTX
1.建立与华为云连接

2.订阅话题(平台下发命令给设备)

这个 # 通配符会匹配 request_id= 后面的任何内容。这样一来,无论平台生成的 request_id 是什么,MQTTX都能收到命令。

3.MQTTX发布话题(设备上报属性数据)

平台接收到消息

平台下发命令给MQTTX

3.WiFi模块ESP8266与华为云云平台连接

//测试,看是否返回OK
AT

//设置模块为STA模式
AT+CWMODE=1

//连接WiFi
AT+CWJAP="填写wifi名称","填写WiFi密码"

(如果遇到失败,可以先使用 AT+MQTTCLEAN=0 清空一下连接)

//查看平台的MQTT连接参数,填入:AT+MQTTUSERCFG=0,1,"填写ClientID","填写用户名","填写密码",0,0,""
//设置MQTT的登陆用户名与密码
AT+MQTTUSERCFG=0,1,"6a3ec48bc00ccb6d4b60186b_smart_helmet_1_0_0_2026070614","6a3ec48bc00ccb6d4b60186b_smart_helmet_1","8f1adaf06683385723b5b836de0cf52034b8676b8b10a69a2b35f82d9ebc7930",0,0,""

//设置MQTT接入地址,查看总览-接入信息
AT+MQTTCONN=0,"填写MQTT接入的地址",1883,1

//订阅主题
//AT+MQTTSUB=0,"订阅的主题tpoic",1
AT+MQTTSUB=0,"$oc/devices/6a3ec48bc00ccb6d4b60186b_smart_helmet_1/sys/commands/#",1

//上报数据
//AT+MQTTPUB=0," 订阅的主题tpoic ","上报的json数据",0,0
AT+MQTTPUB=0,"$oc/devices/6a3ec48bc00ccb6d4b60186b_smart_helmet_1/sys/properties/report","{\"services\":[{\"service_id\":\"basic_data\"\,\"properties\":{\"heart_rate\":110\,\"spO2\":95\,\"fall_flag\":true\,\"heartrate_exc_flag\":false}}]}",0,0

遇到的乱码问题是MQTT通信中处理中文字符时的常见现象,根本原因在于编码不一致,此时需要让发送端(华为云平台)和接收端(你的串口调试助手/STM32)使用相同的字符编码。通常建议统一采用UTF-8编码,或者使用英文。

转义字符

这是使用MQTTX上报的数据


{
    "services": [
        {
            "service_id": "basic_data",
            "properties": {
                "heart_rate": 99,
                "spO2": 95,
                "fall_flag": false,
                "heartrate_exc_flag": true
            }
        }
    ]
}

这是用wifi模块,AT指令中上报的json数据


"{\"services\":[{\"service_id\":\"basic_data\"\,\"properties\":{\"heart_rate\":110\,\"spO2\":95\,\"fall_flag\":true\,\"heartrate_exc_flag\":false}}]}"
记得烧录具有MQTT功能的固件

FLASH SIZE 必须选择 8Mbit(对应 1MB)

确定好topic、发布者(确定对应topic+发布内容,内容要注意格式)、订阅者(接收消息)

更多推荐