文章目錄
1.前言
在ESP8266學習系列中,博主一直使用HTTP協議。HTTP連接屬於短連接,而在物聯網應用中,廣泛應用的卻是MQTT協議。所以,本篇我們將學習Arduino平臺上的MQTT實現庫 —— PubSubClient。
2.MQTT協議
2.1 簡介
MQTT協議(Message Queuing Telemetry Transport),翻譯過來就是遙信消息隊列傳輸,是IBM公司於1999年提出的,現在最新版本是3.1.1。MQTT是一個基於TCP的發佈訂閱協議,設計的初始目的是爲了極有限的內存設備和網絡帶寬很低的網絡不可靠的通信,非常適合物聯網通信。
MQTT屬於應用層協議,基於TCP協議,確保了可靠性。博主在這裏不會去詳細講述MQTT協議(網上講解MQTT協議內容很多,不需要重複),希望有興趣的讀者自行去閱讀,可參考 MQTT中文文檔。
MQTT通信模型如下:
- 發佈方(Publisher)將消息發送到 Broker(MQTT服務器);
- Broker 接收到消息以後,檢查下都有哪些訂閱方訂閱了此類消息,然後將消息發送到這些訂閱方;
- 訂閱方(Subscriber)從 Broker 獲取該消息。
2.2 MQTT消息的QOS
MQTT消息支持三種QOS等級:
- QoS 0:“最多一次”,消息發佈完全依賴底層 TCP/IP 網絡。分發的消息可能丟失或重複。例如,這個等級可用於環境傳感器數據,單次的數據丟失沒關係,因爲不久後還會有第二次發送。
- QoS 1:“至少一次”,確保消息可以到達,但消息可能會重複。
- QoS 2:“只有一次”,確保消息只到達一次。例如,這個等級可用在一個計費系統中,這裏如果消息重複或丟失會導致不正確的收費。
2.3 MQTT控制報文格式
MQTT控制報文由三部分組成:
- 固定報頭(Fixed header),每個MQTT控制報文都包含一個固定報頭;固定報頭指明控制報文類型、標誌Flags、剩餘長度三大部分。
- 可變報頭(Variable header),某些MQTT控制報文包含一個可變報頭部分;它在固定報頭和有效載荷之間;可變報頭的內容根據報文類型的不同而不同,通常包括 報文標識符(Packet Identifier);