网上的教程大多无法正常烧录与使用,因此在这里进行总结。

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_RXD
ESP-01S_RXD	——	CH340_TXD
ESP-01S_GND	——	CH340_GND

# ESP-01S与另一块开发板的连线
ESP-01S_CH-PD/EN	——	3V3
ESP-01S_GPIO0	——	GND
ESP-01S_GPIO2	——	3V3
ESP-01S_VCC	——	3V3
ESP-01S_RST	——	GND

ESP-01S_RST一定要先连接到GND上!烧录时要用到。

1.2 固件清除

1、点开烧录软件:
在这里插入图片描述
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_RXD
ESP-01S_RXD	——	CH340_TXD
ESP-01S_GND	——	CH340_GND

# ESP-01S与另一块开发板的连线
ESP-01S_CH-PD/EN	——	3V3/悬空
ESP-01S_GPIO0	——	3V3/悬空
ESP-01S_GPIO2	——	3V3/悬空
ESP-01S_VCC	——	3V3
ESP-01S_RST	——	3V3/悬空

也就是最少只需要4根导线连线。

2.1 打开串口工具

选择串口,波特率初始值为115200,
发送方法:
(1)输入AT,选择“发送新行”,点击“发送数据”。
在这里插入图片描述
(2)输入AT加上回车,不选择“发送新行”,点击“发送数据”。
在这里插入图片描述
(3)输入AT,不选择“发送新行”,点击“发送数据”。输入回车,不选择“发送新行”,点击“发送数据”。
在这里插入图片描述
以上三种方法都可以测试成功。

2.2 AT指令——ESP-01S连接WIFI

以连接MQTT服务器为目的。
1、恢复初始化:

AT+RESTORE 

2、修改串口波特率:

AT+UART 9600,1,0,0

修改之后需要改串口软件的波特率。
3、设置STA模式:

AT+CWMODE?				# 查询指令
AT+CWMODE=<mode>		# 设置指令,<mode>改为1:STA模式;2:AP模式;3:混合模式

4、连接AP(或者路由器WIFI):

AT+CWJAP?				# 查询指令
AT+CWJAP:<ssid>,<psd>[,<bssid>]	# <ssid>目标AP的SSID,<psd>密码,
								# [,<bssid>]目标AP的MAC地址,一般用于多个SSID相同的AP情况

输入命令:AT+CWJAP="MERCURY_XXXX","XXXXXXXX",如果连接成功,则会显示:

WIFI CONNECTED
WIFI GOT IP
OK

5、开启单连接:

AT+CIPMUX=0

6、查询本地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

1、下载Windows端的EMQX服务器:https://www.emqx.com/zh/downloads/broker/5.0.3/emqx-5.0.3-windows-amd64.tar.gz

2、解压到英文路径下。
在这里插入图片描述
3、打开命令提示符,输入以下命令,进入bin文件夹:

d:
cd EMQX
cd emqx-5.0.3-windows-amd64
cd bin

在这里插入图片描述

4、开启MQTT服务器:

.\emqx start

在这里插入图片描述
5、查看EMQX服务器状态:

.\emqx_ctl status

在这里插入图片描述
6、如果要关闭服务器,输入:

.\emqx stop

7、浏览器登录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=<LinkID>,<scheme>,<"Client_ID">,<"username">,<“password”>,<cert_key_ID>,<CA_ID>,<"path">
<LinkID>:当前仅支持 link ID 0。
<scheme>:
	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 证书)。
<Client_ID>:MQTT 客户端 ID,最大长度:256 字节。
<username>:用户名,用于登陆 MQTT broker,最大长度:64 字节。
<password>:密码,用于登陆 MQTT broker,最大长度:64 字节。
<cert_key_ID>:证书 ID,目前 ESP-AT 仅支持一套 cert 证书,参数为 0。
<CA_ID>:CA ID,目前 ESP-AT 仅支持一套 CA 证书,参数为 0。
<path>:资源路径,最大长度:32 字节。

AT+MQTTUSERCFG=0,1,"esp01s_id","esp01s","esp01s",0,0,"/mqtt"
2、设置 MQTT 客户端 IDAT+MQTTLONGCLIENTID
设置相对较长的客户端 ID

AT+MQTTLONGCLIENTID=<LinkID>,<length>
# 收到OK后,输入长度为length的客户端ID,发送。
# 再次收到OK
<LinkID>:当前仅支持 link ID 0。
<length>:MQTT 客户端 ID 长度。范围:[1,1024]。

应在设置AT+MQTTUSERCFG后再使用 AT+MQTTLONGCLIENTID

3、设置 MQTT 登陆用户名AT+MQTTLONGUSERNAME
设置相对较长的用户名

AT+MQTTLONGUSERNAME=<LinkID>,<length>
# 收到OK后,输入长度为length的用户名,发送。
# 再次收到OK
<LinkID>:当前仅支持 link ID 0。
<length>:MQTT 用户名长度。范围:[1,1024]

4、设置 MQTT 登陆密码AT+MQTTLONGPASSWARD

AT+MQTTLONGPASSWORD=<LinkID>,<length>
# 收到OK后,输入长度为length的密码,发送。
# 再次收到OK
<LinkID>:当前仅支持 link ID 0。
<length>:MQTT 密码长度。范围:[1,1024]。

5、设置 MQTT 连接属性AT+MQTTCONNCFG

AT+MQTTCONNCFG=<LinkID>,<keepalive>,<disable_clean_session>,<"lwt_topic">,<"lwt_msg">,<lwt_qos>,<lwt_retain>
<LinkID>:当前仅支持 link ID 0。
<keepalive>:MQTT ping 超时时间,单位:秒。范围:[0,7200]。默认值:0,会被强制改为 120 秒。
<disable_clean_session>:设置 MQTT 清理会话标志,有关该参数的更多信息请参考 MQTT 3.1.1 协议中的 Clean Session 章节。
	0: 使能清理会话
	1: 禁用清理会话
<lwt_topic>:遗嘱 topic,最大长度:128 字节。
<lwt_msg>:遗嘱 message,最大长度:64 字节。
<lwt_qos>:遗嘱 QoS,参数可选 0、1、2,默认值:0。
<lwt_retain>:遗嘱 retain,参数可选 0 或 1,默认值:0。

6、连接MQTT Broker(TCP服务器)AT+MQTTCONN

AT+MQTTCONN?		# 查询ESP32设备已连接的 MQTT broker
# 响应:+MQTTCONN:<LinkID>,<state>,<scheme><"host">,<port>,<"path">,<reconnect>
# 响应:OK
AT+MQTTCONN=<LinkID>,<"host">,<port>,<reconnect>			# 连接MQTT Broker
			# <ip address>为MQTT服务器的地址,端口:1883
<LinkID>:当前仅支持 link ID 0。
<host>:MQTT broker 域名,最大长度:128 字节。
<port>:MQTT broker 端口,最大端口:65535。
<path>:资源路径,最大长度:32 字节。
<reconnect>:
	0: MQTT 不自动重连。如果 MQTT 建立连接后又断开,则无法再次使用本命令重新建立连接,您需要先发送 AT+MQTTCLEAN=0 命令清理信息,重新配置参数,再建立新的连接。
	1: MQTT 自动重连,会消耗较多的内存资源。

<state>:MQTT 状态:
	0: MQTT 未初始化;
	1: 已设置 AT+MQTTUSERCFG;
	2: 已设置 AT+MQTTCONNCFG;
	3: 连接已断开;
	4: 已建立连接;
	5: 已连接,但未订阅 topic;
	6: 已连接,已订阅过 topic。
<scheme>:
	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 证书)。

7、订阅指定MQTT主题AT+MQTTSUB
可订阅多个主题。

AT+MQTTSUB?			# 查询订阅的topic
# 响应:+MQTTSUB=<LinkID>,<state>,<"topic1">,<qos>		
# 响应:OK

AT+MQTTSUB=<LinkID>,<"topic">,<qos>		# 订阅<"topic">主题

# 当 AT 接收到已订阅的 topic 的 MQTT 消息
# 响应:+MQTTSUBRECV:<LinkID>,<"topic">,<data_length>,data
# 若已订阅过该 topic
# 响应:ALREADY SUBSCRIBE
<LinkID>:当前仅支持 link ID 0。
<state>:MQTT 状态:
	0: MQTT 未初始化;
	1: 已设置 AT+MQTTUSERCFG;
	2: 已设置 AT+MQTTCONNCFG;
	3: 连接已断开;
	4: 已建立连接;
	5: 已连接,但未订阅 topic;
	6: 已连接,已订阅过 MQTT topic。
<"topic">:订阅的 topic。
<qos>:订阅的 QoS,一般设置为0(1,2)。

AT+MQTTSUB=0,“ESP8266”,1
8、取消订阅 MQTT TopicAT+MQTTUNSUB
客户端取消订阅指定 topic

AT+MQTTUNSUB=<LinkID>,<"topic">
# 若未订阅过该 topic
# 响应:NO UNSUBSCRIBE
<LinkID>:当前仅支持 link ID 0。
<topic>:MQTT topic,最大长度:128 字节。

9、发布字符串数据AT+MQTTPUB
通过 topic 发布 MQTT 字符串 消息。如果您发布消息的数据量相对较多,已经超过了单条 AT 指令的长度阈值 256 字节,请使用 AT+MQTTPUBRAW 命令。

AT+MQTTPUB=<LinkID>,<"topic">,<"data">,<qos>,<retain>
<LinkID>:当前仅支持 link ID 0。
<"topic">:MQTT topic,最大长度:128 字节。
<"data">:MQTT 字符串消息。
<qos>:发布消息的 QoS,参数可选 0、1、或 2,默认值:0。
<retain>:发布 retain,设置为0。

本命令不能发送数据 \0,若需要发送该数据,请使用 AT+MQTTPUBRAW 命令。
官方示例:

AT+CWMODE=1
AT+CWJAP="ssid","password"
AT+MQTTUSERCFG=0,1,"ESP32","espressif","1234567890",0,0,""
AT+MQTTCONN=0,"192.168.10.234",1883,0
AT+MQTTPUB=0,"ESP8266","msg:temp",0,0		// 发送此命令时,请注意特殊字符是否需要转义。

10、发布长 MQTT 消息AT+MQTTPUBRAW
通过 topic 发布长 MQTT 消息。

AT+MQTTPUBRAW=<LinkID>,<"topic">,<length>,<qos>,<retain>

# 响应:OK
# 响应:>
# 符号 > 表示 AT 准备好接收串口数据,此时您可以输入数据,当数据长度达到参数 <length> 的值时,数据传输开始。

# 若传输成功
# 响应:+MQTTPUB:OK
# 若传输失败
# 响应:+MQTTPUB:FAIL
<LinkID>:当前仅支持 link ID 0。
<topic>:MQTT topic,最大长度:128 字节。
<length>:MQTT 消息长度,不同 ESP32 设备的最大长度受到可利用内存的限制。
<qos>:发布消息的 QoS,参数可选 0、1、或 2,默认值:0。
<retain>:发布 retain。

11、断开 MQTT 连接AT+MQTTCLEAN
断开 MQTT 连接,释放资源。

AT+MQTTCLEAN=<LinkID>
<LinkID>:当前仅支持 link ID 0。

3.3 ESP-01S连接EMQX服务器

ESP-01S的AT指令:

AT
AT+UART=115200,8,1,0,0				# 串口波特率设置
AT+CWMODE=1								# station模式,当做设备来连接wifi
AT+CWJAP="MERCURY_****","********"		# 连接WIFI
AT+CIFSR								# 查询IP
AT+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",0

AT+MQTTCLEAN=0								# 断开MQTT连接

1、ESP-01S发布主题为ESP8266的消息:
在这里插入图片描述
服务器和MQTT.fx客户端订阅ESP8266后:
在这里插入图片描述
在这里插入图片描述
2、ESP-01S订阅MQTTFXWebSocket

AT+MQTTSUB=0,"MQTTFX",0
AT+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