ESP-01S烧录及使用,连接本地MQTT服务器
网上的教程大多无法正常烧录与使用,因此在这里进行总结。
1 ESP-01S烧录
固件烧录建议使用专用的烧录器,十分省心。
本文讨论的是使用普通的CH340串口模块进行烧写。
必须使用的工具:杜邦线、CH340串口模块、另外一块有3V3电源和GND的开发板。
1.1 烧写前连线
CH340 TTL转USB模块的引脚数量不够,因此需要另外一块开发板的引脚给ESP-01S提供高低电平。
注意:CH340的VCC引脚不要连接,电压比较高,可能会烧坏ESP-01S。
另一块开发板也要用USB线连接到电脑上。
CH340模块的供电不够,因此ESP-01S_VCC不连接到CH340,一般来说开发板供电都比较大,电源连接到开发板上。
# ESP-01S与CH340模块的连线:ESP-01S_TXD——CH340_RXDESP-01S_RXD——CH340_TXDESP-01S_GND——CH340_GND# ESP-01S与另一块开发板的连线ESP-01S_CH-PD/EN——3V3ESP-01S_GPIO0——GNDESP-01S_GPIO2——3V3ESP-01S_VCC——3V3ESP-01S_RST——GND
ESP-01S_RST一定要先连接到GND上!烧录时要用到。
1.2 固件清除
点开烧录软件:
2、点击ESP8266 DownloadTool:
3、需要连接MQTT服务器的话必须使用相关AT固件:
教程:https://blog.csdn.net/weixin_46323814/article/details/128157350
下载链接:https://docs.ai-thinker.com/%E5%9B%BA%E4%BB%B6%E6%B1%87%E6%80%BB
4、连接好所有的导线后,点击ERASE。
看到SYNC后,立刻拔掉ESP-01S_RST(非常重要),等待一秒,就可以清除程序了。
清除过程为Download。
清除完成后,显示Finish。
1.3 固件烧写
刚刚清除程序拔掉了ESP-01S_RST,现在再次连上GND。
点击START,开始烧写固件。
等到SYNC后,立刻拔掉ESP-01S_RST引脚(非常重要),等待一秒,软件就开始下载了。
点击STOP退出,这时烧入固件就成功了。
2 ESP-01S串口测试
不能使用CH340模块给ESP-01S供电,依然需要另一块开发板供电。
此时的连线需要进行改变:
# ESP-01S与CH340模块的连线:ESP-01S_TXD——CH340_RXDESP-01S_RXD——CH340_TXDESP-01S_GND——CH340_GND# ESP-01S与另一块开发板的连线ESP-01S_CH-PD/EN——3V3/悬空ESP-01S_GPIO0——3V3/悬空ESP-01S_GPIO2——3V3/悬空ESP-01S_VCC——3V3ESP-01S_RST——3V3/悬空
也就是最少只需要4根导线连线。
2.1 打开串口工具
选择串口,波特率初始值为115200,
发送方法:
(1)输入AT
,选择“发送新行”,点击“发送数据”。
(2)输入AT
加上回车,不选择“发送新行”,点击“发送数据”。
(3)输入AT
,不选择“发送新行”,点击“发送数据”。输入回车,不选择“发送新行”,点击“发送数据”。
以上三种方法都可以测试成功。
2.2 AT指令——ESP-01S连接WIFI
以连接MQTT服务器为目的。
1、恢复初始化:
AT+RESTORE
修改串口波特率:
AT+UART 9600,1,0,0
修改之后需要改串口软件的波特率。
3、设置STA模式:
AT+CWMODE?# 查询指令AT+CWMODE=# 设置指令,改为1:STA模式;2:AP模式;3:混合模式
连接AP(或者路由器WIFI):
AT+CWJAP?# 查询指令AT+CWJAP:,[,]# 目标AP的SSID,密码,# [,]目标AP的MAC地址,一般用于多个SSID相同的AP情况
输入命令:AT+CWJAP="MERCURY_XXXX","XXXXXXXX"
,如果连接成功,则会显示:
WIFI CONNECTEDWIFI GOT IPOK
开启单连接:
AT+CIPMUX=0
查询本地IP地址:
AT+CIFSR
收到回复:
+CIFSR:STAIP,"192.168.xxx.xxx"+CIFSR:STAMAC,"8c:xx:xx:xx:xx:xx"OK
3 ESP-01S连接本地MQTT服务器
3.1 本地MQTT服务器安装
参考链接:https://blog.csdn.net/felix_tao/article/details/125882339
下载Windows端的EMQX服务器:https://www.emqx.com/zh/downloads/broker/5.0.3/emqx-5.0.3-windows-amd64.tar.gz
解压到英文路径下。
3、打开命令提示符,输入以下命令,进入bin文件夹:
d:cd EMQXcd emqx-5.0.3-windows-amd64cd bin
开启MQTT服务器:
.\emqx start
5、查看EMQX服务器状态:
.\emqx_ctl status
6、如果要关闭服务器,输入:
.\emqx stop
浏览器登录EMQX服务器控制面板,验证是否可用。
(1)输入地址:http://127.0.0.1:18083/#/login
(2)用户名:admin
(3)密码:public
(4)修改中文和界面:
8、进入WebSocket:
点击连接,订阅ESP8266和MQTTFX两个话题。
9、MQTT.fx软件设置连接配置:
Broker Address需要电脑cmd ipconfig
一下,查看电脑IP。其他设置默认。
MQTT.fx发送消息。
在EMQX服务器面板里可以看到接收到的消息。
接下来匹配ESP-01S,目的是让ESP-01S连接上MQTT服务器。
这里特别奇怪,我的电脑上安装了虚拟机,虚拟机里跑EMQX服务器,电脑能连接,ESP-01S无法连接。初步怀疑是不在一个网段。
3.2 ESP-01S的AT配置
ESP8266共有三种工作模式,分别是无线接入点模式(AP)、无线终端模式以及混合模式(以上两种模式的混合)。
本文ESP-01S作为客户端,连接WIFI接收手机或者电脑的控制,这种模式为STA模式。
依然是AT指令:
1、配置MQTT用户属性:AT+MQTTUSERCFG
指定MQTT ID和用户名,密码
AT+MQTTUSERCFG=,,<"Client_ID">,<"username">,<“password”>,,,<"path">
:当前仅支持 link ID 0。:1: MQTT over TCP;2: MQTT over TLS(不校验证书);3: MQTT over TLS(校验 server 证书);4: MQTT over TLS(提供 client 证书);5: MQTT over TLS(校验 server 证书并且提供 client 证书);6: MQTT over WebSocket(基于 TCP);7: MQTT over WebSocket Secure(基于 TLS,不校验证书);8: MQTT over WebSocket Secure(基于 TLS,校验 server 证书);9: MQTT over WebSocket Secure(基于 TLS,提供 client 证书);10: MQTT over WebSocket Secure(基于 TLS,校验 server 证书并且提供 client 证书)。:MQTT 客户端 ID,最大长度:256 字节。:用户名,用于登陆 MQTT broker,最大长度:64 字节。:密码,用于登陆 MQTT broker,最大长度:64 字节。:证书 ID,目前 ESP-AT 仅支持一套 cert 证书,参数为 0。:CA ID,目前 ESP-AT 仅支持一套 CA 证书,参数为 0。:资源路径,最大长度:32 字节。
AT+MQTTUSERCFG=0,1,"esp01s_id","esp01s","esp01s",0,0,"/mqtt"
2、设置 MQTT 客户端 ID:AT+MQTTLONGCLIENTID
设置相对较长的客户端 ID
AT+MQTTLONGCLIENTID=,# 收到OK后,输入长度为length的客户端ID,发送。# 再次收到OK
:当前仅支持 link ID 0。:MQTT 客户端 ID 长度。范围:[1,1024]。
应在设置AT+MQTTUSERCFG
后再使用 AT+MQTTLONGCLIENTID
。
设置 MQTT 登陆用户名:AT+MQTTLONGUSERNAME
设置相对较长的用户名
AT+MQTTLONGUSERNAME=,# 收到OK后,输入长度为length的用户名,发送。# 再次收到OK
:当前仅支持 link ID 0。:MQTT 用户名长度。范围:[1,1024]
设置 MQTT 登陆密码:AT+MQTTLONGPASSWARD
AT+MQTTLONGPASSWORD=,# 收到OK后,输入长度为length的密码,发送。# 再次收到OK
:当前仅支持 link ID 0。:MQTT 密码长度。范围:[1,1024]。
设置 MQTT 连接属性:AT+MQTTCONNCFG
AT+MQTTCONNCFG=,,,<"lwt_topic">,<"lwt_msg">,,
:当前仅支持 link ID 0。:MQTT ping 超时时间,单位:秒。范围:[0,7200]。默认值:0,会被强制改为 120 秒。:设置 MQTT 清理会话标志,有关该参数的更多信息请参考 MQTT 3.1.1 协议中的 Clean Session 章节。0: 使能清理会话1: 禁用清理会话:遗嘱 topic,最大长度:128 字节。:遗嘱 message,最大长度:64 字节。:遗嘱 QoS,参数可选 0、1、2,默认值:0。:遗嘱 retain,参数可选 0 或 1,默认值:0。
连接MQTT Broker(TCP服务器):AT+MQTTCONN
AT+MQTTCONN?# 查询ESP32设备已连接的 MQTT broker# 响应:+MQTTCONN:,,<"host">,,<"path">,# 响应:OKAT+MQTTCONN=,<"host">,,# 连接MQTT Broker# 为MQTT服务器的地址,端口:1883
:当前仅支持 link ID 0。:MQTT broker 域名,最大长度:128 字节。:MQTT broker 端口,最大端口:65535。:资源路径,最大长度:32 字节。:0: MQTT 不自动重连。如果 MQTT 建立连接后又断开,则无法再次使用本命令重新建立连接,您需要先发送 AT+MQTTCLEAN=0 命令清理信息,重新配置参数,再建立新的连接。1: MQTT 自动重连,会消耗较多的内存资源。:MQTT 状态:0: MQTT 未初始化;1: 已设置 AT+MQTTUSERCFG;2: 已设置 AT+MQTTCONNCFG;3: 连接已断开;4: 已建立连接;5: 已连接,但未订阅 topic;6: 已连接,已订阅过 topic。:1: MQTT over TCP;2: MQTT over TLS(不校验证书);3: MQTT over TLS(校验 server 证书);4: MQTT over TLS(提供 client 证书);5: MQTT over TLS(校验 server 证书并且提供 client 证书);6: MQTT over WebSocket(基于 TCP);7: MQTT over WebSocket Secure(基于 TLS,不校验证书);8: MQTT over WebSocket Secure(基于 TLS,校验 server 证书);9: MQTT over WebSocket Secure(基于 TLS,提供 client 证书);10: MQTT over WebSocket Secure(基于 TLS,校验 server 证书并且提供 client 证书)。
订阅指定MQTT主题:AT+MQTTSUB
可订阅多个主题。
AT+MQTTSUB?# 查询订阅的topic# 响应:+MQTTSUB=,,<"topic1">,# 响应:OKAT+MQTTSUB=,<"topic">,# 订阅<"topic">主题# 当 AT 接收到已订阅的 topic 的 MQTT 消息# 响应:+MQTTSUBRECV:,<"topic">,,data# 若已订阅过该 topic# 响应:ALREADY SUBSCRIBE
:当前仅支持 link ID 0。:MQTT 状态:0: MQTT 未初始化;1: 已设置 AT+MQTTUSERCFG;2: 已设置 AT+MQTTCONNCFG;3: 连接已断开;4: 已建立连接;5: 已连接,但未订阅 topic;6: 已连接,已订阅过 MQTT topic。<"topic">:订阅的 topic。:订阅的 QoS,一般设置为0(1,2)。
AT+MQTTSUB=0,“ESP8266”,1
8、取消订阅 MQTT Topic:AT+MQTTUNSUB
客户端取消订阅指定 topic
AT+MQTTUNSUB=,<"topic"># 若未订阅过该 topic# 响应:NO UNSUBSCRIBE
:当前仅支持 link ID 0。:MQTT topic,最大长度:128 字节。
发布字符串数据:AT+MQTTPUB
通过 topic 发布 MQTT 字符串 消息。如果您发布消息的数据量相对较多,已经超过了单条 AT 指令的长度阈值 256 字节,请使用 AT+MQTTPUBRAW
命令。
AT+MQTTPUB=,<"topic">,<"data">,,
:当前仅支持 link ID 0。<"topic">:MQTT topic,最大长度:128 字节。<"data">:MQTT 字符串消息。:发布消息的 QoS,参数可选 0、1、或 2,默认值:0。:发布 retain,设置为0。
本命令不能发送数据 \0,若需要发送该数据,请使用 AT+MQTTPUBRAW 命令。
官方示例:
AT+CWMODE=1AT+CWJAP="ssid","password"AT+MQTTUSERCFG=0,1,"ESP32","espressif","1234567890",0,0,""AT+MQTTCONN=0,"192.168.10.234",1883,0AT+MQTTPUB=0,"ESP8266","msg:temp",0,0// 发送此命令时,请注意特殊字符是否需要转义。
发布长 MQTT 消息:AT+MQTTPUBRAW
通过 topic 发布长 MQTT 消息。
AT+MQTTPUBRAW=,<"topic">,,,# 响应:OK# 响应:># 符号 > 表示 AT 准备好接收串口数据,此时您可以输入数据,当数据长度达到参数 的值时,数据传输开始。# 若传输成功# 响应:+MQTTPUB:OK# 若传输失败# 响应:+MQTTPUB:FAIL
:当前仅支持 link ID 0。:MQTT topic,最大长度:128 字节。:MQTT 消息长度,不同 ESP32 设备的最大长度受到可利用内存的限制。:发布消息的 QoS,参数可选 0、1、或 2,默认值:0。:发布 retain。
断开 MQTT 连接:AT+MQTTCLEAN
断开 MQTT 连接,释放资源。
AT+MQTTCLEAN=
:当前仅支持 link ID 0。
3.3 ESP-01S连接EMQX服务器
ESP-01S的AT指令:
ATAT+UART=115200,8,1,0,0# 串口波特率设置AT+CWMODE=1# station模式,当做设备来连接wifiAT+CWJAP="MERCURY_****","********"# 连接WIFIAT+CIFSR# 查询IPAT+MQTTUSERCFG=0,1,"ESP8266-01s","esp8266","",0,0,""# 设置自身mqtt信息AT+MQTTCONN=0,"192.168.***.***",1883,0# 连接虚拟机EMQX,验证失败,未找到原因AT+MQTTCONN=0,"192.168.***.***",1883,0# 连接主机EMQX,验证成功AT+MQTTCONN?# 查看连接情况AT+MQTTPUB=0,"ESP8266","msg:temp",0,0# 发布消息AT+MQTTSUB=0,"MQTTFX",0# 订阅消息AT+MQTTSUB=0,"WebSocket",0AT+MQTTCLEAN=0# 断开MQTT连接
ESP-01S发布主题为ESP8266
的消息:
服务器和MQTT.fx客户端订阅ESP8266
后:
2、ESP-01S订阅MQTTFX
和WebSocket
:
AT+MQTTSUB=0,"MQTTFX",0AT+MQTTSUB=0,"WebSocket",0
(1)MQTT.fx发布主题为MQTTFX
的数据:
ESP-01S接收到主题为MQTTFX
的数据:
(2)WebSocket发送主题为WebSocket
的消息:
ESP-01S接收到主题为WebSocket
的数据:
参考链接:
https://blog.csdn.net/weixin_42934918/article/details/123956161
https://blog.csdn.net/weixin_61908666/article/details/129846039
https://blog.csdn.net/felix_tao/article/details/125882339
来源地址:https://blog.csdn.net/qq_45362336/article/details/130612379
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341