一、MQTT通信協(xié)議和工具包簡介
1、MQTT通信等定義:
消息隊(duì)列遙測傳輸( 英語:Message Queuing Telemetry Transport , MQTT )是 ISO 標(biāo)準(zhǔn) (ISO/IEC PRF 20922) 下基于 發(fā)布(Publish)/訂閱(Subscribe) 范式的消息協(xié)議,可 視為“資 料 傳遞 的 橋梁” 。----摘錄維基百科
2、MQTT通訊示意圖

上圖是MQTT的實(shí)際使用案例
將上圖簡化后的系統(tǒng)結(jié)構(gòu)圖如下圖:

3、MQTT系統(tǒng)組成
系統(tǒng)包含兩個(gè)部分:
客戶端(Client):需要發(fā)布或訂閱消息的終端,可以是智能終端,傳感器,或者是數(shù)據(jù)庫,主要功能如下:
(1)發(fā)布其他客戶端需要訂閱的信息;
(2)訂閱其它客戶端發(fā)布的消息;
(3)退訂或刪除應(yīng)用程序的消息;
(4)斷開與服務(wù)器連接。
服務(wù)器:(Server/Broker):專門用于進(jìn)行設(shè)備注冊(cè)和消息轉(zhuǎn)發(fā),稱為"消息代理"(Broker),具體有如下功能:
(1)接受來自客戶的網(wǎng)絡(luò)連接;
(2)接受客戶發(fā)布的應(yīng)用信息;
(3)處理來自客戶端的訂閱和退訂請(qǐng)求;
(4)向訂閱的客戶轉(zhuǎn)發(fā)應(yīng)用程序消息。
4、MQTT通信方式:
Client之間的通訊可以是一對(duì)一,一對(duì)N,也可以是N對(duì)一。
二、MQTT通信范例
1、MQTT通訊底層方式
范例提供了2種通訊方式,TCP/IP和websocket,底層都是TCP/IP,不過websocket是對(duì)TCP/IP的封裝。
2、MQTT所需工具包
具體安裝包如下圖,在VIPM里面安裝相應(yīng)的工具包和附加工具包,共享的代碼也包含離線安裝包。

上面工具包里包含了Client和Broker,通過依賴注入的形式,改變通信類型,提供的范例是TCP/IP和websocket兩套通信模式。

其中還可以使用通用的mqtt 調(diào)試軟件mosquito調(diào)試TCP/IP,但是這個(gè)不能調(diào)試websocket客戶端。打開命令為 mosquito -d -v.這個(gè)調(diào)試工具在代碼的共享,也可到網(wǎng)上下載。

三、MQTT通信范例
1、軟件擴(kuò)展
為了監(jiān)聽底層通信報(bào)文,在項(xiàng)目中創(chuàng)建了兩個(gè)類TCP Pro和WebSocket Pro分別繼承Connect Tcp和WebSocketsConnect,分別添加一個(gè)Name屬性并重寫Read incoming Bytes和Write Incoming Biytes,使用了我上一章介紹的工具,Consol FGV對(duì)實(shí)時(shí)報(bào)文進(jìn)行監(jiān)控。

重寫讀者類,監(jiān)聽報(bào)文


重寫后通信接口UML關(guān)系圖:

2、為客戶端添加自動(dòng)斷開后自動(dòng)停止事件,這里將庫里的私有方法設(shè)置成公共方法,然后使用Close Seccion事件來自動(dòng)停止,如果不想改變工具包,可以刪除相應(yīng)的代碼不影響整體功能。
將私有文件夾設(shè)置乘公共文件夾

3、TCP MQTT范例演示
注意先啟動(dòng)服務(wù)器再啟動(dòng)客戶端
啟動(dòng)Broker

啟動(dòng)Clent1

啟動(dòng)Clent2

服務(wù)端可以看到已經(jīng)啟動(dòng)了兩個(gè)客戶端。

發(fā)布V1消息,訂閱消息V2

發(fā)布V2消息,訂閱消息V1

同時(shí)訂閱V1,V2兩個(gè)消息

可以自行嘗試下取消訂閱相關(guān)消息
4、websocket MQTT范例演示
注意先啟動(dòng)服務(wù)器再啟動(dòng)客戶端
啟動(dòng)client1

啟動(dòng)client2

websocketBroker

?
?可以嘗試訂閱和取消訂閱相關(guān)消息
5、練習(xí):
是否可以使用這個(gè)工具包,開發(fā)一個(gè)建議的局域網(wǎng)聊天軟件,這樣可以更好的學(xué)習(xí)這個(gè)工具包的用法:)。
四、MQTT通訊原理簡介
1、MQTT啟動(dòng)和連接

1.1、首先啟動(dòng)服務(wù)器,服務(wù)器啟動(dòng)后會(huì)啟動(dòng)一個(gè)異步線程監(jiān)聽是否有客戶端連接到服務(wù)器端口
1.2、啟動(dòng)客戶端,鏈接到服務(wù)器后向服務(wù)發(fā)送鏈接信息,服務(wù)端檢測服務(wù)信息正確后返回連接信息,如果不正確就會(huì)斷開連接。
1.3、客戶端長期沒有給服務(wù)發(fā)數(shù)據(jù)時(shí)需要向服務(wù)器發(fā)送心跳消息,如果不發(fā)送超時(shí),服務(wù)器會(huì)斷開客戶端。
LabVIEW的范例中的服務(wù)器沒有這個(gè)功能,mosquito服務(wù)器有這個(gè)功能,需要了解的讀者可以自行嘗試
2、MQTT通信方式

1.1、客戶端需要某個(gè)主題A消息時(shí)向服務(wù)器訂閱主題A,當(dāng)客戶端0向服務(wù)器發(fā)送主題A時(shí),訂閱了主題A的客戶端都會(huì)收到客戶端0的主題,沒有訂閱的客戶端不會(huì)收到主題A。
1.2、當(dāng)某個(gè)客戶端不需要主題A時(shí)可取消訂閱主題A。
五、需要安裝的軟件、工具包和庫
1、LabVIEW2015中文版
2、mqtt工具包集合
3、mosquitto服務(wù)器安裝包
審核編輯:湯梓紅
-
傳感器
+關(guān)注
關(guān)注
2573文章
53934瀏覽量
781812 -
通信協(xié)議
+關(guān)注
關(guān)注
28文章
1065瀏覽量
41758 -
客戶端
+關(guān)注
關(guān)注
1文章
304瀏覽量
17353 -
MQTT
+關(guān)注
關(guān)注
5文章
710瀏覽量
24575
原文標(biāo)題:LabVIEW的編程之道-MQTT工具包使用詳解
文章出處:【微信號(hào):LabVIEW的編程之道,微信公眾號(hào):LabVIEW的編程之道】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
通信協(xié)議解讀:CoAP/LWM2M協(xié)議和MQTT協(xié)議
TCP通信協(xié)議-Labview上位機(jī)
全志科技T3開發(fā)板(4核ARM Cortex-A7)——MQTT通信協(xié)議案例
全志T3+Logos FPGA開發(fā)板——MQTT通信協(xié)議案例
【理論】通信的硬件層協(xié)議和軟件層協(xié)議
S7通信協(xié)議介紹 s7協(xié)議和profinet協(xié)議區(qū)別
全志T3開發(fā)板 ARM CortexA7——MQTT通信協(xié)議
NPOI WEG報(bào)表工具包簡介

MQTT通信協(xié)議和工具包簡介
評(píng)論