MQTT - 設置 MQTT 客戶端與 Broker 通信

MQTT簡介

MQTT (Message Queuing Telemetry Transport),它是為IBM和Eurotech共同製定出來的protocol,在 MQTT的官網 可以看到它對MQTT的介紹:

1

其中它有幾個元素

  • Publisher: 它通常是帶有sensor的裝置(Ex. Ameba),經由網路上傳到MQTT-Broker,其中MATT-Broker是帶有MQTT service的資料庫

  • Subscriber: 它通常是可以觀看訊息的裝置,如筆電,手機等

  • Topic: 訊息的內容由Topic來分類,比如說Topic可以是PM2.5, 或是Temperature, 而手機可以選擇想要接收的Topic

材料準備

  • AmebaD [AMB21 / AMB22 / AMB23 / BW16] x 1

範例説明

這個範例裡,我們嘗試連上MQTT-Broker,發送topic訊息,並接收來自MQTT-Broker的訊息。
Open the MQTT example “File” “Examples” “AmebaMQTTClient” “MQTT_Basic”

2

因為它需要用到WiFi, 所以要設定裡面的ssid, pass, 以及連上AP的方式。
此外還有一些MQTT的設定可以修改:

3

其中mqttServer就是MQTT-broker的位置,這邊使用 “test.mosquitto.org” 是 IBM 的 eclipse 提供的 MQTT sandbox,供開發者測試MQTT

  • clientId用來讓MQTT-broker辨識連上線的裝置

  • publishTopic是發佈的主題,例子裡是 “outTopic”, 而其它有subscribe “outTopic” 的裝置可以接收這份訊息。

  • publishPayload是發佈的內容

  • subscribeTopic是對MQTT-broker註冊要傾聽的topic

我們將程式碼編譯並上傳到Ameba之後,按下Reset按鈕,然後打開Serial Monitor

4

Ameba 連接到 MQTT server 后,會傳送 “hello world” 到 “outTopic”
所以我們需要另外一個MQTT client 來測試看看是否成功
這邊我們使用chrome的外掛程式 MQTTLens當作client,你可以在google的擴充程式裡找到它

5

打開它之後,點選左邊的Connection的 “+”,並在填入這些欄位

  • Connection Name: 用來辨識這筆連線,可以任意填

  • Hostname: 這邊填入MQTT-Broker的server位置, “iot.eclipse.org”

  • Client ID: 它預設會隨機給你一個 ID,我們可以使用預設的ID

填好之後,點選右下角的 “CREATE CONNECTION”

6

然後它會連上 “iot.eclipse.org”, 但由於我們沒有註冊想要傾聽的資訊,所以沒有任何訊息進來。
我們在Subscribe那邊的Topic填入 “outTopic”, 並點選右邊的 “Subscribe”。
此時我們等一下Ameba下次傳送資料的時間,或是將Ameba Reset並等它的第一次傳送資料,等到之後就會看到新一筆的資料 “hello world” 出現,這樣代表整個機制運作正常。

7