天天看點

【玩轉ESP32】14、esp32 mqtt基礎

系列文章:

【玩轉ESP32】1、開發環境搭建

【玩轉ESP32】2、開發參考資料

【玩轉ESP32】3、點亮LED,Blink,blink,blink

【玩轉ESP32】4、ESP32驅動DHT11

【玩轉ESP32】5、i2c-tools通路i2c裝置

【玩轉ESP32】6、驅動i2c裝置—0.96 OLED

【玩轉ESP32】7、ESP32連接配接wifi

【玩轉ESP32】8、ESP32 Guru MeditationError報錯分析

【玩轉ESP32】9、ESP32 作為TCP用戶端連接配接伺服器(非阻塞接收)

【玩轉ESP32】10、建立使用者分區表,資料讀寫存儲

【玩轉ESP32】11、編譯報錯:esp_bt.h:No such file or directory

【玩轉ESP32】12、esp32序列槽使用

【玩轉ESP32】13、軟體定時器esp_timer使用

1、前言

MQTT(消息隊列遙測傳輸)是ISO 标準(ISO/IEC PRF 20922)下基于釋出/訂閱範式的消息協定。它工作在 TCP/IP協定族上,是為硬體性能低下的遠端裝置以及網絡狀況糟糕的情況下而設計的釋出/訂閱型消息協定,為此,它需要一個消息中間件 。

MQTT是一個基于用戶端-伺服器的消息釋出/訂閱傳輸協定。MQTT協定是輕量、簡單、開放和易于實作的,這些特點使它适用範圍非常廣泛。在很多情況下,包括受限的環境中,如:機器與機器(M2M)通信和物聯網(IoT)。其在,通過衛星鍊路通信傳感器、偶爾撥号的醫療裝置、智能家居、及一些小型化裝置中已廣泛使用。

2、 架構

【玩轉ESP32】14、esp32 mqtt基礎

mqtt的典型架構是Broker(Server)和Client,也就是伺服器和用戶端;

伺服器是消息代理者;

用戶端既可以是消息釋出者(Publish),也可以是訂閱者(Subscribe)。

這裡舉一個不是特别恰當的例子:微網誌,隻有你關注(訂閱)了某個人,某個人釋出(釋出)博文(消息)後,微網誌(代理者/伺服器)就會第一時間給你推送。

MQTT傳輸的消息分為:主題(Topic)和負載(Payload)兩部分;Topic:可以了解為消息的類型;

Payload:可以了解為消息的内容,是指訂閱者具體要使用的内容;

MQTT的消息品質:QoS 0,QoS 1和 QoS 2。

QoS 0:最多分發一次。消息的傳遞完全依賴底層的TCP/IP網絡,協定裡沒有定義應答和重試,消息要麼隻會到達服務端一次,要麼根本沒有到達。

QoS1:至少分發一次。伺服器的消息接收由PUBACK消息進行确認,如果通信鍊路或發送裝置異常,或者指定時間内沒有收到确認消息,發送端會重發這條在消息頭中設定了DUP位的消息。

QoS 2:隻分發一次。這是最進階别的消息傳遞,消息丢失和重複都是不可接受的,使用這個服務品質等級會有額外的開銷。

3、MQTT版本

MQTT-SN v1.2

MQTT 3.1

MQTT 3.1.1

MQTT 5

其中MQTT3.1和MQTT3.1.1是目前最常用的版本。

4、MQTT Servers

Ably MQTT Broker

Apache ActiveMQ :開源

Mosquitto:開源,對應的測試伺服器(https://test.mosquitto.org/)

RabbitMQ:開源

EMQ :開源,國内一家公司開發的

5、MQTT Client

嵌入式C 用戶端:https://os.mbed.com/teams/mqtt/code/MQTTPacket/

ESP8266/ESP32的用戶端:https://github.com/tuanpmt/esp_mqtt

基于elang的用戶端:https://github.com/emqx/emqtt

基于go的用戶端:https://github.com/eclipse/paho.mqtt.golang

6、調試工具

MQTT.fx:http://mqttfx.jensd.de/index.php/download

MQTT X:https://mqttx.app/

7、其他資料

MQTT中文網:http://mqtt.p2hp.com/

MQTT官網:https://mqtt.org/

繼續閱讀