MQTT - 設置 MQTT 客戶端與 Broker 通信
材料準備
範例說明
介紹
MQTT (Message Queuing Telemetry Transport),它是為IBM和Eurotech共同製定出來的protocol,在MQTT的官網可以看到它對MQTT的介紹:
MQTT is a machine-to-machine (M2M)/”Internet of Things” connectivity protocol. It was designed as an extremely lightweight publish/subscribe messaging transport.
所以它是為了IOT而設計的protocol,它是基於TCP/IP的協定,並且透過publish/subscribe的方式做資料傳送與接收。
它的架構如下圖:
在MQTT的運行中,有以下幾個角色:
- Publisher: 通常Publisher是配有感測器的設備(例如 Ameba)。 Publisher將感測器的數據上傳到MQTT-Broker,MQTT-Broker作為MQTT服務的資料庫。
- Subscriber: Subscriber是指接收和分析消息的設備,例如筆電或手機。
- Topic: 使用Topic來對消息進行分類,例如消息的Topic可以是“PM2.5”或“溫度”。 Subscriber可以選擇他們想要接收主題的消息。
在此有 3 個將 Ameba 連接到 MQTT-Broker 的範例。 然後作為Publisher發送消息並作為Subscriber接收來自 MQTT-Broker 的消息。
- 1.MQTT_Basic
- 2.MQTT_Auth
- 3.MQTT_Publish_In_Callback
流程
MQTT_Basic 範例
打開 MQTT 範例 “File”->“Examples”->“AmebaMQTTClient”->“MQTT_Basic”
請修改一些WiFi相關的參數以及MQTT相關的一些資訊:
- “ssid”是用於連接網路的SSID。
- “pass”是用於連接網路的密碼。
- “mqttServer”是指MQTT-Broker,有免費的MQTT “test.mosquitto.org”可用於測試。
- “clientId”是 MQTT-Broker 識別連接設備的id。
- “publishTopic”是已發布消息的主題,在範例中為“outTopic”。 訂閱“outTopic”的設備將會收到該消息。
- “publishPayload”是要發布的內容。
- “subscribeTopic”是告訴MQTT-broker要訂閱哪個主題。
接下來,編譯代碼並將其上傳到Ameba。 按重置按鈕,然後打開serial monitor。
Ameba 連接到 MQTT 服務器後,向“outTopic”發送消息“hello world”。 要查看消息,需要設置另一個 MQTT 客戶端。
“MQTT Explore”是一款適用於全部平台的應用程序,可設置為MQTT客戶端。 請參閱網站 http://mqtt-explorer.com/。
單擊左上角的“Connections”開始新的設置連接。 “Name”可以自定義。 將“Host”設置為“test.mosquitto.org”。
單擊底部的“ADVANCED”進行主題設置。 使用與開發板上“publishTopic”相同的“outTopic”。 單擊“ADD”,然後單擊“BACK”。
單擊“CONNECT”。 “hello world”消息則顯示在左側。 在右側的“Publish”下,使用與開發板上“sucribeTopic”相同的“inTopic”。 選擇“raw”並輸入“Text hello Ameba”,然後單擊“PUBLISH”。 開發板將收到 MQTT Explorer 發布的原始消息。 請注意,由於該主機是免費的公用服務器,因此開發板可能會收到預期外的消息。
MQTT_Auth 範例
打開 MQTT 範例 “File”->“Examples”->“AmebaMQTTClient”->“MQTT_Auth”
請修改一些WiFi相關的參數以及MQTT相關的一些資訊:
- “mqttServer”指MQTT-Broker,amebaiot主頁“cloud.amebaiot.com”提供免費的MQTT認證主機。 請參閱 https://www.amebaiot.com/en/cloud-getting-started/ 用於帳戶設置。
- “clientId”是 MQTT-Broker 識別連接設備的標識符。 在本例中,它是註冊的設備名稱。 請參閱https://www.amebaiot.com/en/cloud-service/ .
- “clientUser”是身份驗證用戶名。 在本範例中,它是 Realtek IoT/Wi-Fi MCU Solutions 網站的登錄用戶名。 注意,如果使用“clientUser”郵箱,將無法接收消息。
- “clientPass”是認證密碼。 在本範例中,它是 Realtek IoT/Wi-Fi MCU Solutions 網站的登錄密碼。
- 其他參數與之前相同。
接下來,編譯代碼並將其上傳到Ameba。 按重置按鈕,然後打開serial monitor。 Ameba 連接到 MQTT 服務器後,向“outTopic”發送消息“hello world”。 要查看消息,需要設置另一個 MQTT 客戶端。
啟動 MQTT Explore,並設置身份驗證連接。
單擊左上角的“Connections”開始新的連接。 “Name”可以自定義。 將“Host”設置為“cloud.amebaiot.com”。 “Username”和“Password”與“clientUser”和“clientPass”相同。
單擊底部的“ADVANCED”進行主題設置。 使用與開發板上“publishTopic”相同的“outTopic”。 單擊“ADD”,然後單擊“BACK”。
單擊“CONNECT”。 “hello world”消息則顯示在左側。 在右側的“Publish”下,使用與開發板上“sucribeTopic”相同的“inTopic”。 選擇“raw”並輸入“Text hello Ameba”,然後單擊“PUBLISH”。 開發板將收到 MQTT Explorer 發布的原始消息。 請注意,“hello world”有時不會顯示,因為開發板在 MQTT Explorer 之前連接到 MQTT Broker。
MQTT_Publish_In_Callback 範例
打開 MQTT 範例 “File”->“Examples”->“AmebaMQTTClient”->“MQTT_Publish_In_Callback”
請修改一些WiFi相關的參數以及MQTT相關的一些資訊:
• 所有參數與 MQTT_Auth 範例相同。
接下來,編譯代碼並將其上傳到Ameba。 按重置按鈕,然後打開serial monitor。 Ameba 連接到 MQTT 服務器後,向“outTopic”發送消息“hello world”。 要查看消息,需要設置另一個 MQTT 客戶端。
啟動 MQTT Explore,並設置身份驗證連接。 所有設置與 MQTT_Auth 範例相同。
單擊底部的“ADVANCED”進行主題設置。 使用與開發板上“publishTopic”相同的“outTopic”。 單擊“ADD”,然後單擊“BACK”。
單擊“CONNECT”。 “hello world”消息則顯示在左側。 在右側的“Publish”下,使用與開發板上“sucribeTopic”相同的“inTopic”。 選擇“raw”並輸入“Text hello Ameba”,然後單擊“PUBLISH”。 開發板將收到 MQTT Explorer 發布的原始消息。 請注意,“hello world”有時不會顯示,因為開發板在 MQTT Explorer 之前連接到 MQTT Broker。