當(dāng)前位置:首頁 > 公眾號(hào)精選 > wenzi嵌入式軟件
[導(dǎo)讀]大家都知道,MQTT協(xié)議在物聯(lián)網(wǎng)中很常用,如果你對(duì)此還不是很了解,相信這篇文章可以帶你入門。

大家好,我是小麥,最近做了一個(gè)物聯(lián)網(wǎng)的項(xiàng)目,順便總結(jié)一下MQTT協(xié)議。大家都知道,MQTT協(xié)議在物聯(lián)網(wǎng)中很常用,如果你對(duì)此還不是很了解,相信這篇文章可以帶你入門。



  • mqtt協(xié)議


  • 1 MQTT協(xié)議特點(diǎn)


    • 發(fā)布和訂閱


    • QoS(Quality of Service levels)


  • 2 MQTT 數(shù)據(jù)包結(jié)構(gòu)


    • 2.1 MQTT固定頭


    • 2.2 MQTT可變頭 / Variable header


    • 2.3 Payload消息體


  • 3 環(huán)境搭建


    • 3.1 MQTT服務(wù)器搭建


    • 3.2 MQTT Client


  • 4 總結(jié)


mqtt協(xié)議

MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測(cè)傳輸協(xié)議),是一種基于發(fā)布/訂閱(publish/subscribe)模式的“輕量級(jí)”通訊協(xié)議,該協(xié)議構(gòu)建于TCP/IP協(xié)議上,由IBM在1999年發(fā)布。


MQTT最大優(yōu)點(diǎn)在于,用極少的代碼和有限的帶寬,為連接遠(yuǎn)程設(shè)備提供實(shí)時(shí)可靠的消息服務(wù)


作為一種低開銷、低帶寬占用的即時(shí)通訊協(xié)議,使其在物聯(lián)網(wǎng)、小型設(shè)備、移動(dòng)應(yīng)用等方面有較廣泛的應(yīng)用。


1 MQTT協(xié)議特點(diǎn)

MQTT是一個(gè)基于客戶端-服務(wù)器的消息發(fā)布/訂閱傳輸協(xié)議。


MQTT協(xié)議是輕量、簡單、開放和易于實(shí)現(xiàn)的,這些特點(diǎn)使它適用范圍非常廣泛。在很多情況下,包括受限的環(huán)境中,如:機(jī)器與機(jī)器(M2M)通信和物聯(lián)網(wǎng)(IoT)。


其在,通過衛(wèi)星鏈路通信傳感器、偶爾撥號(hào)的醫(yī)療設(shè)備、智能家居、及一些小型化設(shè)備中已廣泛使用。


MQTT協(xié)議當(dāng)前版本為,2014年發(fā)布的MQTT v3.1.1。除標(biāo)準(zhǔn)版外,還有一個(gè)簡化版MQTT-SN,該協(xié)議主要針對(duì)嵌入式設(shè)備,這些設(shè)備一般工作于TCP/IP網(wǎng)絡(luò),如:ZigBee。


MQTT 與 HTTP 一樣,MQTT 運(yùn)行在傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議 (TCP/IP) 堆棧之上。


MQTT OSI

發(fā)布和訂閱

MQTT使用的發(fā)布/訂閱消息模式,它提供了一對(duì)多的消息分發(fā)機(jī)制,從而實(shí)現(xiàn)與應(yīng)用程序的解耦。


這是一種消息傳遞模式,消息不是直接從發(fā)送器發(fā)送到接收器(即點(diǎn)對(duì)點(diǎn)),而是由MQTT server(或稱為 MQTT Broker)分發(fā)的。


MQTT 服務(wù)器是發(fā)布-訂閱架構(gòu)的核心。


它可以非常簡單地在Raspberry Pi或NAS等單板計(jì)算機(jī)上實(shí)現(xiàn),當(dāng)然也可以在大型機(jī)或 Internet 服務(wù)器上實(shí)現(xiàn)。


服務(wù)器分發(fā)消息,因此必須是發(fā)布者,但絕不是訂閱者!


客戶端可以發(fā)布消息(發(fā)送方)、訂閱消息(接收方)或兩者兼而有之。


客戶端(也稱為節(jié)點(diǎn))是一種智能設(shè)備,如微控制器或具有 TCP/IP 堆棧和實(shí)現(xiàn) MQTT 協(xié)議的軟件的計(jì)算機(jī)。


消息在允許過濾的主題下發(fā)布。主題是分層劃分的 UTF-8 字符串。不同的主題級(jí)別用斜杠/作為分隔符號(hào)。


我們來看看下面的設(shè)置。


  • 光伏發(fā)電站是發(fā)布者(Publisher)。


  • 主要主題(Topic)級(jí)別是"PV",這個(gè)工廠發(fā)布兩個(gè)子級(jí)別"sunshine"和"data";


  • "PV/sunshine"是一個(gè)布爾值(true/fault,也可以是 1/0),充電站需要它來知道是否應(yīng)該裝載電動(dòng)汽車(僅在陽光普照時(shí) :))。


  • 充電站(EVSE)是訂閱者,訂閱"PV/sunshine"從服務(wù)器獲取信息。


  • "PV/data"另一方面,以 kW 為單位傳輸工廠產(chǎn)生的瞬時(shí)功率,并且該主題可以例如通過計(jì)算機(jī)或平板電腦訂閱,以生成一天內(nèi)傳輸功率的圖表。


這就是一個(gè)簡單的MQTT的應(yīng)用場(chǎng)景,具體如下圖所示;


MQTT 發(fā)布和訂閱

QoS(Quality of Service levels)

服務(wù)質(zhì)量是 MQTT 的一個(gè)重要特性。當(dāng)我們使用 TCP/IP 時(shí),連接已經(jīng)在一定程度上受到保護(hù)。但是在無線網(wǎng)絡(luò)中,中斷和干擾很頻繁,MQTT 在這里幫助避免信息丟失及其服務(wù)質(zhì)量水平。這些級(jí)別在發(fā)布時(shí)使用。如果客戶端發(fā)布到 MQTT 服務(wù)器,則客戶端將是發(fā)送者,MQTT 服務(wù)器將是接收者。當(dāng)MQTT服務(wù)器向客戶端發(fā)布消息時(shí),服務(wù)器是發(fā)送者,客戶端是接收者。


QoS  0


這一級(jí)別會(huì)發(fā)生消息丟失或重復(fù),消息發(fā)布依賴于底層TCP/IP網(wǎng)絡(luò)。即:<=1


QoS  1


QoS 1 承諾消息將至少傳送一次給訂閱者。


QoS  2


使用 QoS 2,我們保證消息僅傳送到目的地一次。為此,帶有唯一消息 ID 的消息會(huì)存儲(chǔ)兩次,首先來自發(fā)送者,然后是接收者。QoS 級(jí)別 2 在網(wǎng)絡(luò)中具有最高的開銷,因?yàn)樵诎l(fā)送方和接收方之間需要兩個(gè)流。


2 MQTT 數(shù)據(jù)包結(jié)構(gòu)

  • 固定頭(Fixed header),存在于所有MQTT數(shù)據(jù)包中,表示數(shù)據(jù)包類型及數(shù)據(jù)包的分組類標(biāo)識(shí);
  • 可變頭(Variable header),存在于部分MQTT數(shù)據(jù)包中,數(shù)據(jù)包類型決定了可變頭是否存在及其具體內(nèi)容;
  • 消息體(Payload),存在于部分MQTT數(shù)據(jù)包中,表示客戶端收到的具體內(nèi)容;
整體MQTT的消息格式如下圖所示;


2.1MQTT固定頭

固定頭存在于所有MQTT數(shù)據(jù)包中,其結(jié)構(gòu)如下:


下面簡單分析一下固定頭的消息格式;


MQTT消息類型 / message type

**位置:**byte 1, bits 7-4。


4位的無符號(hào)值,類型如下:


名稱 流方向 描述
Reserved 0 不可用 保留位
CONNECT 1 客戶端到服務(wù)器 客戶端請(qǐng)求連接到服務(wù)器
CONNACK 2 服務(wù)器到客戶端 連接確認(rèn)
PUBLISH 3 雙向 發(fā)布消息
PUBACK 4 雙向 發(fā)布確認(rèn)
PUBREC 5 雙向 發(fā)布收到(保證第1部分到達(dá))
PUBREL 6 雙向 發(fā)布釋放(保證第2部分到達(dá))
PUBCOMP 7 雙向 發(fā)布完成(保證第3部分到達(dá))
SUBSCRIBE 8 客戶端到服務(wù)器 客戶端請(qǐng)求訂閱
SUBACK 9 服務(wù)器到客戶端 訂閱確認(rèn)
UNSUBSCRIBE 10 客戶端到服務(wù)器 請(qǐng)求取消訂閱
UNSUBACK 11 服務(wù)器到客戶端 取消訂閱確認(rèn)
PINGREQ 12 客戶端到服務(wù)器 PING請(qǐng)求
PINGRESP 13 服務(wù)器到客戶端 PING應(yīng)答
DISCONNECT 14 客戶端到服務(wù)器 中斷連接
Reserved 15 不可用 保留位

標(biāo)識(shí)位 / DUP

**位置:**byte 1, bits 3-0。


在不使用標(biāo)識(shí)位的消息類型中,標(biāo)識(shí)位被作為保留位。如果收到無效的標(biāo)志時(shí),接收端必須關(guān)閉網(wǎng)絡(luò)連接:


數(shù)據(jù)包 標(biāo)識(shí)位 Bit 3 Bit 2 Bit 1 Bit 0
CONNECT 保留位 0 0 0 0
CONNACK 保留位 0 0 0 0
PUBLISH MQTT 3.1.1使用 DUP1 QoS2 QoS2 RETAIN3
PUBACK 保留位 0 0 0 0
PUBREC 保留位 0 0 0 0
PUBREL 保留位 0 0 0 0
PUBCOMP 保留位 0 0 0 0
SUBSCRIBE 保留位 0 0 0 0
SUBACK 保留位 0 0 0 0
UNSUBSCRIBE 保留位 0 0 0 0
UNSUBACK 保留位 0 0 0 0
PINGREQ 保留位 0 0 0 0
PINGRESP 保留位 0 0 0 0
DISCONNECT 保留位 0 0 0 0
  • DUP:發(fā)布消息的副本。用來在保證消息的可靠傳輸,如果設(shè)置為 1,則在下面的變長中增加MessageId,并且需要回復(fù)確認(rèn),以保證消息傳輸完成,但不能用于檢測(cè)消息重復(fù)發(fā)送。


  • QoS發(fā)布消息的服務(wù)質(zhì)量(前面已經(jīng)做過介紹),即:保證消息傳遞的次數(shù)


    • 00:最多一次,即:<=1
    • 01:至少一次,即:>=1
    • 10:一次,即:=1
    • 11:預(yù)留
  • RETAIN:發(fā)布保留標(biāo)識(shí),表示服務(wù)器要保留這次推送的信息,如果有新的訂閱者出現(xiàn),就把這消息推送給它,如果設(shè)有那么推送至當(dāng)前訂閱者后釋放。


剩余長度(Remaining Length)

位置:byte 1。


固定頭的第二字節(jié)用來保存變長頭部和消息體的總大小的,但不是直接保存的。這一字節(jié)是可以擴(kuò)展,其保存機(jī)制,前7位用于保存長度,后一部用做標(biāo)識(shí)。當(dāng)最后一位為 1時(shí),表示長度不足,需要使用二個(gè)字節(jié)繼續(xù)保存。例如:計(jì)算出后面的大小為0


2.2MQTT可變頭 / Variable header

MQTT數(shù)據(jù)包中包含一個(gè)可變頭,它駐位于固定的頭和負(fù)載之間。可變頭的內(nèi)容因數(shù)據(jù)包類型而不同,較常的應(yīng)用是做為包的標(biāo)識(shí):


Bit 7  — 0
byte 1 包標(biāo)簽符(MSB)
byte 2… 包標(biāo)簽符(LSB)
很多類型數(shù)據(jù)包中都包括一個(gè)2字節(jié)的數(shù)據(jù)包標(biāo)識(shí)字段,這些類型的包有:


PUBLISH (QoS > 0)、PUBACK、PUBREC、PUBREL、PUBCOMP、


SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK


2.3Payload消息體

Payload消息體是MQTT數(shù)據(jù)包的第三部分,CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE四種類型的消息 有消息體:


  • CONNECT,消息體內(nèi)容主要是:客戶端的ClientID、訂閱的Topic、Message以及用戶名和密碼


  • SUBSCRIBE,消息體內(nèi)容是一系列的要訂閱的主題以及QoS。


  • SUBACK,消息體內(nèi)容是服務(wù)器對(duì)于SUBSCRIBE所申請(qǐng)的主題及QoS進(jìn)行確認(rèn)和回復(fù)。


  • UNSUBSCRIBE,消息體內(nèi)容是要訂閱的主題。


3 環(huán)境搭建

介紹完基礎(chǔ)理論部分,下面在Windows平臺(tái)上搭建一個(gè)簡單的MQTT應(yīng)用,進(jìn)行簡單的應(yīng)用,整體架構(gòu)如下圖所示;


[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-ScRucIVO-1625480723109)(架構(gòu)圖.png)]


3.1 MQTT服務(wù)器搭建

目前MQTT代理的主流平臺(tái)有下面幾個(gè):


  • Mosquitto:https://mosquitto.org/
  • VerneMQ:https://vernemq.com/
  • EMQTT:http://emqtt.io/
本文將使用 Mosquitoo 進(jìn)行測(cè)試,進(jìn)入到安裝頁面,下載自己電腦的系統(tǒng)所適配的程序;


下載頁面安裝成功之后,進(jìn)入到安裝路徑下,找到mosquitto.exe;


[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-YXZupgOv-1625480723111)(image-20210705171401654.png)]


按住Shift,右鍵鼠標(biāo)點(diǎn)擊空白處,然后打開Powershell,正常打開一個(gè)終端軟件即可;


  • 輸入./mosquitto.exe -h可以查看相應(yīng)的幫助;


  • 輸入./mosquitto.exe -p 10086,就開啟了MQTT服務(wù),監(jiān)聽的地址是127.0.0.1,端口是10086;


具體如下圖所示;


3.2 MQTT Client

服務(wù)器搭建好了,下面就是開啟客戶端,進(jìn)行發(fā)布和訂閱,這樣就可以傳輸相應(yīng)的消息。


這里我使用的是自己編譯了一個(gè)QT mqtt client程序,是基于Qt的官方庫進(jìn)行編譯的,下面打開這個(gè)軟件,下一期簡單介紹一下如何完成這個(gè)客戶端,并設(shè)置好相應(yīng)參數(shù):


  • 地址:127.0.0.1


  • 端口:10086


然后訂閱主題,就可以互相發(fā)送數(shù)據(jù)了,具體如下圖所示;


結(jié)合前面的圖片來看,整體的架構(gòu)如下所示;


4 總結(jié)

本文簡單介紹了MQTT協(xié)議的工作原理,以及相應(yīng)的協(xié)議格式,簡單介紹了協(xié)議的一些細(xì)節(jié),具體舉出了相應(yīng)的應(yīng)用場(chǎng)景,作者水平和能力有限,文中難免存在錯(cuò)誤和紕漏,請(qǐng)大佬不吝賜教。


本期就到此結(jié)束了,我是小麥,我們下期再見。




本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉