久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6086|回復: 1
收起左側

Wifi Esp8266 MQTT協議

[復制鏈接]
ID:409908 發表于 2018-10-15 14:42 | 顯示全部樓層 |閱讀模式
                                                                                             物聯網核心之MQTT 簡介
       MQTT,目前物聯網的最主要的協議,基本所有收費的云平臺都是基于MQTT協議,比如機智云,和所有的開放云平臺比如中國移動的oneNet、百度的云平臺也都支持MQTT的接入。雖然MQTT很火,但是目前對MQTT的很少,尤其是在如何移植到嵌入式上來。大部分的平臺商的做法都是跟模塊商合作把MQTT協議集成到WiFi模塊跟GPRS模塊里面,捆綁一銷售,不讓用戶過多的了解物聯網最核心的東西。
    在還沒有深入去了解MQTT協議之前,總以為是非常復雜的東西,畢竟之前一直想深入,但無奈在浩淼的網絡里居然找不到太多實質的資料。隨時自己對物聯網的不斷探索,越來越了解整個物聯網的架構,對MQTT了解越來越深入。在這篇文章中將帶大家先了解MQTT的協議,在后面的文章,再帶大家怎么移植MQTT到STM32上,再到怎么搭建自己的MQTT服務器。
      MQTT的基礎知識這些大家通過百度知道都可以了解到,這里主要深入去剖析MQTT協議的整個通信流程。整個MQTT的知識大家可以去附件里的《MQTT OneNET實現.docx》,這個文檔已經寫的非常詳細,但是如果只是看文字話,大家很難理解。因此我們借助Windows下的MQTT客戶端MQTT.fx跟網絡抓包工具Wireshark來一步步分析MQTT。
名字

流向
描述
CONNECT
1
C->S
客戶端請求與服務端建立連接
CONNACK
2
S->C
服務端確認連接建立
PUBLISH
3
CóS
發布消息
PUBACK
4
CóS
收到發布消息確認
PUBREC
5
CóS
發布消息收到
PUBREL
6
CóS
發布消息釋放
PUBCOMP
7
CóS
發布消息完成
SUBSCRIBE
8
C->S
訂閱請求
SUBACK
9
S->C
訂閱確認
UNSUBSCRIBE
10
C->S
取消訂閱
UNSUBACK
11
S->C
取消訂閱確認
PING
12
C->S
客戶端發送PING(連接保活)命令
PINGRSP
13
S->C
PING命令回復
DISCONNECT
14
C->S
斷開連接
    上面是MQTT的主要的通信協議,MQTT是基于TCP長連接,首先是先跟MQTT服務器建立TCP連接,然后發送登錄請求,要保持長連接,還要定時發心跳包跟服務保持連接。我們先用MQTT.fx來登錄開源的MQTT服務看看。

    安裝好MQTT.fx(注意MQTT.fx是java開發的,電腦要安裝JDK才能安裝打開),一打開里面就默認有一個開源的MQTT服務M2M Eclipse。點開旁邊的齒輪(設置按鈕)可以看服務器的域名m2m.eclipse.org,端口號1833(MQTT的默認端口號),下面還有個Keep Alive Interval就是心跳的時間。再打開Wireshark,選擇要捕獲的網絡接口,然后再過濾器輸入tcp.port==1883后回車,只捕獲1883這個端口號的數據包。再點下MQTT.fx的Connect連接服務器,就可以看到Wireshark捕到的數據


    可以看到MQTT協議中本地給服務器發送了一個Connect登錄請求,然后,服務器回應一個ACK,表示登錄成功。再雙擊Connect Command這條數據包,我們可以看到詳細的數據包數據

    上面的解析出來的MQTT協議包的內部,下面是對應的二進制數據,這里我們可以對照附件上資料去了解協議的內容。看這里,大家想是不是如果自己用TCP,再封裝發送下面的二進制數據就可以完成MQTT的登錄了呢?拿出網絡調試助手來,ping下m2m.eclipse.org得到IP地址,用端口號1883連接,然后發送Wireshark捕到的MQTT登錄協議的二進制數據,可以看到到服務器回應了 20 02 00 00 表示登錄成功。

    再往下Wireshark捕到的數據包,可以看到每隔一定的時間,本地向服務器發送Ping Request心跳包,相應的服務器也會回應Ping Response。

    接下來看MQTT最核心的傳輸協議 Subcribe(定閱)和Publish(推送)。簡單來說就是客戶端口(比如物聯網硬件)Subcribe一個topic(主題)后,其它的客戶端(比如手機)向服務器往這個topic 推送 Payload(有效數據),服務器就會把Payload轉發給定閱這個topic的客戶端(硬件)。這樣就實現了客戶端(手機)通過服務器(MQTT)遠程發送數據給客戶端(物聯網硬件)。一樣用MQTT.fx來實驗。先點Subscribe然后面下面輸入led再點旁邊的Subscribe按鈕來定閱led這個topic。然后回到Publish,一樣在輸入框輸入led這個topic,下面大框就是輸入要推送的數據,輸入on,再點Publish按鈕,就把數據推送出去了。再回到Subcribe界面來可以看到右邊已經收到有推送過來的數據。如果這是硬件收到這個指令,就可以去控制點亮LED,我們就實現遠程控制LED燈。

   想深入了解MQTT這一個過程的話,我們再回到Wireshark,來看看捕獲到的數據

    具體的就不詳細的分析了,大家看附件的文檔來對照就可以很容易了解到。
    最后來了解下QoS(定閱等級),分0、1、2三個等級,簡單來說是等級越高越可靠。QoS0,就是推送之后就完事了,至于對方有沒有收到,收到是什么,數據有沒有丟失,都不管。QoS1的話就
是你收到推送后,你還得返回一個puback給對方,告訴對方收到了,不然對方會以為你沒收到,隔一段時間后重新給你推送,直到你給對方返回一個Puback為止



回復

使用道具 舉報

ID:373684 發表于 2024-1-9 21:50 | 顯示全部樓層
看了大概明白MQTT的原理了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区免费在线视频 | 国产精品欧美精品 | 天天天天天天天干 | 精品福利一区二区三区 | 成人av免费 | 久久精品国内 | 亚洲欧美在线视频 | 日韩免费毛片视频 | 国产高清自拍视频在线观看 | 成人精品影院 | 国产精品日本一区二区不卡视频 | 中文字幕日韩欧美 | 国产成人精品午夜 | 欧美1区2区 | 无码一区二区三区视频 | 国产精品综合视频 | 一区二区三区日韩 | 天天干天天插 | 国产激情自拍视频 | 欧美一级片在线看 | 日韩久久精品 | 亚洲在线 | 日韩中文字幕一区 | 国产在线高清 | 欧美一区在线视频 | 在线国产一区二区三区 | 在线免费观看亚洲 | 国产视频福利在线观看 | 成人二区 | 成年免费大片黄在线观看一级 | 黄色一级片视频 | 成人午夜免费福利视频 | 亚洲播放 | 97超碰成人| 久久久久无码国产精品一区 | 国产一区中文 | 在线免费av电影 | 一区二区三区免费看 | 毛片免费看 | 国产成人精品一区二区三区 | 女生羞羞网站 |