網(wǎng)上的教程大多無法正常燒錄與使用,因此在這里進(jìn)行總結(jié)。
1 ESP-01S燒錄
固件燒錄建議使用專用的燒錄器,十分省心。
本文討論的是使用普通的CH340串口模塊進(jìn)行燒寫。
必須使用的工具:杜邦線、CH340串口模塊、另外一塊有3V3電源和GND的開發(fā)板。
1.1 燒寫前連線
CH340 TTL轉(zhuǎn)USB模塊的引腳數(shù)量不夠,因此需要另外一塊開發(fā)板的引腳給ESP-01S提供高低電平。
注意:CH340的VCC引腳不要連接,電壓比較高,可能會燒壞ESP-01S。
另一塊開發(fā)板也要用USB線連接到電腦上。
CH340模塊的供電不夠,因此ESP-01S_VCC不連接到CH340,一般來說開發(fā)板供電都比較大,電源連接到開發(fā)板上。
# ESP-01S與CH340模塊的連線:
ESP-01S_TXD —— CH340_RXD
ESP-01S_RXD —— CH340_TXD
ESP-01S_GND —— CH340_GND
# ESP-01S與另一塊開發(fā)板的連線
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、點(diǎn)開燒錄軟件:
2、點(diǎn)擊ESP8266 DownloadTool:
3、需要連接MQTT服務(wù)器的話必須使用相關(guān)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、連接好所有的導(dǎo)線后,點(diǎn)擊ERASE。
看到SYNC后,立刻拔掉ESP-01S_RST(非常重要),等待一秒,就可以清除程序了。
清除過程為Download。
清除完成后,顯示Finish。
1.3 固件燒寫
剛剛清除程序拔掉了ESP-01S_RST,現(xiàn)在再次連上GND。
點(diǎn)擊START,開始燒寫固件。
等到SYNC后,立刻拔掉ESP-01S_RST引腳(非常重要),等待一秒,軟件就開始下載了。
點(diǎn)擊STOP退出,這時燒入固件就成功了。
2 ESP-01S串口測試
不能使用CH340模塊給ESP-01S供電,依然需要另一塊開發(fā)板供電。
此時的連線需要進(jìn)行改變:
# ESP-01S與CH340模塊的連線:
ESP-01S_TXD —— CH340_RXD
ESP-01S_RXD —— CH340_TXD
ESP-01S_GND —— CH340_GND
# ESP-01S與另一塊開發(fā)板的連線
ESP-01S_CH-PD/EN —— 3V3/懸空
ESP-01S_GPIO0 —— 3V3/懸空
ESP-01S_GPIO2 —— 3V3/懸空
ESP-01S_VCC —— 3V3
ESP-01S_RST —— 3V3/懸空
也就是最少只需要4根導(dǎo)線連線。
2.1 打開串口工具
選擇串口,波特率初始值為115200,
發(fā)送方法:
(1)輸入AT
,選擇“發(fā)送新行”,點(diǎn)擊“發(fā)送數(shù)據(jù)”。
(2)輸入AT
加上回車,不選擇“發(fā)送新行”,點(diǎn)擊“發(fā)送數(shù)據(jù)”。
(3)輸入AT
,不選擇“發(fā)送新行”,點(diǎn)擊“發(fā)送數(shù)據(jù)”。輸入回車,不選擇“發(fā)送新行”,點(diǎn)擊“發(fā)送數(shù)據(jù)”。
以上三種方法都可以測試成功。
2.2 AT指令——ESP-01S連接WIFI
以連接MQTT服務(wù)器為目的。
1、恢復(fù)初始化:
AT+RESTORE
2、修改串口波特率:
AT+UART 9600,1,0,0
修改之后需要改串口軟件的波特率。
3、設(shè)置STA模式:
AT+CWMODE? # 查詢指令
AT+CWMODE=<mode> # 設(shè)置指令,<mode>改為1:STA模式;2:AP模式;3:混合模式
4、連接AP(或者路由器WIFI):
AT+CWJAP? # 查詢指令
AT+CWJAP:<ssid>,<psd>[,<bssid>] # <ssid>目標(biāo)AP的SSID,<psd>密碼,
# [,<bssid>]目標(biāo)AP的MAC地址,一般用于多個SSID相同的AP情況
輸入命令:AT+CWJAP="MERCURY_XXXX","XXXXXXXX"
,如果連接成功,則會顯示:
WIFI CONNECTED
WIFI GOT IP
OK
5、開啟單連接:
AT+CIPMUX=0
6、查詢本地IP地址:
AT+CIFSR
收到回復(fù):
+CIFSR:STAIP,"192.168.xxx.xxx"
+CIFSR:STAMAC,"8c:xx:xx:xx:xx:xx"
OK
3 ESP-01S連接本地MQTT服務(wù)器
3.1 本地MQTT服務(wù)器安裝
參考鏈接:https://blog.csdn.net/felix_tao/article/details/125882339
1、下載Windows端的EMQX服務(wù)器:https://www.emqx.com/zh/downloads/broker/5.0.3/emqx-5.0.3-windows-amd64.tar.gz
2、解壓到英文路徑下。
3、打開命令提示符,輸入以下命令,進(jìn)入bin文件夾:
d:
cd EMQX
cd emqx-5.0.3-windows-amd64
cd bin
4、開啟MQTT服務(wù)器:
.\emqx start
5、查看EMQX服務(wù)器狀態(tài):
.\emqx_ctl status
6、如果要關(guān)閉服務(wù)器,輸入:
.\emqx stop
7、瀏覽器登錄EMQX服務(wù)器控制面板,驗(yàn)證是否可用。
(1)輸入地址:http://127.0.0.1:18083/#/login
(2)用戶名:admin
(3)密碼:public
(4)修改中文和界面:
8、進(jìn)入WebSocket:
點(diǎn)擊連接,訂閱ESP8266和MQTTFX兩個話題。
9、MQTT.fx軟件設(shè)置連接配置:
Broker Address需要電腦cmd ipconfig
一下,查看電腦IP。其他設(shè)置默認(rèn)。
MQTT.fx發(fā)送消息。
在EMQX服務(wù)器面板里可以看到接收到的消息。
接下來匹配ESP-01S,目的是讓ESP-01S連接上MQTT服務(wù)器。
這里特別奇怪,我的電腦上安裝了虛擬機(jī),虛擬機(jī)里跑EMQX服務(wù)器,電腦能連接,ESP-01S無法連接。初步懷疑是不在一個網(wǎng)段。
3.2 ESP-01S的AT配置
ESP8266共有三種工作模式,分別是無線接入點(diǎn)模式(AP)、無線終端模式以及混合模式(以上兩種模式的混合)。
本文ESP-01S作為客戶端,連接WIFI接收手機(jī)或者電腦的控制,這種模式為STA模式。
依然是AT指令:
1、配置MQTT用戶屬性:AT+MQTTUSERCFG
指定MQTT ID和用戶名,密碼
AT+MQTTUSERCFG=<LinkID>,<scheme>,<"Client_ID">,<"username">,<“password”>,<cert_key_ID>,<CA_ID>,<"path">
<LinkID>:當(dāng)前僅支持 link ID 0。
<scheme>:
1: MQTT over TCP;
2: MQTT over TLS(不校驗(yàn)證書);
3: MQTT over TLS(校驗(yàn) server 證書);
4: MQTT over TLS(提供 client 證書);
5: MQTT over TLS(校驗(yàn) server 證書并且提供 client 證書);
6: MQTT over WebSocket(基于 TCP);
7: MQTT over WebSocket Secure(基于 TLS,不校驗(yàn)證書);
8: MQTT over WebSocket Secure(基于 TLS,校驗(yàn) server 證書);
9: MQTT over WebSocket Secure(基于 TLS,提供 client 證書);
10: MQTT over WebSocket Secure(基于 TLS,校驗(yàn) server 證書并且提供 client 證書)。
<Client_ID>:MQTT 客戶端 ID,最大長度:256 字節(jié)。
<username>:用戶名,用于登陸 MQTT broker,最大長度:64 字節(jié)。
<password>:密碼,用于登陸 MQTT broker,最大長度:64 字節(jié)。
<cert_key_ID>:證書 ID,目前 ESP-AT 僅支持一套 cert 證書,參數(shù)為 0。
<CA_ID>:CA ID,目前 ESP-AT 僅支持一套 CA 證書,參數(shù)為 0。
<path>:資源路徑,最大長度:32 字節(jié)。
AT+MQTTUSERCFG=0,1,"esp01s_id","esp01s","esp01s",0,0,"/mqtt"
2、設(shè)置 MQTT 客戶端 ID:AT+MQTTLONGCLIENTID
設(shè)置相對較長的客戶端 ID
AT+MQTTLONGCLIENTID=<LinkID>,<length>
# 收到OK后,輸入長度為length的客戶端ID,發(fā)送。
# 再次收到OK
<LinkID>:當(dāng)前僅支持 link ID 0。
<length>:MQTT 客戶端 ID 長度。范圍:[1,1024]。
應(yīng)在設(shè)置AT+MQTTUSERCFG
后再使用 AT+MQTTLONGCLIENTID
。
3、設(shè)置 MQTT 登陸用戶名:AT+MQTTLONGUSERNAME
設(shè)置相對較長的用戶名
AT+MQTTLONGUSERNAME=<LinkID>,<length>
# 收到OK后,輸入長度為length的用戶名,發(fā)送。
# 再次收到OK
<LinkID>:當(dāng)前僅支持 link ID 0。
<length>:MQTT 用戶名長度。范圍:[1,1024]
4、設(shè)置 MQTT 登陸密碼:AT+MQTTLONGPASSWARD
AT+MQTTLONGPASSWORD=<LinkID>,<length>
# 收到OK后,輸入長度為length的密碼,發(fā)送。
# 再次收到OK
<LinkID>:當(dāng)前僅支持 link ID 0。
<length>:MQTT 密碼長度。范圍:[1,1024]。
5、設(shè)置 MQTT 連接屬性:AT+MQTTCONNCFG
AT+MQTTCONNCFG=<LinkID>,<keepalive>,<disable_clean_session>,<"lwt_topic">,<"lwt_msg">,<lwt_qos>,<lwt_retain>
<LinkID>:當(dāng)前僅支持 link ID 0。
<keepalive>:MQTT ping 超時時間,單位:秒。范圍:[0,7200]。默認(rèn)值:0,會被強(qiáng)制改為 120 秒。
<disable_clean_session>:設(shè)置 MQTT 清理會話標(biāo)志,有關(guān)該參數(shù)的更多信息請參考 MQTT 3.1.1 協(xié)議中的 Clean Session 章節(jié)。
0: 使能清理會話
1: 禁用清理會話
<lwt_topic>:遺囑 topic,最大長度:128 字節(jié)。
<lwt_msg>:遺囑 message,最大長度:64 字節(jié)。
<lwt_qos>:遺囑 QoS,參數(shù)可選 0、1、2,默認(rèn)值:0。
<lwt_retain>:遺囑 retain,參數(shù)可選 0 或 1,默認(rèn)值:0。
6、連接MQTT Broker(TCP服務(wù)器):AT+MQTTCONN
AT+MQTTCONN? # 查詢ESP32設(shè)備已連接的 MQTT broker
# 響應(yīng):+MQTTCONN:<LinkID>,<state>,<scheme><"host">,<port>,<"path">,<reconnect>
# 響應(yīng):OK
AT+MQTTCONN=<LinkID>,<"host">,<port>,<reconnect> # 連接MQTT Broker
# <ip address>為MQTT服務(wù)器的地址,端口:1883
<LinkID>:當(dāng)前僅支持 link ID 0。
<host>:MQTT broker 域名,最大長度:128 字節(jié)。
<port>:MQTT broker 端口,最大端口:65535。
<path>:資源路徑,最大長度:32 字節(jié)。
<reconnect>:
0: MQTT 不自動重連。如果 MQTT 建立連接后又?jǐn)嚅_,則無法再次使用本命令重新建立連接,您需要先發(fā)送 AT+MQTTCLEAN=0 命令清理信息,重新配置參數(shù),再建立新的連接。
1: MQTT 自動重連,會消耗較多的內(nèi)存資源。
<state>:MQTT 狀態(tài):
0: MQTT 未初始化;
1: 已設(shè)置 AT+MQTTUSERCFG;
2: 已設(shè)置 AT+MQTTCONNCFG;
3: 連接已斷開;
4: 已建立連接;
5: 已連接,但未訂閱 topic;
6: 已連接,已訂閱過 topic。
<scheme>:
1: MQTT over TCP;
2: MQTT over TLS(不校驗(yàn)證書);
3: MQTT over TLS(校驗(yàn) server 證書);
4: MQTT over TLS(提供 client 證書);
5: MQTT over TLS(校驗(yàn) server 證書并且提供 client 證書);
6: MQTT over WebSocket(基于 TCP);
7: MQTT over WebSocket Secure(基于 TLS,不校驗(yàn)證書);
8: MQTT over WebSocket Secure(基于 TLS,校驗(yàn) server 證書);
9: MQTT over WebSocket Secure(基于 TLS,提供 client 證書);
10: MQTT over WebSocket Secure(基于 TLS,校驗(yàn) server 證書并且提供 client 證書)。
7、訂閱指定MQTT主題:AT+MQTTSUB
可訂閱多個主題。
AT+MQTTSUB? # 查詢訂閱的topic
# 響應(yīng):+MQTTSUB=<LinkID>,<state>,<"topic1">,<qos>
# 響應(yīng):OK
AT+MQTTSUB=<LinkID>,<"topic">,<qos> # 訂閱<"topic">主題
# 當(dāng) AT 接收到已訂閱的 topic 的 MQTT 消息
# 響應(yīng):+MQTTSUBRECV:<LinkID>,<"topic">,<data_length>,data
# 若已訂閱過該 topic
# 響應(yīng):ALREADY SUBSCRIBE
<LinkID>:當(dāng)前僅支持 link ID 0。
<state>:MQTT 狀態(tài):
0: MQTT 未初始化;
1: 已設(shè)置 AT+MQTTUSERCFG;
2: 已設(shè)置 AT+MQTTCONNCFG;
3: 連接已斷開;
4: 已建立連接;
5: 已連接,但未訂閱 topic;
6: 已連接,已訂閱過 MQTT topic。
<"topic">:訂閱的 topic。
<qos>:訂閱的 QoS,一般設(shè)置為0(1,2)。
AT+MQTTSUB=0,“ESP8266”,1
8、取消訂閱 MQTT Topic:AT+MQTTUNSUB
客戶端取消訂閱指定 topic
AT+MQTTUNSUB=<LinkID>,<"topic">
# 若未訂閱過該 topic
# 響應(yīng):NO UNSUBSCRIBE
<LinkID>:當(dāng)前僅支持 link ID 0。
<topic>:MQTT topic,最大長度:128 字節(jié)。
9、發(fā)布字符串?dāng)?shù)據(jù):AT+MQTTPUB
通過 topic 發(fā)布 MQTT 字符串 消息。如果您發(fā)布消息的數(shù)據(jù)量相對較多,已經(jīng)超過了單條 AT 指令的長度閾值 256 字節(jié),請使用 AT+MQTTPUBRAW
命令。
AT+MQTTPUB=<LinkID>,<"topic">,<"data">,<qos>,<retain>
<LinkID>:當(dāng)前僅支持 link ID 0。
<"topic">:MQTT topic,最大長度:128 字節(jié)。
<"data">:MQTT 字符串消息。
<qos>:發(fā)布消息的 QoS,參數(shù)可選 0、1、或 2,默認(rèn)值:0。
<retain>:發(fā)布 retain,設(shè)置為0。
本命令不能發(fā)送數(shù)據(jù) \0,若需要發(fā)送該數(shù)據(jù),請使用 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 // 發(fā)送此命令時,請注意特殊字符是否需要轉(zhuǎn)義。
10、發(fā)布長 MQTT 消息:AT+MQTTPUBRAW
通過 topic 發(fā)布長 MQTT 消息。
AT+MQTTPUBRAW=<LinkID>,<"topic">,<length>,<qos>,<retain>
# 響應(yīng):OK
# 響應(yīng):>
# 符號 > 表示 AT 準(zhǔn)備好接收串口數(shù)據(jù),此時您可以輸入數(shù)據(jù),當(dāng)數(shù)據(jù)長度達(dá)到參數(shù) <length> 的值時,數(shù)據(jù)傳輸開始。
# 若傳輸成功
# 響應(yīng):+MQTTPUB:OK
# 若傳輸失敗
# 響應(yīng):+MQTTPUB:FAIL
<LinkID>:當(dāng)前僅支持 link ID 0。
<topic>:MQTT topic,最大長度:128 字節(jié)。
<length>:MQTT 消息長度,不同 ESP32 設(shè)備的最大長度受到可利用內(nèi)存的限制。
<qos>:發(fā)布消息的 QoS,參數(shù)可選 0、1、或 2,默認(rèn)值:0。
<retain>:發(fā)布 retain。
11、斷開 MQTT 連接:AT+MQTTCLEAN
斷開 MQTT 連接,釋放資源。
AT+MQTTCLEAN=<LinkID>
<LinkID>:當(dāng)前僅支持 link ID 0。
3.3 ESP-01S連接EMQX服務(wù)器
ESP-01S的AT指令:
AT
AT+UART=115200,8,1,0,0 # 串口波特率設(shè)置
AT+CWMODE=1 # station模式,當(dāng)做設(shè)備來連接wifi
AT+CWJAP="MERCURY_****","********" # 連接WIFI
AT+CIFSR # 查詢IP
AT+MQTTUSERCFG=0,1,"ESP8266-01s","esp8266","",0,0,"" # 設(shè)置自身mqtt信息
AT+MQTTCONN=0,"192.168.***.***",1883,0 # 連接虛擬機(jī)EMQX,驗(yàn)證失敗,未找到原因
AT+MQTTCONN=0,"192.168.***.***",1883,0 # 連接主機(jī)EMQX,驗(yàn)證成功
AT+MQTTCONN? # 查看連接情況
AT+MQTTPUB=0,"ESP8266","msg:temp",0,0 # 發(fā)布消息
AT+MQTTSUB=0,"MQTTFX",0 # 訂閱消息
AT+MQTTSUB=0,"WebSocket",0
AT+MQTTCLEAN=0 # 斷開MQTT連接
1、ESP-01S發(fā)布主題為ESP8266
的消息:
服務(wù)器和MQTT.fx客戶端訂閱ESP8266
后:
2、ESP-01S訂閱MQTTFX
和WebSocket
:
AT+MQTTSUB=0,"MQTTFX",0
AT+MQTTSUB=0,"WebSocket",0
(1)MQTT.fx發(fā)布主題為MQTTFX
的數(shù)據(jù):
ESP-01S接收到主題為MQTTFX
的數(shù)據(jù):
(2)WebSocket發(fā)送主題為WebSocket
的消息:
ESP-01S接收到主題為WebSocket
的數(shù)據(jù):
4 Nodejs連接MQTT服務(wù)器
Nodejs使用javascript語言構(gòu)建后端應(yīng)用,能夠連接Mysql服務(wù)器、MQTT服務(wù)器,搭配上前端能實(shí)現(xiàn)精美的頁面展示。
本節(jié)演示Nodejs后臺服務(wù)連接EMQX本地MQTT服務(wù)器。
4.1 安裝Nodejs
略
4.2 創(chuàng)建工程
選擇想要的工程路徑,命令行輸入:
npm init
然后設(shè)置項目名稱,等待片刻項目就能自動化構(gòu)建出來。
4.3 安裝mqtt包
進(jìn)入項目文件夾,命令行輸入:
npm install mqtt -s
4.4 編寫代碼
新建mqtt_demo.js
文件,代碼如下:
- 引入mqtt包
- 設(shè)置客戶端連接屬性
- 連接服務(wù)器,訂閱主題
- 發(fā)布主題,定時器設(shè)置2秒發(fā)送一次。
- 監(jiān)聽消息,處理并展示訂閱主題下發(fā)來的消息。
//mqtt_demo.js
// 連接本地EQMX-MQTT服務(wù)器
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");
}
});
});
// 定時發(fā)布消息,Timer中是標(biāo)識符
var Timer = setInterval(() => {
client.publish("test", 'timer');
}, 2000);
//處理收到的消息
client.on("message", (topic, message) => {
if (topic === "test") {
console.log("Received message:", message.toString());
}
});
4.5 運(yùn)行程序
命令行輸入:
node mqtt_demo.js
由于js程序訂閱和發(fā)布的主題都設(shè)置為test,因此可以發(fā)現(xiàn)程序在自發(fā)自收。
此時打開mqtt.fx,訂閱test主題后,可以發(fā)現(xiàn)數(shù)據(jù)timer在不停循環(huán)。
文章來源:http://www.zghlxwxcb.cn/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文章來源地址http://www.zghlxwxcb.cn/news/detail-592173.html
到了這里,關(guān)于ESP-01S燒錄及使用,連接本地MQTT服務(wù)器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!