| ESP32 教學 | 認識 MQTT 與安裝 Mosquitto Windows 版本

MQTT 是個物聯網領域中常用 3 種網路通訊協定之一,最大特色就是輕量化,相較於 HTTP 協定,除訊息架構簡潔,可 1 對多的訊息傳遞外,亦可實現在低效能的硬體控制器,相當適合遠端少量的資料收集應用,今天這篇來簡單介紹 MQTT 通訊協定,讓各位不瞭解的朋友可以快速掌握 MQTT 的相關設定,並在安裝  Mosquitto Windows 平台的MQTT Server 進行相關測試。

1. MQTT 通訊協定

MQTT 的全名是 Message Queuing Telemetry Transport,目前最新的版本為 MQTT v5.0(但 MQTT v3.1是一般使用),當初最早是由 IBM 所提出,後來在 2014 年變成 OASIS(https://www.oasis-open.org/)的標準,是一種適用於 Server 與 Client 訊息傳 遞的通訊協定,此協定建構在 TCP/IP Stack上,利用『訂閱 Subscribe』與『發佈 Publish』的機制來進行訊息傳遞。因為其訊息結構簡單且輕量化,所以非常適合用於硬體效能較低的控制器,或作為物聯網的輕量資料收集應用,下面來簡單解釋 MQTT 的訊息傳遞過程:

在 MQTT 的架構下,會有3種角色:Broker 代理人、Publisher 訊息發佈者、Subscriber 訊息訂閱者。 Broker 負責接收來自 Publisher 的訊息並『配發』訊息給 Subscriber,Publisher 是訊息源頭,也就是發佈訊息的人,Subscriber 也就是接收訊息的人。

JIMI哥 用白話一點舉個實例來說明,假設你今天有個資料擷取裝置比如溫濕度感測器,想要透過 MQTT的通訊,傳遞溫度與濕度訊息傳到不同的裝置(多個PC或手機)使用,Publisher 就可以是溫濕度感測器,定時的送出溫度濕度資訊,Subscriber 就可以是 不同 PC 和手機,Broker 的工作就是接收來自感測器的訊息,轉送給 PC 與 手機,至於 Broker 怎麼決定訊息要轉送或配發給誰,Topic 主題就是關鍵的點,你有訂閱該 Topic,Broke r才會配發給你(跟youtube一樣,有訂閱該頻道,頻道有新內容才會推播給你知道😁)。

再來我們看看 MQTT 訊息格式:

在 MQTT 訊息中,『Control Header』 跟『Remaining Length』這兩個部分都是必須存在,後面的『 Variable Header 』跟 『Payload』 則是依據傳送需求決定,如果以 Publish Message 來說,Variable Header 就會放入topic 主題,Payload 區塊就是欲傳遞的訊息內容。

最後來聊一下,MQTT 還有幾個重要特色:

  1. 在訊息傳遞的過程中,Publisher 不需要知道 Subscriber 的 IP,只需要知道 Broker 的位址就可以進行訊息傳遞。
  2. MQTT 的 Topic 主題帶有階層式設計,用 / 來分開,比如說工廠會議室的溫度與濕度,就可以編寫成 factory/meeting/temp 與 factory/meeting/humid,英文大小寫是有差的。
  3. 由於 MQTT 是設計允許在網路環境較差地方運行,所以針對網路的品質(QoS),使用者可以自己決定操作等級:
    • QoS Level0: 發送者丟出一次訊息給 Broker,並不保證 Subscriber 會收到。
    • QoS Level1: Publisher 丟出訊息後, Broker 必須回傳 PUBACK 訊息確定有收到,如沒回,Publisher 會再重傳一次。(缺點為 Subscriber 有可能會收到相同的訊息)
    • QoS Level2: 在 Publisher 確認 Broker 有收到訊息後,Broker 才可進行訊息傳遞,且 Subscirber 在收到訊息後,也必須回傳 PUBCOMP 訊息給 Publisher,此方法可以避免收到重複的訊息,但缺點就是較佔頻寬。

– 參考資料

如果有興趣深入研究 MQTT 基礎知識的朋友可以再參考下面網站:

2. 安裝 Mosquitto Windows 平台

一般我們要測試 ESP32 或其他程式的 MQTT 功能時,通常會先架設一個測試主機,待測試正常後,在實現到雲端平台上。Windows 系統如果要有 MQTT Broker 主機服務的話, JIMI哥推薦大家可以安裝 Eclipse Mosquittohttps://mosquitto.org/), 這套 Open Source 軟體支援 Windows、Mac、Ubuntu、數莓派等等都可以使用,下面就是完整的安裝過程:(這邊示範為安裝到 windows10 64bit 的電腦)

1. 直接到下載網頁 https://mosquitto.org/download/,點選 windows-64版本下載,目前是2.0.9版。點擊檔案開始進行安裝,按下 NEXT,直到出現 Choose Components 頁面。

mosquitto windows

https://jimirobot.com.tw/image/esp32/1001/ps_mo2.jpg

2. 在 『Choose Components』 頁面中,關於 Service 這個選項,如果打勾,MQTT Broker 就會變成 windows 的服務,各位斟酌看看是否需要開機執行。(JIMI哥是推薦大家如果是要用在測試環境的話,可以不用點選,直接用手動開啟MQTT Broker功能)

https://jimirobot.com.tw/image/esp32/1001/ps_mo3.jpg

3. 接著按 NEXT 預設值安裝即可,此套軟體同時需要安裝 Visual Studio Runtime 的套件,如果有安裝過按下關閉即可,不確定可以直接按下安裝或修復按鈕重新安裝,後續即可安裝完成。

3. 設定 window 防火牆

MQTT 預設的通訊 PORT1883 在 windows 是關閉的,所以這邊開啟防火牆的相關設定,新增輸入與輸出的規則。

  1. 開啟 windowsDefender 防火牆設定頁面,按下「進階設定」。

  2. 先新增 輸入規則。

  3. 選擇連接PORT。

  4. 選擇TCP通訊協定與1883。

  5. 選擇 允許連線。

  6. 因為我們目前測試只在區域網路內,選擇私人即可。

  7. 設定好名稱,即可完成針對 TCP 連線的 Port1883 輸入規則。

  8. 接著設定輸出規則,這邊就省略相同步驟,一樣指定 TCP 與 Port1883。

  9. 填好名稱後,完成輸出PORT 1883的規則。

  10. 最後確定一下,輸入與輸出規則正常啟用即可。

4. 結語

這篇主要教大家認識 MQTT 通訊協定與如何安裝 Mosquitto MQTT Broker 在 Windows 作業系統,Mosquitto 在 v2.0 後加強了安全性的設定,預設的參數會限定只有本機連線登入,對於如果要測試外部裝置連線(像ESP32等)較為不便,所以下篇會來講一下如何更改相關的參數與測試 MQTT Broker的方法,請大家持續關注囉!

繼續看下一篇>>    ESP32教學 |Mosquitto conf 設定與 MQTT 測試

↓↓↓↓↓↓賣場連結↓↓↓↓↓↓

歡迎大家有需要的話,可以多多支持一下我們的蝦皮賣場喔! 😀 

吉米家官方店-創客機器人材料專賣 https://shopee.tw/jimirobot.tw

Follow JIMI哥 Twitter : https://twitter.com/jimirobot  <–得到最新文章通知

發佈留言

Close Menu