手表網(wǎng)站建設(shè)策劃書深圳門戶網(wǎng)站
esp8266WiFi模塊通過MQTT連接華為云
- 總結(jié):
- 一、 MQTT透傳AT固件燒錄
- 二、 串口調(diào)試
- 2.1 設(shè)置模塊為STA模式
- 2.2 連接WiFi
- 2.3 設(shè)置MQTT的登陸用戶名與密碼
- 2.4 設(shè)置MQTT的ClientID
- 2.5 設(shè)置MQTT接入地址
- 2.6 訂閱設(shè)備屬性上報的主題
- 2.7 上傳數(shù)據(jù)
- 2.8 平臺下發(fā)命令
- 2.9 華為云物聯(lián)網(wǎng)平臺的->監(jiān)控運維->在線調(diào)試,完成命令下發(fā)
- 三、示例代碼
最近突然想做物聯(lián)網(wǎng)的項目,做一個類似遠程控制家里的設(shè)備,比如控制燈,電視機,空調(diào)這樣的,同時能夠?qū)⒓依锏臏貪穸鹊刃畔⒖梢詫崟r上傳到手機里。
剛開始認為這個不就是一個很簡單的項目嘛,幾個小時之內(nèi)就能做出來,可是沒想到諸事不順,遇到各種各樣的bug,最后竟然花了我周六和周末兩個下午才做出來做出來(不要問為什么是周六和周末的下午,因為早上起不來),最后終于調(diào)通了因此寫這篇文章來記錄一下。
我手里正好有一塊正點原子的esp8266,并且以前正好參加過華為云的訓(xùn)練營ModelBoxAI,了解一點華為云的知識,然后就用這兩個東西來度過愉快的周末。
參考鏈接: ESP8266接入華為云物聯(lián)網(wǎng)平臺
總結(jié):
坑一:esp8266出廠固件不支持MQTT功能,必須自己在鏈接 AT固件匯總 上下載。
坑二:下載固件的時候一定要注意你用的ESP8266系列模組的型號(這里我剛開始沒注意,花了我很久時間)。
坑三:正點原子esp8266型號是esp-01,固件必須用1112_esp8266-4M。
坑四:燒錄的時候注意要把GPIO0接地,才能進入燒錄模式。
坑五:找到華為云平臺接入地址,且保證平臺在線,我這里是用的免費版。
一、 MQTT透傳AT固件燒錄
我最終使用的是stm32+AT指令控制esp01接入華為云聯(lián)網(wǎng)平臺完成數(shù)據(jù)上報與命令處理,在開發(fā)的時候先用usb-ttl模塊連接esp8266調(diào)試
出廠固件不支持全部的MQTT功能,這里我們首先對esp8266進行MQTT固件燒錄。
在這里有個問題,根據(jù)下面官網(wǎng)圖,我用的esp-01,Flash是8M
應(yīng)該下載 MQTT 透傳AT固件(固件號:1471)
可是我下載進去后,總是卡在 連接的第三步
AT+MQTTUSERCFG=0,1,"NULL","填寫用戶名","填寫密碼",0,0,""
AT命令輸入后,總是返回error,這里卡了我好久。
在嘗試各種方法之后,排除了所有可能性之后,我開始懷疑是不是我燒錄的固件錯了?
尼瑪,不可能啊?官方怎么會錯?
然后我下載了官方給的兩個固件,如下圖,最后成功了。
這里我也不知道為什么會這樣,如果有懂的小伙伴可以在評論區(qū)解答一下。
二、 串口調(diào)試
2.1 設(shè)置模塊為STA模式
AT+CWMODE=1
2.2 連接WiFi
AT+CWJAP="填寫wifi名稱","填寫WiFi密碼"
2.3 設(shè)置MQTT的登陸用戶名與密碼
AT+MQTTUSERCFG=0,1,"NULL","填寫用戶名","填寫密碼",0,0,""
用戶名與密碼為華為云MQTT三元組的相關(guān)信息,可以在鏈接: MQTT ClientId生成工具生成
2.4 設(shè)置MQTT的ClientID
AT+MQTTCLIENTID=0,"填寫ClientID"
設(shè)置MQTT的ClientID,ClientID華為云MQTT三元組的相關(guān)信息,在上一步驟中獲取的三元組中查看
2.5 設(shè)置MQTT接入地址
AT+MQTTCONN=0,"填寫MQTT接入的地址",1883,1
設(shè)置MQTT接入地址,華為云物聯(lián)網(wǎng)平臺的地址,具體參考控制臺首頁的平臺接入地址
2.6 訂閱設(shè)備屬性上報的主題
AT+MQTTSUB=0,"訂閱的主題",1
完成屬性上報的話需要先訂閱設(shè)備屬性上報的主題,此處可填寫為:
$oc/devices/填寫設(shè)備ID/sys/properties/report
2.7 上傳數(shù)據(jù)
AT+MQTTPUB=0," 訂閱的主題 ","上報的json數(shù)據(jù)",0,0
上報的json數(shù)據(jù):
$oc/devices/64047c741eaf704179abaa58_Temp_test/sys/properties/report ","{\"services\":[{\"service_id\":\"esp8266_data\"\,\"properties\":{\"temp\": 100}}]}
建議大家完成這步時,先使用MQTT.fx進行設(shè)備屬性上報測試,確保數(shù)據(jù)無誤正常上傳。
在完成上面的每一步時,系統(tǒng)都會打印一個OK
2.8 平臺下發(fā)命令
AT+MQTTSUB=0,"訂閱的主題topic ",1
我們在這填寫的是平臺下發(fā)命令的主題:$oc/devices/填寫設(shè)備ID/sys/commands/#
2.9 華為云物聯(lián)網(wǎng)平臺的->監(jiān)控運維->在線調(diào)試,完成命令下發(fā)
三、示例代碼
AT+MQTTUSERCFG=0,1,"NULL","6404eaf704179abaa58_Temp_test","3859a228b3bcdd143d94eff8198d58bb801b820e528b96ea6ca6ece86",0,0,""OK
AT+MQTTCLIENTID=0,"64047c7704179abaa58_Temp_test_0_0_2023030511"OK
AT+MQTTCONN=0,"04dcad.st1.iotda-device.cn-north-4.myhuaweicloud.com",1883,1
+MQTTCONNECTED:0,1,"04d3ad.st1.iotda-device.cn-north-4.myhuaweicloud.com","1883","",1OK
AT+MQTTSUB=0,"$oc/devices/64047cf704179abaa58_Temp_test/sys/properties/report",1OK
AT+MQTTPUB=0," $oc/devices/6404eaf704179abaa58_Temp_test/sys/properties/report ","{\"services\":[{\"service_id\":\"esp8266_data\"\,\"properties\":{\"temp\": 100}}]}",0,0OK