stm32+esp8266 通过MQTT发送到thingsboard平台

源码照着

STM32F103RCT6(Mini板)通过MQTT协议上传温湿度数据至OneNET云平台并控制LED灯_Mbwide的博客-CSDN博客

MQTT协议 学习:

STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(二)MQTT协议常用报文详解_Lord·AC的博客-CSDN博客

调试工具使用:网络调试助手 @野人 V4.2.1

MQTT模拟软件使用 :MQTTX

通过网络调试助手接收到的数据 你会发现按照这个源码 发给中国移动平台的代码是

30 1D 00 04 74 65 73 74 03 00 14 7B 22 6C 65 64 46 6C 61 67 22 3A 22 4C 45 44 4F 46 46 22 7D

内容为 向服务器发送test  主题 十六进制为:74 65 73 74

发送内容:{"temperature":"26","humidity":"63"}

7B 22 74 65 6D 70 65 72 61 74 75 72 65 22 3A 22 32 36 22 2C 22 68 75 6D 69 64 69 74 79 22 3A 22 36 33 22 7D 00 00 00

其中 03 00 14 是程序里面的补位,但是thingsboard平台不认这个补位 需要从源码内删除这个字段

在strm32f10x.it.c

//        head1[0] = 0x03;                         //固定报头
//        head1[1] = 0x00;                         //固定报头
//        head1[2] = strlen(temp);                  //剩余长度    

    // sprintf(tempAll, "%c%c%c%s", head1[0], head1[1], head1[2], temp);

注释掉这些内容后 发现代码 最后会补位 00 00 00

 需要改dataLen

//dataLen = strlen(temp) + 3;// 取消补位0

源程序里面控制小灯也有对应的代码 我给小灯都给注释了因为发错了东西 服务器就自动断开了。

thingsboard里面做一个路灯的设备时,需要把v1/devices/me/telemetry 改为test

改为发送的东西,然后就行了

测试时定义用户名 密码时,尽量的简单,

我定义的 设备id为1 用户名1 密码1

最后正确的流程

发送端 :10 13 00 04 4D 51 54 54 04 C2 00 64 00 01 31 00 01 31 00 01 31

解释:4D 51 54 54 是 MQTT   

00 01 31 00 01 31  00 01 31 是 1 1 1

服务器返回:20 02 00 00 

发82 1D 00 01 00 18 76 31 2F 64 65 76 69 63 65 73 2F 6D 65 2F 61 74 74 72 69 62 75 74 65 73 00

收90 03 00 01 00

发送:30 2A 00 04 74 65 73 74 7B 22 74 65 6D 70 65 72 61 74 75 72 65 22 3A 22 32 36 22 2C 22 68 75 6D 69 64 69 74 79 22 3A 22 36 33 22 7D

平台成功接收

 

stm32+esp8266 通过MQTT发送到thingsboard平台_第1张图片

你可能感兴趣的:(报错,stm32,物联网,单片机)