【一】
說起學習物聯網,相信大家最先想到的應該就是ESP8266了吧?這個模塊可以連網(就是連接你家中的路由器),也可以作為一個熱點來讓你的手機連接它,是不是很奇妙?
雖然ESP8266程序和相關的產品已經十分成熟了,但還是有一些剛入門的小伙伴不知道怎么學。比如,如何用一個ESP8266加上STM32單片機做一個小產品?這個學習的路線又是怎樣的?我們應該如何入門?對此,我建議:1、先單獨學習ESP8266模塊,搞懂他的AT指令集,通過串口調試助手和網絡調試助手單獨把這個模塊搞明白。2、學習mqtt協議,為啥第二步要學習mqtt協議呢?因為我們esp8266是要連接服務器的,簡單地說mqtt就是ESP8266與服務器之間的通信協議,這個協議不難,我已經寫好了筆記到時候在這個公眾號直接發布就可以了。3、就是要學習android studio自己做一個app。既然是物聯網控制,當然有app了,雖然阿里云還有機智云有直接可以用的app,但作為一個電子愛好者,不能僅限于云智能。今天,就帶你用STM32和ESP8266做一個比如溫濕度顯示,并在手機app上實時。學習方法:
1、多去各大論壇查資料去B站找相關的視頻;
2、學會舉一反三,讓你點亮一個LED,就要會滅一個led;
3、多動手,程序不是寫出來的,是調出來和改出來的。
ESP8266 01S簡介:
使用AT功能之前,模塊內必須有AT的固件,每個模塊的生產廠商都會對樂鑫官方的AT固件做一些修改和刪減,但是其最核心的AT指令功能都是相同的。我們買的ESP8826模塊一般都有刷好的固件,所以不用自己刷固件。
ESP-01S WiFi模塊是一款低功耗高性價比的嵌入式無線網絡控制模塊。可滿足智能電網、樓宇自動化、安防、智能家居、遠程醫療等物聯網應用的需求。該模塊核心處理器ESP8266在較小尺寸封裝中集成了業界領先的Tensilica L106超低功耗32位微型MCU,帶有16位精簡模式,主頻支持80MHz和160MHz,支持RTOS,板載天線。該模塊支持完整的TCP/IP協議棧。用戶可以使用該模塊為現有的設備添加聯網功能,也可以構建獨立的網絡控制器。
(1)模塊供電電壓為直流3.3V、電流為500mA以上。
(2)Wi-Fi模塊IO最大輸出電流為12mA。
(3)Wi-Fi模塊NRST管腳低電平有效;EN使能管腳高電平有效。
(4)Wi-Fi模塊進入升級模式:GPIO0處于低電平,然后模塊復位上電;Wi-Fi模塊進入正常工作模式:GPIO0處于高電平,模塊復位上電。
(5)Wi-Fi模塊的RXD接外部MCU的TXD,Wi-Fi模塊的TXD接外部MCU的RXD。
?
ESP8266刷固件:
刷固件可以用杜邦線,也可以用刷固件的模塊(淘寶上幾塊錢就可以買到),如下圖所示:AT指令控制ESP8266模組:
樂鑫官方的AT指令有將近100條,但常用的就十幾條,理解起來也非常簡單,現在舉例一些常用指令,并使用這些指令一步一步的通過TCP連接到遠程的服務器實現收發數據,更多AT指令可以查閱《ESP8266 AT指令集手冊》。
總結AT指令的構成就是,每條指令要以AT開始,后面跟要查詢(讀)或者要設置(寫)的參數,例如查詢WIFI模式對應的指令為AT+CWMODE?,設置WIFI模式為AT+CWMODE=3。另外,要求的回車換行符結尾是說要在待發送的數據后面追加 ,即十六進制的0x0D 0x0A。注意:在使用串口調試助手發送AT指令時,只需要在待發送指令后面加回車即可,大家可以勾選“按十六進制發送”,觀察數據后面是否追加了0x0D 0x0A。1、測試模塊是否正常
該指令通常在開機后查詢模塊是否正常啟動,如果回復OK,則表示為正常啟動。
2、開啟/關閉回顯
從上圖可以看出,我們發送了一個AT,模塊回復了AT OK,即模塊將發送過來的指令原封不動的先復述了一遍后接著發送有效回復,我們稱這種復述為回顯,關閉回顯(發送ATE0)后如再次發送AT,則只回復OK。如下圖所示:
3、設置AP模式及AP參數
WIFI模式有兩種,一種叫AP模式,一種叫Station模式,AP就是我們平時所說的熱點,如WIFI路由器,開了熱點的手機,或者是公共熱點等,這些AP設備可以允許其他設備(如手機,筆記本電腦等)輸入熱點名和密碼(也可不設置密碼)后接入,Station則是前面說的連接AP的設備,如:手機,筆記本電腦等,當ESP8266設置為AP模式時,其他設備可以接入該熱點,最多支持4臺Station設備接入。AP模式也是ESP8266默認的模式。
設置ESP8266流程如下:
1、首先發送AT+CWMODE?查詢模塊當前處于哪一種模式,下圖可以知道AT+CWMODE=2就是熱點模式。
2、然后我們發送AT+CWMODE=2,讓模塊處于熱點模式下,同時我們的電腦上也會顯示熱點名稱。3、我們現在自定義設置我們ESP8266的熱點名和密碼,來看看我們電腦能不能連接我們所設置的好的ESP8266模塊。
其含義為:熱點名為ESP8266-XSD,密碼為12345678,使用通道5,加密方式為 WPA2_PSK,這里的通道對應的就是不同的射頻頻率,如果同一空間內存在相同通道的WIFI信號,將會產生干擾,影響上網質量,因此可以設置通道來避免這種干擾,常用的通道有1 6 11,因為這三個通道互不產生干擾。設置效果如下圖所示:1、設置WIFI模式為AP模式
2、設置AP熱點屬性
AT+CWSAP=AT+CWSAP_DEF="ESP8266-XSD","12345678",5,3
連接數量可以限制Station設備的接入數量,廣播或者不廣播SSID就是指是否隱藏熱點名,使熱點更加安全。此外,AT+CWSAP=AT+CWSAP_DEF表示設置的參數會存儲的flash,還有另外一個類似指令AT+CWSAP=AT+CWSAP_ CUR,該條指令表示設置的參數重啟后失效,即不保存到flash中。其他的AT指令也有類似的后綴。
4、設置為Station模式
該模式是平時應用最多的模式,因為物聯網設備需要連接到家中路由才可以接入外網,此時設備就作為Station連接到AP熱點。設置Station并連接AP流程如下:1、設置WIFI模式為Station
2、連接到家中路由器AT+CWJAP="liuyao","liuyao1001"
下圖為連接過程的串口輸出:
這時候我們進入家中的路由器,就能看到我們的ESP8266模塊連接到了家中的路由器。如果想要斷開連接,可以使用AT+CWQAP,就可以斷開ESP8266與路由器的連接。現在我們的ESP8266已經與家中的路由器連接上了,現在我們如果想獲取連接的這個ESP8266的IP可以使用AT+CIPSTA?指令,返回的是路由器分配給ESP8266的局域網IP以及網關地址和子網掩碼。
5、使用TCP實現局域網內的設備通信
建立TCP連接(AT+CIPSTART)
TCP實現局域網內的設備通信時先要讓ESP8266連接到家中的熱點。該條指令可以指定建立連接的協議類型,通常使用的有兩種:TCP和UDP。
我們先打開網絡調試助手,并將其設置為TCP Server端,具體設置如下:接下來,發送AT指令建立TCP連接,成功連接會提示CONNECT,接著使用發送指令:AT+CIPSEND=14,其中15是發送數據的長度,該指令發送完成后,接收窗口會顯示 > ,我們接著在發送窗口發送"I m TCP Client",TCP Server端會收到該信息,接著再通過TCP Server發送"I m TCP Server",串口接收端會打印Client收到的數據。
下面就是ESP8266連接當前環境的熱點,與服務器建立TCP連接,傳輸數據的過程,所有的字符和標點必須是英。(1)設置WIFI模式為Station:AT+CWMODE=1(2)連家中路由器:AT+CWJAP="liuyao","liuyao1001"(3)TCP:AT+CIPSTART="TCP","192.168.0.103",8080(4)提示發送數據長度為14:AT+CIPSEND=14(5)串口調試助手發送:I m TCP Client(6)網絡調試助手發送:I m TCP Server這一步很多人可能很懵,不知道為啥要這樣做,你這個搞的串口調試助手還有網絡調試助手還有啥TCP Server到底是啥意思啊?
哈哈,我相信很多初學者學到這里也不是很清楚。我這里簡單說一下,我們的用ESP8266是不是要讓它連到家中的網啊,那在這里我們的網絡調試助手的TCP Server就是我們要連接的網絡。
有人又要說了,我要連家中路由器的網啊,為啥要連網絡調試助手的網啊?這是因為如果你連家中的網,請問你如何給你家的路由器發送數據啊!你怎么知道路由器接收到了數據啊!路由器又咋給你發送數據啊!你又咋接收數據啊!我們這里用網絡調試助手的目的就是讓網絡調試助手來代替路由器局域網。TCP Server就是服務端的意思也是就是服務器。至于為啥用串口調試助手我就不用說了吧,只有你在串口助手上調試好了,我們才用單片機的串口結合ESP8266共同代替客服端,也就不需要調試助手了。
所以說,我們一定要在串口調試助手上把相關的數據調通了,把原理過程搞懂了之后我們再去搞單片機程序,再去搭建你的服務器而不是用網絡調試助手代替了。怎么樣現在明白了吧!
開啟透傳傳輸(AT+CIPMODE=1)
前面在使用TCP進行數據發送時,在每次發送數據之前都要指定發送數據的長度,而且在接收到數據之后,還會有+IPD,< len >的前綴,這樣很不方便進行數據的處理,因此我們可以使用AT+CIPMODE=1指令開啟透傳模式,開啟透傳模式后只需要在第一次發送數據時使用ATD+CIPSEND指令來告訴ESP8266開始透傳發送,隨后我們直接發送想要的數據即可,在接收到數據時,也沒有了+IPD,< len >前綴。
下面就是ESP8266連接當前環境的熱點,與服務器建立TCP連接,開啟透傳模式傳輸數據的過程,所有的字符和標點必須是英。
(1)設置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)開始透傳發送:AT+CIPSEND
(6)串口調試助手發送:hello I m TCP Client!
(7)網絡調試助手發送:hello I m TCP Server!
如果想要退出透傳發送模式,先發送+++(0x2B 0x2B 0x2B),注意沒有換行符,接著使用AT+CIPMODE=0指令退出透傳模式,恢復到默認傳輸模式。如果不退出透傳模式,那么在透傳模式下就不能發送AT指令了,它會默認為字符串發送。
6、使用SmartConfig為設備配網
前面使用了AT+CWJAP指令來主動連接家中的WIFI,但是在大多數的物聯網產品中,缺少輸入WIFI密碼的輸入設備,如:鍵盤,更不能將程序交給用戶去修改家中的WIFI熱點名和密碼,在真正的項目開發中使用最多的方法就是通過一顆按鍵來使設備進入某種模式,并使用手機將當前WIFI的密碼告知該設備來實現WIFI配網,這種模式就是SmartConfig。在該模式下,ESP8266會監聽指定端口的UDP廣播包,如果收到符合規定格式的廣播包后會對其進行解析并獲得WIFI的SSID和PWD,然后自動連接獲取到的WIFI熱點,從而實現WIFI配網。
智能配網需要三個設備:家中的路由器、WIFI模塊、手機。模塊處于station模式,手機連接好家中的wifi。這個具體的工作的原理是:我們需要將wifi配置為station模式。因為默認的是ap模式,然后要保證手機連接到家中的路由器熱點。手機上面的第一行是我們手機此時連接的這個熱點名,下面第一行需要用戶去手動的輸入路由器熱點對應的密碼,下面會有一個按鍵就寫著叫配網(連接),那么當我們點擊這個配網之后,手機則會以UDP的這種傳輸的方式。向某個端口號或某個IP地址當中去廣播。廣播內容是廠商自己封裝的一個數據幀結構,廣播的時候就不用去指定具體的IP地址,每個模組可能默認是不同的。只要指定賬號,當我按下配網的這個按鈕之后,此時它會UDP廣播的形式向外連續的去發送一串兒廠商約定好的一個數據幀結構,比如說前面對應的是廠商的這個ID,后面跟的是這個熱點名,后面跟著的是這個熱點密碼等。當然,也可以對它進行一些加密處理,如果此時我們通過按下這個。用點上面的某個按鍵,比如說是配置了我們這個wifi模組,進入了smartconfig這個配網模式。這個時候wifi模塊會處于一個監聽的狀態。比如udp的協議監聽8080端口上面這個數據。如果我收到了這一塊兒有效的數據,那么他會將這里面有用的熱點名和密碼摘出來,然后使用類似透傳模式這種功能,內部的將它連接到指定的熱點上面,就實現了一鍵配網的過程。知道了ESP8266模塊如何用了之后,接下來我們就要用STM32和ESP8266來實現與服務器的之間的數據收發!
我們說到了ESP8266的AT指令集的使用。本來今天要講一下MQTT協議的,但考慮到物聯網知識體系的完整性,決定還是先說一下物聯網智能家居的控制過程和流程,以及關于MQTT協議中的訂閱和發布是什么意思。就算是下一章的前奏吧,請大家耐心看完
簡單地說,我們最終實現的目的,是要用STM32+ESP8266外加傳感器和繼電器來控制家中的開關,以及得到家中的各個電器的運行狀態。其原理是家里的電器先接帶STM32+ESP8266+繼電器的智能插座,智能插座再接家里的插座,這樣只要控制ESP8266的這個插座(類似中介)就能控制家里的任何電器。
下面這張圖就是控制方式,通過家用的路由器將各個電器和手機聯系起來了,手機可以通過路由器控制各個掛載在路由器上的器件,這是比較常用的模式。
【二】一般來說,把手機叫做上位機,控制器叫做下位機,難道這就是我們常說的物聯網嗎?準確地說,這是不對的。畢竟只能圍繞著這個路由器,有一定的局限性。
比如,你到公司才想起忘了關家里的燈,那么只能跑回家,運氣好的話,在樓下就能連到家里的路由器,然后再通過手機app關燈。這時候你想,如果能在任何地方控制家里的電器該多好,要是真有這樣的功能,比如你冬天回家前可以先把家里的空凋打開……
我們這個項目就是ESP8266連接家中的路由器的網,手機連接的是4/5G網,這樣你就能在家中設備不斷電、不斷網的情況下,在任意地方來控制你家中的用電器設備了。
一、理論知識
那么,怎么樣才能讓你在任何地方控制家里的電器(當然提前還是要有網)?
我們先來看下面這張圖,跟原來不一樣的地方是用云服務器代替了家里的路由器,就這么簡單!
那么,什么是云服務器?云服務器又在哪?你就把它當作天上的一朵云就好了(阿里云、騰訊云),反正就是不管你的手機,還是別的什么設備,只要能連網就可以連接云服務器。
那么,連上服務器后,是不是就能直接控制了?當然可以!
剛學單片機的小伙伴肯定玩過串口實驗,從單片機發送字母xiaoshidi,串口調試助手就收到字母xiaoshidi,覺得很有趣。但有時候你會發現,如果你的串口通信的函數寫的不好,或者有誤的時候,就會出現通信錯誤,比如接收的數據是亂碼等,那么它的可靠性就不是很好了。
到底什么叫可靠性不好呢?比如這邊發過去的時候是xiaoshidi,運氣不好的話,那邊只可能收到的是shidi,這樣就會出事。所以,我們也不能直接向云服務器發送個簡單指令去控制下位機,需要有一定的約定。
比如,事先告訴服務器我要發送9個字母過來了,云服務器收到后就知道了,如果接收xiaoshidi,一般來說是正確接收了;如果只收到shidi,說明丟了4個字母,這就是我們常說的丟包。那么,這樣的約定就是我們常說的協議!
有句話叫“沒有物聯網協議就沒有智能安全”,其實關鍵就是協議,在物聯網中常用的就是MQTT協議。那么,為什么不用我們常見的http協議呢?只能自己百度了。這邊簡單介紹一下MQTT協議的原理,因為只要會MQTT,就能玩轉物聯網。
我們先來看個例子:
比如,我在微博里關注了“曉艷考研”,那么當“曉艷考研”發了一條微博后,我就能收到。為什么能收到呢?是因為我關注它了,我想這些玩微博的小伙伴都知道。
下面,我再用圖表示一下:
好了,到這邊其實已經把MQTT協議的原理講清楚了。“曉艷考研”相當于手機,我相當于單片機(控制器),如下圖所示:這樣的話,就實現了手機控制單片機的功能!在微博中,只有我關注“曉艷考研”這個號,才能收到對方發來的微博,那么在MQTT中,單片機訂閱手機的這個主題才能收到手機發送的指令!這樣一來,如果單片機再通過繼電器接家里的電器,手機就可以控制家里任何電器的開關了!
通過這樣的控制方式,就可以解決在單位也能開/關家里電燈的問題了。不過前提是,手機和單片機都能連上云服務器(手機可以用家里的網或者4G就可以連到云服務器,單片機可以通過家里的WIFI就可以連到云服務器)。
這時可能有人會問,在微博里像“曉艷考研”那么有名,有很多人都會關注,比如小雅、小李等等,只要“曉艷考研”發布消息了,關注的人都能收到。
在MQTT協議中也是如此,只要單片機1、單片機2、單片機3等都訂閱了手機這個主題,那么只要手機發指令,就能控制各個單片機,那么也就是能控制家里的各個電器。有的小伙伴腦子轉的溜,感覺這樣控制是有問題的。因為這樣的話,手機是統一控制了家里的電器,總不能都一起開、一起關吧?
在微博有個功能,叫@。雖然我、小雅、小李都關注了“曉艷考研”,但“曉艷考研”在發布消息的時候還能@我,那么在MQTT協議中也是一樣,也能@某個控制器。這樣的話,就能單獨控制某個功能了。關于MQTT理論,我們先說到這兒,其實還有很多玩法,比如在微博里“曉艷考研”也關注了我呢?這個有什么用?這樣可以用控制器采集信息上傳到我們的手機了!那就可以采集家中的環境數據上發到你的手機。
二、實現部分
根據下面這張圖,我們要做三部分:單片機、云服務器、手機。
?
1、單片機
一般來說,單片機也叫作控制器,或者下位機。我們這里用的是STM32單片機。
這時有人會問,為什么不用51單片機,或者arduino?因為現在用STM32的人太多了,arduino又體現不出你是一個電子信息專業的,51就不用說了。
可能又有人說,你為啥不用esp32,本來就可以當一塊單片機,搞個STM32豈不是太麻煩?
此言差矣!我們這里是把ESP8266當做一個模塊使用,我僅僅用STM32的串口就可以控制它連網。但如果單單只用ESP32的話,就大大增加了開發的難度,也就是我們通常說的SDK開發,而且學習的同時,又能鞏固單片機的知識,搞SDK確實不適合初學者。
最后,我們的MQTT協議轉換成C語言代碼已經有前輩寫好了,我們的目的就是學會它,學會反向學習,才能增加你對新事物的學習興趣。MQTT協議是現成的,拿來用即可!
在理論部分提到的MQTT協議是整個物聯網的核心,所以單片機、手機和云服務器都要有這協議。這就好比三個中國人在聊天,一個日本人過來聽,他根本聽不懂,因為他沒有“中文”這個能力。所以,控制器也要有這個解析協議的能力。
2、服務器
服務器可以理解成一臺普通的電腦,只是它的性能比較穩定不容易死機。目前服務器有很多,做得比較大的像騰訊云、阿里云等等,購買服務器也是個坑,大家需謹慎!前期的話,大家學習不用買,登錄生活物聯平臺用現成的,后面我會講到。
3、手機
一般把手機也叫上位機,上位機還有電腦、平板等等,實驗中是用手機發送命令來控制我們的單片機。那么手機能打開直接能操作嗎?顯然不能,需要編寫相應的程序界面。
如果你是安卓手機,可以用android studio軟件編寫相應的app程序。當然,前期的話,大家不要去想著做一個app,難度還是蠻大的。
【三】
在學習MQTT之前,我們要明白MQTT通訊是通過很多的報文組成的,這就好比二戰時期發電報進行兩軍之間的通信。這個報文呢,主要由三部分組成:固定報文+可變報文+有效載荷,這是官方起的名字,你可以把它理解為開頭+正文+結尾,這樣就好理解多了是吧?!
基本在MQQTT中,所有的報文都由這三部分組成。比如今天要說的Connect控制報文,顧名思義就是客戶端(ESP8266)請求與服務端(阿里云服務器)建立連接的報文。
啥意思呢?這就好比你第一次去你女朋友家,你要首先打一個電話(Connect控制報文)征得叔叔阿姨的同意啊!叔叔阿姨同意之后(服務器確認建立連接)你才能去對吧,如果不同意或者電話沒打通你就不能去你女朋友家啊,就算去了也不招待見對吧!
00:22
客戶端到服務端的網絡連接建立后,客戶端發送給服務端的第一個報文必須是connect報文(因為客戶端和服務端必須要建立連接后才能進行通信)。1、CONNECT控制報文主要由三部分組成:固定報頭、可變報頭、有效載荷。
2、假設我們得到了固定報頭是“liuyao”、可變報頭是“iloveyou”、有效載荷是“zhuxiaoya”。我們要把這些字母轉換成對應的16進制。然后再把它們串聯起起來就得到。
1、固定報頭
固定報頭包含兩個字節,第一個字節是固定的:0x10,第二個字節是是剩余長度字段,剩余長度等于可變報頭的長度(10字節)加上有效載荷的長度。最終固定報頭:綜上可得固定報頭為:10 ??(??我們在后面的實驗會提到,先不著急)。
2、可變報頭
可變報頭有四部分組成,協議名、協議級別、連接標志、保持連接。大家不要糾結為啥由這四部分組成,這是人家寫這個協議的人規定的,你只要搞清楚這四部分對應的編碼是啥就可以了,其余的四個字:不要糾結。2.1 協議名
2.2 協議級別
2.3 連接標志
2.4 保持連接
2.5 總結
2.6 最終可變報頭
綜上,我們可得有效報頭為:00 04 4D 51 54 54 04 C2 00 64
3、有效載荷
有效載荷由三部分組成:客服端標識符、用戶名、密碼組成。 ?3.1 原始數據
我們在阿里云物聯網平臺上創建一個設備后,會得下面這三個數據,這三個數據非常重要。{ "ProductKey":"a10zwkUxQUS", "DeviceName":"LY-1", "DeviceSecret":"d8b9915513b05d4de32fbed04566edd8" } 阿里云服務器地址(華東2) : *.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883
客戶端ID :*|securemode=3,signmethod=hmacsha1| 用戶名:* 密碼: clientId*deviceName*productKey#
3.2 加工后的數據
服務器地址:a10zwkUxQUS.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883 客戶端ID :LY-1|securemode=3,signmethod=hmacsha1| 用戶名:LY-1&a10zwkUxQUS 密碼:clientIdLY-1deviceNameLY-1productKeya10zwkUxQUS 經過哈希加密:7a03368e740ff9efb8318c6ba2a0260f2a596f87 哈希加密在線計算網站:http://encode.chahuo.com/之后要將客服端ID、用戶名、經過哈希加密后的密碼轉換成16進制。
客戶端ID :LY-1|securemode=3,signmethod=hmacsha1| 用戶名:LY-1&a10zwkUxQUS 經過哈希加密:7a03368e740ff9efb8318c6ba2a0260f2a596f87
3.3 轉換成16進制
客戶端ID:LY-1|securemode=3,signmethod=hmacsha1|轉換為(16進制): 4C592D317C7365637572656D6F64653D332C73 69676E6D6574686F643D686D6163736861317C一共38個字節就是0x26 最終結果:把0026加到最前面 00264C592D317C7365637572656D6F64653D332C 7369676E6D6574686F643D686D6163736861317C 用戶名:LY-1&a10zwkUxQUS轉換為(16進制): 4C592D31266131307A776B5578515553一共16個字節就是0x10 最終結果:把0010加到最前面 00104C592D31266131307A776B5578515553 經過哈希加密:7a03368e740ff9efb8318c6ba2a0260f2a596f87轉換為(16進制) 3761303333363865373430666639656662383331 3863366261326130323630663261353936663837一共40個字節就是0x28 最終結果:把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
服務器地址:a10zwkUxQUS.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883 4.在發送數據之前要先勾選按16進制發送,之后會在網絡調試助手的接受端出現:20 02 00 00說明發送正常接收正常,如果點擊發送按鈕之后網絡調試助手馬上就斷開或者接收不到數據的話,就說明你發送的數據有問題,請仔細回去好好把報文數據整理一遍,否則不能發送成功。你要知道,錯的不可能是阿里云,也不是MQTT協議,錯的只有你的數據!這里為啥是收到的是20 02 00 00,我們可以去看看數據手冊中3.2小節的connect確認連接請求。 ?這樣我們的客戶端就與阿里云的服務端連接起來了,我們現在可以去看看阿里云官網就會發現此時的LY-1設備處于在線狀態。哈哈,是不是很奇妙啊!
5、斷開鏈接
我們可以看到數據手冊的3.14小節,斷開連接的報文是 E0 00 然后我們在連接狀態下向服務器發從斷開可連接的報文E0 00,這是服務器就會與客戶端斷開,由于斷開后收不到服務器發來的數據。所以網絡調試助手不會接收到任何新消息。 這時,我們再到阿里云官網(刷新一下網頁)就會發現,此時的LY-1設備處于離線狀態。哈哈,是不是很奇妙啊!我們用網絡調試助手的目的就我們現在還沒有單片機和esp8266,但是我們又必須要學習mqtt協議,只有通過網絡調試助手來代替單片機來實現,等我們網絡調試助手都調通了之后我們再把他一直到我們的STM32單片機中就可以了。UDP-----為應用程序提供了一種無需建立連接就可以發送封裝的IP數據包的方法 TCPClient客戶端------單片機(網絡調試助手代替單片機) TCPServer服務端------阿里云
-
單片機
+關注
關注
6039文章
44579瀏覽量
636457 -
STM32
+關注
關注
2270文章
10910瀏覽量
356591
原文標題:爛大街的ESP8266究竟該怎么玩?
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論