ESP8266实现mqtt
参考文章:ESP8266-01S 模块详解及 MQTT 固件烧写实战 - 知乎
零基础国产GD32单片机编程入门(十一)WIFI模块实战含源码_gd32 wifi-CSDN博客
开始是发现8266的固件版本太老了不支持mqtt,然后找官网准备升级固件。开始是出现了下载失败,然后发现是因为要让8266进入升级模式的话就需要让P0口接地。然后飞了根线。
通过网盘分享的文件:
链接: https://pan.baidu.com/s/1R4FuqbnHV_qmgn2cl3QLzQ 提取码: 3zr7 复制这段内容后打开百度网盘手机App,操作更方便哦
--来自百度网盘超级会员v2的分享
解决了下载失败的问题但是发现目前手里这种1MB的8266的固件已经不维护了。只能从网上找之前的版本。这里实际是找了很多个版本都不能用,还有的是多段式的固件。。。。最终也是找到了一个能用的版本。而且配备了老的升级工具。也算是升级成功了。
然后就是查询升级成功的版本,并连接WiFi。然后通过公共服务器测试一下mqtt功能。
AT+RST
OK
s$l軣<刲??l?c|弬?況?lc匊go焏og溾?c8鋰lsd;lx鹢??$#g銃剣|?#岓ng?l審l ?_x0012_no$`'{彃沷_x0012_沴 p騨?{屲溾?co??嘽尿'o?d`?_x0012_'o$`g{彃沷_x0012_溘`p??{屲溾??co?靌l審c匊gn?l`?gn?dgs庅搉脫沗;摏g儧?
################################################
arch:ESP8266, 1
compile_time:Ai-Thinker|B&T
wifi_mac:cc50E31dEE6A
sdk_version:v3.4-22-g967752e2
firmware_version:2.2.0
compile_time:Jun 30 2021 11:28:20
ready
################################################AT+GMR
AT version:2.3.0.0-dev(s-bcd64d2 - ESP8266 - Jun 23 2021 11:42:05)
SDK version:v3.4-22-g967752e2
compile time(b498b58):Jun 30 2021 11:28:20
Bin version:2.2.0(ESP8266_1MB)
OK
AT+CWMODE=1
OK
AT+CWLAP
+CWLAP:(4,"SVN_HA",-47,"f4:83:cd:60:14:eb",11,-1,-1,4,4,7,0)
+CWLAP:(4,"TP-LINK_DBBE",-58,"f4:84:8d:5c:db:be",6,-1,-1,4,4,7,0)
+CWLAP:(4,"",-64,"f6:84:8d:5d:db:be",6,-1,-1,4,4,7,0)
+CWLAP:(4,"TP-LINK_6EB0",-70,"4c:10:d5:b5:6e:b1",6,-1,-1,4,4,7,0)
+CWLAP:(3,"123",-73,"02:1f:19:27:65:1c",7,-1,-1,4,4,7,1)
+CWLAP:(4,"搴锋槑鏄?,-75,"5a:7d:2e:98:04:9b",1,-1,-1,4,4,7,0)
+CWLAP:(4,"搴锋槑鏄?,-77,"48:7d:2e:98:04:9b",1,-1,-1,4,4,7,0)
+CWLAP:(4,"TP-LINK_20F7",-85,"74:39:89:e2:45:5b",11,-1,-1,4,4,7,0)
+CWLAP:(4,"TP-LINK_20F7",-85,"4c:10:d5:91:20:f7",11,-1,-1,4,4,7,0)
+CWLAP:(3,"D3460044230000060602035J",-86,"00:6c:fd:9f:45:e7",1,-1,-1,4,4,7,0)
+CWLAP:(4,"TP-LINK_KM",-86,"4c:10:d5:50:3a:67",1,-1,-1,4,4,7,0)
+CWLAP:(4,"",-86,"4e:10:d5:91:20:f7",11,-1,-1,4,4,7,0)
+CWLAP:(4,"",-87,"76:39:89:e1:45:5b",11,-1,-1,4,4,7,0)
OK
AT+CWLAP="TP-LINK_DBBE","62102118"
ERROR
AT+CWJAP="TP-LINK_DBBE","62102118"
WIFI CONNECTED
WIFI GOT IP
OK
AT+CIFSR
+CIFSR:STAIP,"192.168.0.124"
+CIFSR:STAMAC,"cc:50:e3:1d:ee:6a"
OK
AT+MQTTUSERCFG=0,1,"MyClientID","","",0,0,""
OK
AT+MQTTCONN=0,"broker.hivemq.com",1883,1
+MQTTCONNECTED:0,1,"broker.hivemq.com","1883","",1
OK
AT+MQTTSUB=0,"test/topic",0
OK
+MQTTSUBRECV:0,"test/topic",497,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
后续测试了一下用电脑的MQTT.FX和8266进行通信。
MQTT.FX配置如下:
- Profile Name: HiveMQ Test
- Broker Address: broker.hivemq.com
- Broker Port: 1883
- 其他保持默认
8266的指令配置
// 1. 设置MQTT客户端参数
AT+MQTTUSERCFG=0,1,"ESP8266_Client","","",0,0,""
// 2. 连接MQTT服务器
AT+MQTTCONN=0,"broker.hivemq.com",1883,1
// 3. 订阅主题(建议使用独特主题名)
AT+MQTTSUB=0,"mytest/username/frompc",1
在MQTT.fx中:
Publish 标签页
Topic: mytest/username/frompc
Message: Hello from MQTT.fx!
点击"Publish"
在MQTT.fx中先订阅主题:
Subscribe 标签页
Topic to subscribe: mytest/username/fromesp
点击"Subscribe"
8266上发送
AT+MQTTPUB=0,"mytest/username/fromesp","Hello from ESP8266!",1,0
然后测试json格式
发送的话
{
"command": "set_led",
"value": 1,
"timestamp": 1728391200
}
但是使用8266发送json格式开始一直失败,最后排查是发送的内容的问题,因为是通过AT指令的格式发送的mqtt信息,所以要符合AT指令和mqtt两种格式,设计到一些符号两种都用到了,需要转义特殊字符。就是在它们前面加上一个反斜杠\。经过测试后使用下面的指令可以用8266发送成功。
AT+MQTTPUB=0,"mytest/username/sensor","{\"t\":25.6\,\"h\":60}",1,0
至此8266配置完成。