ESP01S的mqtt使用
在封校期间,我尝试使用 ESP01S 连接免费的服务器,并且弄mqtt传输东西。
首先要知道什么是MQTT
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。(网上的mqtt的讲解资料,附上原网站地址)https://www.runoob.com/w3cnote/mqtt-intro.html
然后是ESP01S
简而言之就安信可公司的一款WiFi模块,我在此之前已经刷好了AT固件,并且把波特率调节到了115200(因为我大部分是用STM32通信,所以比较喜欢用这个波特率) 刷AT固件的操作,网上应该都有,我就不多介绍。
下面直接讲怎么用ESP01S怎么连接MQTT啥啥的吧
我用串口直接连接上了我的ESP01S,我用AT指令直接开始弄了。
首先ESP-01S复位,结尾接收到了ready说明连接成功了 然后就配置模式,连接WiFi,连接服务器,打开透传 首先我们先给我的ESP-01S进行初始化:(使用XCOM,勾选发送新行)
AT+RESTORE
配置模式:选择模式3
AT+CWMODE=3
连接WiFi:wifi:WIFI账号,WIFI密码(下面一个_DEF是存入flash)
AT+CWLAP=“wifi”,“wifi_key” AT+CWJAP_DEF=“wifi”,“wifi_key”
连接服务器:连接test.mosquitto.org的端口:1883
AT+CIPSTART=“TCP”,“test.mosquitto.org”,1883
打开透传:
AT+CIPMODE=1 AT+CIPSEND
下面我把这些代码加进来:
AT
AT+CWMODE?
AT+CWMODE=3
AT+CWLAP
AT+CWJAP="genial_310","19408404"
AT+CIPSTART="TCP","test.mosquitto.org",1883
AT+CIPMODE=1
AT+CIPSEND
对了,退出透传的话,需要发送三个:+++
需要取消:发送新行
然后就开始准备订阅一个主题:
这个时候需要注意一下协议: 我定义的主题是rj
协议 | 后面长度 | 协议长度 | MQTT | 版本 | 120(心跳) | 客户端id(长度) | 主题(自定义) | 用户名id(长度) | 密匙(长度) |
---|
10 | 12 | 00 04 | 4D 51 54 54 | 04 C2 | 00 78 | 00 02 | 72 6A | 00 00 | 00 00 |
订阅报文 我定义的主题是rj
报头 | 长度 | 未知 | 主题长度 | 主题(自定义) | 未知 |
---|
82 | 07 | 00 02 | 00 02 | 72 6A | 00 |
这个时候我们需要调整一下XCOM(串口助手) 然后把根据协议发一个:10 13 00 04 4D 51 54 54 04 C2 00 78 00 03 68 72 6A 00 00 00 00上面写了协议的流程,记得是16进制
10 13 00 04 4D 51 54 54 04 C2 00 78 00 03 68 72 6A 00 00 00 00
只要返回了20 02 00 00 就是成功了
然后在发 82 07 00 02 00 02 72 6A 00 开始订阅我们的主题
82 07 00 02 00 02 72 6A 00
只要返回了90 03 00 02 00 就是成功了
这个时候随便弄一个MQTT调试软件
我用的是MQTTX(mqtt.fx都可以) 现在我们要绑定那个服务器 然后我们直接在那个主题随便发送一些数据 然后我们的串口助手就收到信息了 哎呀,十六进制,怎么和我之前的不一样 这个时候看:我们发送的JSON格式 然后,我们把串口调到JSON格式! 平时我们都是用16进制的哈,JSON格式是为了好看懂!
|