ESP32/ESP8266 MQTT协议接入阿里云(二)

2023-05-16

ESP32/ESP8266 MQTT协议接入阿里云(二)

1、在连接阿里云之前,需要先了解MQTT的连接协议。

CONNECT 协议格式:固定包头+可变包头+有效载体

(1)固定报头

长度:2~5bytes

包括报文类型(1),固定保留位(0)和剩余长度。
在这里插入图片描述
剩余长度等于可变报头的长度(10字节)加上有效载荷的长度。

注意:当剩余长度大于0x7F后,需要进位。

剩余长度字段的字节长度:最少1个字节,最多4个字节。
剩余长度字段可以表示的长度:1个字节时,可以表示剩余 0~127 长度。4个字节时,最大表示长度为 2^(7*4) - 1 = 2^28 - 1 = 268435455 长度。

剩余长度

bit7bit6bit5bit4bit3bit2bit1bit0
进位标志位数据位6数据位5数据位4数据位3数据位2数据位1数据位0
当剩余长度>127也就是>0x7F后,需要进位,bit7=1,剩余长度增加一个字节,例如0xE1=0B1110 0001。
0xE1转成剩余长度:0xE1 0x01,前面0xE1=(剩余长度&0x7F)进位标志位0x80,后面0x01=剩余长度>>7位。
(2)可变报头

在这里插入图片描述

长度:10bytes。

Byte8 连接标志(Connect Flags)

连接标志字节包含一些用于指定MQTT连接行为的参数。它还指出有效载荷中的字段是否存在。我们需要用到Clean Session、PassWordFlag和UserName Flag。即0xC2.

Byte9 Byte10 保持连接

长度:2bytes

保持连接(KeepAlive)是一个以秒为单位的时间间隔,表示为一个16位的字,它是指在客户端传输完成一个控制报文的时刻到发送下一个报文的时刻,两者之间允许空闲的最大时间间隔。如果在设置的时间的1.5倍内没有发送报文,则自动断开连接。
0x00 0x64表示100s。

(3)有效载体

有效载体可以分为:ClientID+Username+Password
每个部分前面有2个字节是该部分的长度。表示16位的长度

lenght_high (1 Byte)lenght_low(1 Byte)ClientID_data (n Bytes)lenght_high(1 Byte)lenght_low (1 Byte)Username_data(n Bytes)lenght_high(1 Byte)lenght_low (1 Byte)Password_data(n Bytes)

ClientID、Username和Password可以用三元组在软件中生成

生成器连接,提取码:6666.

使用生长器生成ClientID、Username和Password。
复制好后点击生成
在这里插入图片描述

在这里插入图片描述
此处协议所需的所有东西都有了。接下来是wifi模块的使用,用的是AT指令集。

2、wifi模块联网,先连接wifi,然后设置传输模式,再发起TCP连接,最后进入透传。具体指令如下图。

在这里插入图片描述
这里的域名就是生成出来的连接域名

3、ESP32/ESP8266接入阿里云平台

MQTT的报文:10 84 01 00 04 4d 51 54 54 04 c2 00 64 00 36 31 32 33 34 35 36 7c 73 65 63 75 72 65 6d 6f 64 65 3d 33 2c 73 69 67 6e 6d 65 74 68 6f 64 3d 68 6d 61 63 73 68 61 31 2c 74 69 6d 65 73 74 61 6d 70 3d 31 32 33 7c 00 16 45 53 50 33 32 5f 6e 6f 74 65 26 61 31 75 63 6f 73 44 55 6d 32 38 00 28 45 39 35 32 38 32 34 44 30 38 33 42 45 39 42 43 38 39 36 42 46 41 37 33 42 44 44 30 33 33 36 42 43 30 36 46 32 43 37 31

固定包头:10 84 01
可变包头: 00 04 4d 51 54 54 04 c2 00 64
有效载体
ClientID lenght :00 36
ClientID:31 32 33 34 35 36 7c 73 65 63 75 72 65 6d 6f 64 65 3d 33 2c 73 69 67 6e 6d
65 74 68 6f 64 3d 68 6d 61 63 73 68 61 31 2c 74 69 6d 65 73 74 61 6d 70 3d
31 32 33 7c
123456|securemode=3,signmethod=hmacsha1,timestamp=123|
Username lenght:00 16
Username:45 53 50 33 32 5f 6e 6f 74 65 26 61 31 75 63 6f 73 44 55 6d 32 38
ESP32_note&a1ucosDUm28
Password lenght:00 28
Password:45 39 35 32 38 32 34 44 30 38 33 42 45 39 42 43 38 39 36 42 46 41 37 33
42 44 44 30 33 33 36 42 43 30 36 46 32 43 37 31
E952824D083BE9BC896BFA73BDD0336BC06F2C71

发送报文。
在这里插入图片描述
再查看设备
在这里插入图片描述
这时已经接入成功。ESP32/ESP8266 MQTT协议接入阿里云(三)将会介绍数据上传和数据下发。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ESP32/ESP8266 MQTT协议接入阿里云(二) 的相关文章

随机推荐