前言

实现STM32在freertos系统中通过MQTT将数据上传到OneNET;

我们需要先在ONENET平台上创建好自己的产品和设备后才能按照下面的步骤进行,创建的过程在我前面的文章有;

我们使用的是物模型的话题,需要在平台创建物模型并且添加功能点。

代码:

通过网盘分享的文件:data.zip
链接: https://pan.baidu.com/s/1jMawzQlN3iw8wHKBtCKiJA?pwd=2hgc 提取码: 2hgc


我添加了三个属性点如图所示,其中有一个为bool类型,其余都为整形。

在设备详情中获取设备名、设备密钥和产品名

在onenet.c文件中修改PROID、ACCESS_KEY和DEVICE_NAME三个参数,我们不需要自己计算token密钥,代码中函数OneNET_Authorization会帮我们自动根据三元组计算token密钥。

如果计算的token登入不成功则在OneNet_DevLink()函数中手动赋值token密钥,通过token工具计算

在esp8266.c中修改wifi名和密码。

我们订阅平台下发的数据,来设置我们的LED亮灭,订阅的话题为:
$sys/{pid}/{device-name}/thing/property/set

可在函数OneNET_Subscribe()中看到订阅

在OneNet平台的设备管理详情页点击「设备调试」Tab栏,或进入产品开发-设备调试流程模块,选择「应用模拟器」,点击「启动调试」,可进行设置设备属性。

点击属性设置之后平台会向$sys/{pid}/{device-name}/thing/property/set话题发送数据,32端再向平台回复$sys/%s/%s/thing/property/set_reply。

我们收到平台的属性设置消息之后需要回复效应成功消息,代码内容在函数void OneNet_RevPro(unsigned char *cmd);中。

{
	"id": "2",
	"code": 200,
	"msg": "success"
}

其中id为下行数据的id,需要匹配,code为200代表成功,msg可以自定义。

1.MqttKit.c

这是一个MQTT协议实现库,主要用于与OneNET平台进行MQTT通信。

主要功能:

                - MQTT协议包的封装和解析

                -连接、订阅、发布、断开等MQTT操作

重要函数:

        1. MQTT_PacketConnect - 构建MQTT连接包

        2. MQTT_PacketPublish - 构建发布消息包

        3. MQTT_PacketSubscribe - 构建订阅消息包

        4. MQTT_UnPacketRecv - 解析接收到的MQTT数据包类型

        5. MQTT_UnPacketPublish - 解析发布消息

        6. MQTT_NewBuffer/MQTT_DeleteBuffer - 内存管理

        2. esp8266.c

这是ESP8266 WiFi模块的驱动代码,负责WiFi通信。

主要功能:

        - ESP8266初始化

        - AT命令发送

        - 数据透传

重要函数:

        1. ESP8266_Init - 初始化ESP8266,连接WiFi

        2. ESP8266_SendCmd - 发送AT命令并等待响应

        3. ESP8266_SendData - 发送数据

        4. ESP8266_GetIPD - 获取平台返回的数据

        5. ESP8266_Clear - 清空缓冲区

3. onenet.c

这是OneNET物联网平台的通信接口层。

主要功能:

        - OneNET平台连接

        - 数据上传下发

        - Token认证

重要函数:

        1. OneNet_DevLink - 与OneNET建立MQTT连接

        2. OneNet_SendData - 上传数据到平台

        3. OneNET_Subscribe - 订阅主题,接收平台下发的数据

        4. OneNet_RevPro - 解析平台返回的数据

        5. OneNET_Authorization - 生成认证Token

注意事项:

        1.如果出现能够连接上平台但是发送消息后就断开的情况,考虑发送雄消息的话题出错了。

        2.这份代码是使用的物模型的话题,需要在平台创建物模型,添加功能点。

        3.代码目前功能简单,缺少心跳检测、断线重连等机制。

        4.一定要注意如果自己的设备名起的太长的话可能会因为存话题的buf长度不够导致发送失败断开的情况。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐