1.項目介紹
本項目基于物聯量平臺遠程的視頻監控項目,通過MQTT協議實現兩個設備間的數據上報與訂閱。通過這個項目來演示,兩個MQTT設備如何互相訂閱,進行消息流轉。在阿里云服務器上創建2個設備,分為為設備A和設備B;設備A負責采集本地攝像頭畫面上傳,設備B負責接收設備A上傳的數據然后解析顯示出來。在阿里云服務器上需要配置云產品流轉,讓設備A的數據上傳后自動發送給設備B。這樣就完成了視頻畫面數據的流轉。不過因為阿里云的最大數據限制,每次最大發送10240字節的數據。
1.1 硬件平臺
操作系統:Ubuntu18.04
硬件設備:電腦自帶或USB免驅攝像頭(V4L2框架)
服務器:阿里云物聯網平臺(基于MQTT協議)
圖像渲染:GTK2.0
1.2 開發流程
設備A:獲取攝像頭的數據–>縮放成240*320–>編碼成JPEG格式—>base64-編碼–>組合成MQTT報文–>發布到服務器。
??設備B:訂閱設備A上傳的數據–>base64解碼–>解碼JPEG數據格式–>GTK圖像渲染。
2.MQTT協議介紹
MQTT(消息隊列遙測傳輸)是ISO 標準(ISO/IEC PRF 20922)下基于發布/訂閱范式的消息協議。它工作在 TCP/IP協議族上,是為硬件性能低下的遠程設備以及網絡狀況糟糕的情況下而設計的發布/訂閱型消息協議,為此,它需要一個消息中間件?。
MQTT是一個基于客戶端-服務器的消息發布/訂閱傳輸協議。由IBM在1999年發布。MQTT協議是輕量、簡單、開放和易于實現的,這些特點使它適用范圍非常廣泛。在很多情況下,包括受限的環境中,作為一種低開銷、低帶寬占用的即時通訊協議,使其在物聯網、小型設備、移動應用等方面有較廣泛的應用。如:機器與機器(M2M)通信和物聯網(IoT)。其在通過衛星鏈路通信傳感器、偶爾撥號的醫療設備、智能家居、及一些小型化設備中已廣泛使用。
MQTT最大優點在于,用極少的代碼和有限的帶寬,為連接遠程設備提供實時可靠的消息服務。
2.1 MQTT特點
本協議運行在 TCP/IP,或其它提供了有序、可靠、雙向連接的網絡連接上。MQTT屬于應用層協議,它有以下特點:
使用發布/訂閱消息模式,提供了一對多的消息分發和應用之間的解耦。
消息傳輸不需要知道負載內容。
提供三種等級的服務質量: .
QS0:“最多一次”,盡操作環境所能提供的最大努力分發消息。消息可能會丟失。
例如,這個等級可用于環境傳感器數據,單次的數據丟失沒關系,因為不久之后會再次發送。
QS1:“至少一次”,保證消息可以到達,但是可能會重復。
QS2:“僅一次”,保證消息只到達一次。例如,這個等級可用在一個計費系統中,這里如果消息重復或丟失會導致不正確的收費。很小的傳輸消耗和協議數據交換,最大限度減少網絡流量。
在MQTT連接建立時,客戶端需要通過TCP連接到MQTT服務器,并進行握手協商,包括協議版本、客戶端標識符、遺囑消息、 QoS級別等信息,以確保雙方能夠正確地交換數據。一旦握手成功,客戶端和服務器之間就建立了一個持久化的TCP連接,可以隨時進行消息傳輸。
由于TCP協議本身已經提供了一定程度的可靠性保證,因此MQTT協議只需要在TCP的基礎上實現發布/訂閱機制、 QoS級別控制、保留消息等特性即可,從而使得它成為一種輕量級且高效的物聯網通信協議。
2.2 MQTT協議數據量限制
MQTT協議本身沒有限制數據包的大小,但是它需要遵循底層傳輸協議(TCP/IP)的限制和約束。在實際應用中,MQTT協議能夠傳輸的有效數據量是受多種因素影響的,如網絡帶寬、QoS級別、MQTT消息頭部信息等。一般來說,在默認情況下,MQTT協議對于單個消息的有效載荷有一個限制,即不超過256MB。這個限制主要由MQTT協議的消息長度字段決定,該字段的最大值是4字節,因此最大能表示2^32-1個字節的消息長度,即約為4GB。然而,在實際應用中,由于網絡帶寬和設備性能等方面的限制,很難實現傳輸如此巨大的消息。
另外,需要注意的是,如果使用較高級別的QoS,如“至少一次”或“恰好一次”,則MQTT協議會對每條消息進行確認和重傳,這可能會導致更多的網絡流量和延遲。因此,在選擇QoS級別時,需要根據應用場景和網絡環境的實際情況進行優化和調整,以充分利用MQTT協議的特點和優勢。
3.阿里云物聯網平臺搭建
3.1 搭建阿里云物聯網平臺
2.創建產品
3.功能定義, 添加自 定義功能, 發布上線。
4.添加設備
3.2 設備登錄
MQTT 連接阿里云需要三個參數: 客戶端 id、 用戶名、 密碼。 此信息可直接在設備中獲取。
3.3 消息訂閱與消息發布
Topic 是消息發布( Pub) 者和訂閱( Sub) 者之間的傳輸中介。 設備可通過 Topic 實現消息的發送和接收, 從而實現服務端與設備端的通信。 為方便海量設備基于 Topic 進行通信,簡化授權操作, 物聯網平臺定義了產品 Topic 類和設備 Topic。
3.4 數據上報格式
MQTT 上報數據格式為 JSON 格式。 內容格式如下:
發布主題: "/sys/{產品 ID}/{設備名 }/thing/service/property/set"
數據內容格式: {"method":"thing.event.property.post","params":{"image":"hello,world"}}
設備端訂閱消息內容:
訂閱主題: "/sys/{產品 ID}/{設備名 }/thing/event/property/post"
審核編輯黃宇
-
物聯網
+關注
關注
2909文章
44557瀏覽量
372790 -
服務器
+關注
關注
12文章
9123瀏覽量
85328 -
TCP
+關注
關注
8文章
1353瀏覽量
79055 -
MQTT
+關注
關注
5文章
650瀏覽量
22487
發布評論請先 登錄
相關推薦
評論