【一】
說起學(xué)習(xí)物聯(lián)網(wǎng),相信大家最先想到的應(yīng)該就是ESP8266了吧?這個模塊可以連網(wǎng)(就是連接你家中的路由器),也可以作為一個熱點來讓你的手機連接它,是不是很奇妙?
雖然ESP8266程序和相關(guān)的產(chǎn)品已經(jīng)十分成熟了,但還是有一些剛?cè)腴T的小伙伴不知道怎么學(xué)。比如,如何用一個ESP8266加上STM32單片機做一個小產(chǎn)品?這個學(xué)習(xí)的路線又是怎樣的?我們應(yīng)該如何入門?對此,我建議:1、先單獨學(xué)習(xí)ESP8266模塊,搞懂他的AT指令集,通過串口調(diào)試助手和網(wǎng)絡(luò)調(diào)試助手單獨把這個模塊搞明白。2、學(xué)習(xí)mqtt協(xié)議,為啥第二步要學(xué)習(xí)mqtt協(xié)議呢?因為我們esp8266是要連接服務(wù)器的,簡單地說mqtt就是ESP8266與服務(wù)器之間的通信協(xié)議,這個協(xié)議不難,我已經(jīng)寫好了筆記到時候在這個公眾號直接發(fā)布就可以了。3、就是要學(xué)習(xí)android studio自己做一個app。既然是物聯(lián)網(wǎng)控制,當(dāng)然有app了,雖然阿里云還有機智云有直接可以用的app,但作為一個電子愛好者,不能僅限于云智能。今天,就帶你用STM32和ESP8266做一個比如溫濕度顯示,并在手機app上實時。學(xué)習(xí)方法:
1、多去各大論壇查資料去B站找相關(guān)的視頻;
2、學(xué)會舉一反三,讓你點亮一個LED,就要會滅一個led;
3、多動手,程序不是寫出來的,是調(diào)出來和改出來的。
ESP8266 01S簡介:
使用AT功能之前,模塊內(nèi)必須有AT的固件,每個模塊的生產(chǎn)廠商都會對樂鑫官方的AT固件做一些修改和刪減,但是其最核心的AT指令功能都是相同的。我們買的ESP8826模塊一般都有刷好的固件,所以不用自己刷固件。
ESP-01S WiFi模塊是一款低功耗高性價比的嵌入式無線網(wǎng)絡(luò)控制模塊。可滿足智能電網(wǎng)、樓宇自動化、安防、智能家居、遠(yuǎn)程醫(yī)療等物聯(lián)網(wǎng)應(yīng)用的需求。該模塊核心處理器ESP8266在較小尺寸封裝中集成了業(yè)界領(lǐng)先的Tensilica L106超低功耗32位微型MCU,帶有16位精簡模式,主頻支持80MHz和160MHz,支持RTOS,板載天線。該模塊支持完整的TCP/IP協(xié)議棧。用戶可以使用該模塊為現(xiàn)有的設(shè)備添加聯(lián)網(wǎng)功能,也可以構(gòu)建獨立的網(wǎng)絡(luò)控制器。
(1)模塊供電電壓為直流3.3V、電流為500mA以上。
(2)Wi-Fi模塊IO最大輸出電流為12mA。
(3)Wi-Fi模塊NRST管腳低電平有效;EN使能管腳高電平有效。
(4)Wi-Fi模塊進(jìn)入升級模式:GPIO0處于低電平,然后模塊復(fù)位上電;Wi-Fi模塊進(jìn)入正常工作模式:GPIO0處于高電平,模塊復(fù)位上電。
(5)Wi-Fi模塊的RXD接外部MCU的TXD,Wi-Fi模塊的TXD接外部MCU的RXD。



ESP8266刷固件:
刷固件可以用杜邦線,也可以用刷固件的模塊(淘寶上幾塊錢就可以買到),如下圖所示:
AT指令控制ESP8266模組:
樂鑫官方的AT指令有將近100條,但常用的就十幾條,理解起來也非常簡單,現(xiàn)在舉例一些常用指令,并使用這些指令一步一步的通過TCP連接到遠(yuǎn)程的服務(wù)器實現(xiàn)收發(fā)數(shù)據(jù),更多AT指令可以查閱《ESP8266 AT指令集手冊》。

1、測試模塊是否正常

2、開啟/關(guān)閉回顯
從上圖可以看出,我們發(fā)送了一個AT,模塊回復(fù)了AT OK,即模塊將發(fā)送過來的指令原封不動的先復(fù)述了一遍后接著發(fā)送有效回復(fù),我們稱這種復(fù)述為回顯,關(guān)閉回顯(發(fā)送ATE0)后如再次發(fā)送AT,則只回復(fù)OK。如下圖所示:

3、設(shè)置AP模式及AP參數(shù)
WIFI模式有兩種,一種叫AP模式,一種叫Station模式,AP就是我們平時所說的熱點,如WIFI路由器,開了熱點的手機,或者是公共熱點等,這些AP設(shè)備可以允許其他設(shè)備(如手機,筆記本電腦等)輸入熱點名和密碼(也可不設(shè)置密碼)后接入,Station則是前面說的連接AP的設(shè)備,如:手機,筆記本電腦等,當(dāng)ESP8266設(shè)置為AP模式時,其他設(shè)備可以接入該熱點,最多支持4臺Station設(shè)備接入。AP模式也是ESP8266默認(rèn)的模式。
設(shè)置ESP8266流程如下:
1、首先發(fā)送AT+CWMODE?查詢模塊當(dāng)前處于哪一種模式,下圖可以知道AT+CWMODE=2就是熱點模式。


3、我們現(xiàn)在自定義設(shè)置我們ESP8266的熱點名和密碼,來看看我們電腦能不能連接我們所設(shè)置的好的ESP8266模塊。
其含義為:熱點名為ESP8266-XSD,密碼為12345678,使用通道5,加密方式為 WPA2_PSK,這里的通道對應(yīng)的就是不同的射頻頻率,如果同一空間內(nèi)存在相同通道的WIFI信號,將會產(chǎn)生干擾,影響上網(wǎng)質(zhì)量,因此可以設(shè)置通道來避免這種干擾,常用的通道有1 6 11,因為這三個通道互不產(chǎn)生干擾。設(shè)置效果如下圖所示:1、設(shè)置WIFI模式為AP模式
2、設(shè)置AP熱點屬性
AT+CWSAP=AT+CWSAP_DEF="ESP8266-XSD","12345678",5,3
4、設(shè)置為Station模式
該模式是平時應(yīng)用最多的模式,因為物聯(lián)網(wǎng)設(shè)備需要連接到家中路由才可以接入外網(wǎng),此時設(shè)備就作為Station連接到AP熱點。設(shè)置Station并連接AP流程如下:1、設(shè)置WIFI模式為Station
2、連接到家中路由器AT+CWJAP="liuyao","liuyao1001"
下圖為連接過程的串口輸出:


現(xiàn)在我們的ESP8266已經(jīng)與家中的路由器連接上了,現(xiàn)在我們?nèi)绻氆@取連接的這個ESP8266的IP可以使用AT+CIPSTA?指令,返回的是路由器分配給ESP8266的局域網(wǎng)IP以及網(wǎng)關(guān)地址和子網(wǎng)掩碼。

5、使用TCP實現(xiàn)局域網(wǎng)內(nèi)的設(shè)備通信
建立TCP連接(AT+CIPSTART)
TCP實現(xiàn)局域網(wǎng)內(nèi)的設(shè)備通信時先要讓ESP8266連接到家中的熱點。該條指令可以指定建立連接的協(xié)議類型,通常使用的有兩種:TCP和UDP。
我們先打開網(wǎng)絡(luò)調(diào)試助手,并將其設(shè)置為TCP Server端,具體設(shè)置如下:
接下來,發(fā)送AT指令建立TCP連接,成功連接會提示CONNECT,接著使用發(fā)送指令:AT+CIPSEND=14,其中15是發(fā)送數(shù)據(jù)的長度,該指令發(fā)送完成后,接收窗口會顯示 > ,我們接著在發(fā)送窗口發(fā)送"I m TCP Client",TCP Server端會收到該信息,接著再通過TCP Server發(fā)送"I m TCP Server",串口接收端會打印Client收到的數(shù)據(jù)。
下面就是ESP8266連接當(dāng)前環(huán)境的熱點,與服務(wù)器建立TCP連接,傳輸數(shù)據(jù)的過程,所有的字符和標(biāo)點必須是英。(1)設(shè)置WIFI模式為Station:AT+CWMODE=1(2)連家中路由器:AT+CWJAP="liuyao","liuyao1001"(3)TCP:AT+CIPSTART="TCP","192.168.0.103",8080(4)提示發(fā)送數(shù)據(jù)長度為14:AT+CIPSEND=14(5)串口調(diào)試助手發(fā)送:I m TCP Client(6)網(wǎng)絡(luò)調(diào)試助手發(fā)送:I m TCP Server
哈哈,我相信很多初學(xué)者學(xué)到這里也不是很清楚。我這里簡單說一下,我們的用ESP8266是不是要讓它連到家中的網(wǎng)啊,那在這里我們的網(wǎng)絡(luò)調(diào)試助手的TCP Server就是我們要連接的網(wǎng)絡(luò)。
有人又要說了,我要連家中路由器的網(wǎng)啊,為啥要連網(wǎng)絡(luò)調(diào)試助手的網(wǎng)啊?這是因為如果你連家中的網(wǎng),請問你如何給你家的路由器發(fā)送數(shù)據(jù)?。∧阍趺粗缆酚善鹘邮盏搅藬?shù)據(jù)??!路由器又咋給你發(fā)送數(shù)據(jù)啊!你又咋接收數(shù)據(jù)啊!我們這里用網(wǎng)絡(luò)調(diào)試助手的目的就是讓網(wǎng)絡(luò)調(diào)試助手來代替路由器局域網(wǎng)。TCP Server就是服務(wù)端的意思也是就是服務(wù)器。至于為啥用串口調(diào)試助手我就不用說了吧,只有你在串口助手上調(diào)試好了,我們才用單片機的串口結(jié)合ESP8266共同代替客服端,也就不需要調(diào)試助手了。
所以說,我們一定要在串口調(diào)試助手上把相關(guān)的數(shù)據(jù)調(diào)通了,把原理過程搞懂了之后我們再去搞單片機程序,再去搭建你的服務(wù)器而不是用網(wǎng)絡(luò)調(diào)試助手代替了。怎么樣現(xiàn)在明白了吧!
開啟透傳傳輸(AT+CIPMODE=1)
前面在使用TCP進(jìn)行數(shù)據(jù)發(fā)送時,在每次發(fā)送數(shù)據(jù)之前都要指定發(fā)送數(shù)據(jù)的長度,而且在接收到數(shù)據(jù)之后,還會有+IPD,< len >的前綴,這樣很不方便進(jìn)行數(shù)據(jù)的處理,因此我們可以使用AT+CIPMODE=1指令開啟透傳模式,開啟透傳模式后只需要在第一次發(fā)送數(shù)據(jù)時使用ATD+CIPSEND指令來告訴ESP8266開始透傳發(fā)送,隨后我們直接發(fā)送想要的數(shù)據(jù)即可,在接收到數(shù)據(jù)時,也沒有了+IPD,< len >前綴。
下面就是ESP8266連接當(dāng)前環(huán)境的熱點,與服務(wù)器建立TCP連接,開啟透傳模式傳輸數(shù)據(jù)的過程,所有的字符和標(biāo)點必須是英。
(1)設(shè)置WIFI模式為Station:AT+CWMODE=1
(2)連家中路由器:AT+CWJAP="liuyao","liuyao1001"
(3)TCP:AT+CIPSTART="TCP","192.168.0.103",8080
(4)開啟透傳模式:AT+CIPMODE=1
(5)開始透傳發(fā)送:AT+CIPSEND
(6)串口調(diào)試助手發(fā)送:hello I m TCP Client!
(7)網(wǎng)絡(luò)調(diào)試助手發(fā)送:hello I m TCP Server!
6、使用SmartConfig為設(shè)備配網(wǎng)
前面使用了AT+CWJAP指令來主動連接家中的WIFI,但是在大多數(shù)的物聯(lián)網(wǎng)產(chǎn)品中,缺少輸入WIFI密碼的輸入設(shè)備,如:鍵盤,更不能將程序交給用戶去修改家中的WIFI熱點名和密碼,在真正的項目開發(fā)中使用最多的方法就是通過一顆按鍵來使設(shè)備進(jìn)入某種模式,并使用手機將當(dāng)前WIFI的密碼告知該設(shè)備來實現(xiàn)WIFI配網(wǎng),這種模式就是SmartConfig。在該模式下,ESP8266會監(jiān)聽指定端口的UDP廣播包,如果收到符合規(guī)定格式的廣播包后會對其進(jìn)行解析并獲得WIFI的SSID和PWD,然后自動連接獲取到的WIFI熱點,從而實現(xiàn)WIFI配網(wǎng)。
我們說到了ESP8266的AT指令集的使用。本來今天要講一下MQTT協(xié)議的,但考慮到物聯(lián)網(wǎng)知識體系的完整性,決定還是先說一下物聯(lián)網(wǎng)智能家居的控制過程和流程,以及關(guān)于MQTT協(xié)議中的訂閱和發(fā)布是什么意思。就算是下一章的前奏吧,請大家耐心看完
簡單地說,我們最終實現(xiàn)的目的,是要用STM32+ESP8266外加傳感器和繼電器來控制家中的開關(guān),以及得到家中的各個電器的運行狀態(tài)。其原理是家里的電器先接帶STM32+ESP8266+繼電器的智能插座,智能插座再接家里的插座,這樣只要控制ESP8266的這個插座(類似中介)就能控制家里的任何電器。
下面這張圖就是控制方式,通過家用的路由器將各個電器和手機聯(lián)系起來了,手機可以通過路由器控制各個掛載在路由器上的器件,這是比較常用的模式。
【二】
一般來說,把手機叫做上位機,控制器叫做下位機,難道這就是我們常說的物聯(lián)網(wǎng)嗎?準(zhǔn)確地說,這是不對的。畢竟只能圍繞著這個路由器,有一定的局限性。
比如,你到公司才想起忘了關(guān)家里的燈,那么只能跑回家,運氣好的話,在樓下就能連到家里的路由器,然后再通過手機app關(guān)燈。這時候你想,如果能在任何地方控制家里的電器該多好,要是真有這樣的功能,比如你冬天回家前可以先把家里的空凋打開……
我們這個項目就是ESP8266連接家中的路由器的網(wǎng),手機連接的是4/5G網(wǎng),這樣你就能在家中設(shè)備不斷電、不斷網(wǎng)的情況下,在任意地方來控制你家中的用電器設(shè)備了。
一、理論知識
那么,怎么樣才能讓你在任何地方控制家里的電器(當(dāng)然提前還是要有網(wǎng))?
我們先來看下面這張圖,跟原來不一樣的地方是用云服務(wù)器代替了家里的路由器,就這么簡單!
那么,什么是云服務(wù)器?云服務(wù)器又在哪?你就把它當(dāng)作天上的一朵云就好了(阿里云、騰訊云),反正就是不管你的手機,還是別的什么設(shè)備,只要能連網(wǎng)就可以連接云服務(wù)器。

那么,連上服務(wù)器后,是不是就能直接控制了?當(dāng)然可以!
剛學(xué)單片機的小伙伴肯定玩過串口實驗,從單片機發(fā)送字母xiaoshidi,串口調(diào)試助手就收到字母xiaoshidi,覺得很有趣。但有時候你會發(fā)現(xiàn),如果你的串口通信的函數(shù)寫的不好,或者有誤的時候,就會出現(xiàn)通信錯誤,比如接收的數(shù)據(jù)是亂碼等,那么它的可靠性就不是很好了。
到底什么叫可靠性不好呢?比如這邊發(fā)過去的時候是xiaoshidi,運氣不好的話,那邊只可能收到的是shidi,這樣就會出事。所以,我們也不能直接向云服務(wù)器發(fā)送個簡單指令去控制下位機,需要有一定的約定。
比如,事先告訴服務(wù)器我要發(fā)送9個字母過來了,云服務(wù)器收到后就知道了,如果接收xiaoshidi,一般來說是正確接收了;如果只收到shidi,說明丟了4個字母,這就是我們常說的丟包。那么,這樣的約定就是我們常說的協(xié)議!
有句話叫“沒有物聯(lián)網(wǎng)協(xié)議就沒有智能安全”,其實關(guān)鍵就是協(xié)議,在物聯(lián)網(wǎng)中常用的就是MQTT協(xié)議。那么,為什么不用我們常見的http協(xié)議呢?只能自己百度了。這邊簡單介紹一下MQTT協(xié)議的原理,因為只要會MQTT,就能玩轉(zhuǎn)物聯(lián)網(wǎng)。
我們先來看個例子:

為什么能收到呢?是因為我關(guān)注它了,我想這些玩微博的小伙伴都知道。
下面,我再用圖表示一下:

通過這樣的控制方式,就可以解決在單位也能開/關(guān)家里電燈的問題了。不過前提是,手機和單片機都能連上云服務(wù)器(手機可以用家里的網(wǎng)或者4G就可以連到云服務(wù)器,單片機可以通過家里的WIFI就可以連到云服務(wù)器)。
這時可能有人會問,在微博里像“曉艷考研”那么有名,有很多人都會關(guān)注,比如小雅、小李等等,只要“曉艷考研”發(fā)布消息了,關(guān)注的人都能收到。

有的小伙伴腦子轉(zhuǎn)的溜,感覺這樣控制是有問題的。因為這樣的話,手機是統(tǒng)一控制了家里的電器,總不能都一起開、一起關(guān)吧?

關(guān)于MQTT理論,我們先說到這兒,其實還有很多玩法,比如在微博里“曉艷考研”也關(guān)注了我呢?這個有什么用?這樣可以用控制器采集信息上傳到我們的手機了!那就可以采集家中的環(huán)境數(shù)據(jù)上發(fā)到你的手機。
二、實現(xiàn)部分
根據(jù)下面這張圖,我們要做三部分:單片機、云服務(wù)器、手機。

1、單片機
一般來說,單片機也叫作控制器,或者下位機。我們這里用的是STM32單片機。
這時有人會問,為什么不用51單片機,或者arduino?因為現(xiàn)在用STM32的人太多了,arduino又體現(xiàn)不出你是一個電子信息專業(yè)的,51就不用說了。
可能又有人說,你為啥不用esp32,本來就可以當(dāng)一塊單片機,搞個STM32豈不是太麻煩?
此言差矣!我們這里是把ESP8266當(dāng)做一個模塊使用,我僅僅用STM32的串口就可以控制它連網(wǎng)。但如果單單只用ESP32的話,就大大增加了開發(fā)的難度,也就是我們通常說的SDK開發(fā),而且學(xué)習(xí)的同時,又能鞏固單片機的知識,搞SDK確實不適合初學(xué)者。
最后,我們的MQTT協(xié)議轉(zhuǎn)換成C語言代碼已經(jīng)有前輩寫好了,我們的目的就是學(xué)會它,學(xué)會反向?qū)W習(xí),才能增加你對新事物的學(xué)習(xí)興趣。MQTT協(xié)議是現(xiàn)成的,拿來用即可!
在理論部分提到的MQTT協(xié)議是整個物聯(lián)網(wǎng)的核心,所以單片機、手機和云服務(wù)器都要有這協(xié)議。這就好比三個中國人在聊天,一個日本人過來聽,他根本聽不懂,因為他沒有“中文”這個能力。所以,控制器也要有這個解析協(xié)議的能力。
2、服務(wù)器
服務(wù)器可以理解成一臺普通的電腦,只是它的性能比較穩(wěn)定不容易死機。目前服務(wù)器有很多,做得比較大的像騰訊云、阿里云等等,購買服務(wù)器也是個坑,大家需謹(jǐn)慎!前期的話,大家學(xué)習(xí)不用買,登錄生活物聯(lián)平臺用現(xiàn)成的,后面我會講到。
3、手機
一般把手機也叫上位機,上位機還有電腦、平板等等,實驗中是用手機發(fā)送命令來控制我們的單片機。那么手機能打開直接能操作嗎?顯然不能,需要編寫相應(yīng)的程序界面。
如果你是安卓手機,可以用android studio軟件編寫相應(yīng)的app程序。當(dāng)然,前期的話,大家不要去想著做一個app,難度還是蠻大的。
【三】
在學(xué)習(xí)MQTT之前,我們要明白MQTT通訊是通過很多的報文組成的,這就好比二戰(zhàn)時期發(fā)電報進(jìn)行兩軍之間的通信。這個報文呢,主要由三部分組成:固定報文+可變報文+有效載荷,這是官方起的名字,你可以把它理解為開頭+正文+結(jié)尾,這樣就好理解多了是吧?!
基本在MQQTT中,所有的報文都由這三部分組成。比如今天要說的Connect控制報文,顧名思義就是客戶端(ESP8266)請求與服務(wù)端(阿里云服務(wù)器)建立連接的報文。
啥意思呢?這就好比你第一次去你女朋友家,你要首先打一個電話(Connect控制報文)征得叔叔阿姨的同意啊!叔叔阿姨同意之后(服務(wù)器確認(rèn)建立連接)你才能去對吧,如果不同意或者電話沒打通你就不能去你女朋友家啊,就算去了也不招待見對吧!
00:22
客戶端到服務(wù)端的網(wǎng)絡(luò)連接建立后,客戶端發(fā)送給服務(wù)端的第一個報文必須是connect報文(因為客戶端和服務(wù)端必須要建立連接后才能進(jìn)行通信)。1、CONNECT控制報文主要由三部分組成:固定報頭、可變報頭、有效載荷。

2、假設(shè)我們得到了固定報頭是“l(fā)iuyao”、可變報頭是“iloveyou”、有效載荷是“zhuxiaoya”。我們要把這些字母轉(zhuǎn)換成對應(yīng)的16進(jìn)制。然后再把它們串聯(lián)起起來就得到。
1、固定報頭
固定報頭包含兩個字節(jié),第一個字節(jié)是固定的:0x10,第二個字節(jié)是是剩余長度字段,剩余長度等于可變報頭的長度(10字節(jié))加上有效載荷的長度。
最終固定報頭:綜上可得固定報頭為:10 ??(??我們在后面的實驗會提到,先不著急)。
2、可變報頭
可變報頭有四部分組成,協(xié)議名、協(xié)議級別、連接標(biāo)志、保持連接。大家不要糾結(jié)為啥由這四部分組成,這是人家寫這個協(xié)議的人規(guī)定的,你只要搞清楚這四部分對應(yīng)的編碼是啥就可以了,其余的四個字:不要糾結(jié)。
2.1 協(xié)議名

2.2 協(xié)議級別

2.3 連接標(biāo)志

2.4 保持連接

2.5 總結(jié)

2.6 最終可變報頭
綜上,我們可得有效報頭為:00 04 4D 51 54 54 04 C2 00 64
3、有效載荷
有效載荷由三部分組成:客服端標(biāo)識符、用戶名、密碼組成。

3.1 原始數(shù)據(jù)
我們在阿里云物聯(lián)網(wǎng)平臺上創(chuàng)建一個設(shè)備后,會得下面這三個數(shù)據(jù),這三個數(shù)據(jù)非常重要。{ "ProductKey":"a10zwkUxQUS", "DeviceName":"LY-1", "DeviceSecret":"d8b9915513b05d4de32fbed04566edd8" } 阿里云服務(wù)器地址(華東2) : *.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883
客戶端ID :*|securemode=3,signmethod=hmacsha1| 用戶名:* 密碼: clientId*deviceName*productKey#
3.2 加工后的數(shù)據(jù)
服務(wù)器地址:a10zwkUxQUS.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883 客戶端ID :LY-1|securemode=3,signmethod=hmacsha1| 用戶名:LY-1&a10zwkUxQUS 密碼:clientIdLY-1deviceNameLY-1productKeya10zwkUxQUS 經(jīng)過哈希加密:7a03368e740ff9efb8318c6ba2a0260f2a596f87 哈希加密在線計算網(wǎng)站:http://encode.chahuo.com/

客戶端ID :LY-1|securemode=3,signmethod=hmacsha1| 用戶名:LY-1&a10zwkUxQUS 經(jīng)過哈希加密:7a03368e740ff9efb8318c6ba2a0260f2a596f87
3.3 轉(zhuǎn)換成16進(jìn)制
客戶端ID:LY-1|securemode=3,signmethod=hmacsha1|轉(zhuǎn)換為(16進(jìn)制): 4C592D317C7365637572656D6F64653D332C73 69676E6D6574686F643D686D6163736861317C一共38個字節(jié)就是0x26 最終結(jié)果:把0026加到最前面 00264C592D317C7365637572656D6F64653D332C 7369676E6D6574686F643D686D6163736861317C 用戶名:LY-1&a10zwkUxQUS轉(zhuǎn)換為(16進(jìn)制): 4C592D31266131307A776B5578515553一共16個字節(jié)就是0x10 最終結(jié)果:把0010加到最前面 00104C592D31266131307A776B5578515553 經(jīng)過哈希加密:7a03368e740ff9efb8318c6ba2a0260f2a596f87轉(zhuǎn)換為(16進(jìn)制) 3761303333363865373430666639656662383331 3863366261326130323630663261353936663837一共40個字節(jié)就是0x28 最終結(jié)果:把0028加到最前面 002837613033333638653734306666396566623833 313863366261326130323630663261353936663837
最終可得:
- 客戶端: 00 264C 59 2D 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C
- 用戶名: 00 104C 59 2D 31 26 61 31 30 7A 77 6B 55 78 51 55 53
- 密碼: 00 2837 61 30 33 33 36 38 65 37 34 30 66 66 39 65 66 62 38 33 31 38 63 36 62 61 32 61 30 32 36 30 66 32 61 35 39 36 66 38 37
- 組合到一起: 00 264C 59 2D 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C00 104C 59 2D 31 26 61 31 30 7A 77 6B 55 78 51 55 53 00 2837 61 30 33 33 36 38 65 37 34 30 66 66 39 65 66 62 38 33 31 38 63 36 62 61 32 61 30 32 36 30 66 32 61 35 39 36 66 38 37
3.4 最終有效載荷
這樣我們就得到了有效載荷:
00 264C 59 2D 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C00 104C 59 2D 31 26 61 31 30 7A 77 6B 55 78 51 55 53 00 2837 61 30 33 33 36 38 65 37 34 30 66 66 39 65 66 62 38 33 31 38 63 36 62 61 32 61 30 32 36 30 66 32 61 35 39 36 66 38 37
4、Connect控制報文
固定報頭+可變報頭+有效載荷
- 10??00 04 4D 51 54 54 04 C2 00 6400 264C 59 2D 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C00 104C 59 2D 31 26 61 31 30 7A 77 6B 55 78 51 55 5300 2837 61 30 33 33 36 38 65 37 34 30 66 66 39 65 66 62 38 33 31 38 63 36 62 61 32 61 30 32 36 30 66 32 61 35 39 36 66 38 37
- 106E00 04 4D 51 54 54 04 C2 00 6400 264C 59 2D 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C00 104C 59 2D 31 26 61 31 30 7A 77 6B 55 78 51 55 5300 2837 61 30 33 33 36 38 65 37 34 30 66 66 39 65 66 62 38 33 31 38 63 36 62 61 32 61 30 32 36 30 66 32 61 35 39 36 66 38 37
服務(wù)器地址:a10zwkUxQUS.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883 4.在發(fā)送數(shù)據(jù)之前要先勾選按16進(jìn)制發(fā)送,之后會在網(wǎng)絡(luò)調(diào)試助手的接受端出現(xiàn):20 02 00 00說明發(fā)送正常接收正常,如果點擊發(fā)送按鈕之后網(wǎng)絡(luò)調(diào)試助手馬上就斷開或者接收不到數(shù)據(jù)的話,就說明你發(fā)送的數(shù)據(jù)有問題,請仔細(xì)回去好好把報文數(shù)據(jù)整理一遍,否則不能發(fā)送成功。你要知道,錯的不可能是阿里云,也不是MQTT協(xié)議,錯的只有你的數(shù)據(jù)!




5、斷開鏈接
我們可以看到數(shù)據(jù)手冊的3.14小節(jié),斷開連接的報文是 E0 00

-
單片機
+關(guān)注
關(guān)注
6067文章
44976瀏覽量
650225 -
STM32
+關(guān)注
關(guān)注
2293文章
11031瀏覽量
364621
原文標(biāo)題:爛大街的ESP8266究竟該怎么玩?
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
ESP8266燒錄與機智云一鍵配網(wǎng)教程

評論