网上的教程大多无法正常烧录与使用,因此在这里进行总结。
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 客户端 ID:AT+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 Topic:AT+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订阅MQTTFX
和WebSocket
:
AT+MQTTSUB=0,"MQTTFX",0
AT+MQTTSUB=0,"WebSocket",0
(1)MQTT.fx发布主题为MQTTFX
的数据:
ESP-01S接收到主题为MQTTFX
的数据:
(2)WebSocket发送主题为WebSocket
的消息:
ESP-01S接收到主题为WebSocket
的数据:
4 Nodejs连接MQTT服务器
Nodejs使用javascript语言构建后端应用,能够连接Mysql服务器、MQTT服务器,搭配上前端能实现精美的页面展示。
本节演示Nodejs后台服务连接EMQX本地MQTT服务器。
4.1 安装Nodejs
略
4.2 创建工程
选择想要的工程路径,命令行输入:
npm init
然后设置项目名称,等待片刻项目就能自动化构建出来。
4.3 安装mqtt包
进入项目文件夹,命令行输入:
npm install mqtt -s
4.4 编写代码
新建mqtt_demo.js
文件,代码如下:
- 引入mqtt包
- 设置客户端连接属性
- 连接服务器,订阅主题
- 发布主题,定时器设置2秒发送一次。
- 监听消息,处理并展示订阅主题下发来的消息。
//mqtt_demo.js
// 连接本地EQMX-MQTT服务器
const mqtt = require('mqtt');
const client = mqtt.connect("mqtt://localhost",{
username:'userjs', //用户名
password:'userjs', //密码
clientId: '1', //客户端id
});
//订阅主题
client.on("connect", function () {
client.subscribe("test", function (err) {
if (!err) {
console.log("Subscribed to test");
}
});
});
// 定时发布消息,Timer中是标识符
var Timer = setInterval(() => {
client.publish("test", 'timer');
}, 2000);
//处理收到的消息
client.on("message", (topic, message) => {
if (topic === "test") {
console.log("Received message:", message.toString());
}
});
4.5 运行程序
命令行输入:
node mqtt_demo.js
由于js程序订阅和发布的主题都设置为test,因此可以发现程序在自发自收。
此时打开mqtt.fx,订阅test主题后,可以发现数据timer在不停循环。
文章来源:https://www.toymoban.com/news/detail-592173.html
参考链接:
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://www.toymoban.com/news/detail-592173.html
到了这里,关于ESP-01S烧录及使用,连接本地MQTT服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!