使用MQTT上傳與傾聽資料
MQTT is a machine-to-machine (M2M)/”Internet of Things” connectivity protocol. It was designed as an extremely lightweight publish/subscribe messaging transport.
它的架構如下圖:
其中它有幾個元素
- Publisher: 它通常是帶有sensor的裝置(Ex. Ameba),經由網路上傳到MQTT-Broker,其中MATT-Broker是帶有MQTT service的資料庫
- Subscriber: 它通常是可以觀看訊息的裝置,如筆電,手機等
- Topic: 訊息的內容由Topic來分類,比如說Topic可以是PM2.5, 或是Temperature, 而手機可以選擇想要接收的Topic
- Ameba x 1
範例說明
這個範例裡,我們嘗試連上MQTT-Broker,發送topic訊息,並接收來自MQTT-Broker的訊息。
打開MQTT的範例, “File” -> “Examples” -> “AmebaMQTTClient” -> “mqtt_basic”
因為它需要用到WiFi, 所以要設定裡面的ssid, pass, 以及連上AP的方式。
此外還有一些MQTT的設定可以修改:
其中mqttServer就是MQTT-broker的位置,這邊使用 “iot.eclipse.org” 是 IBM 的 eclipse 提供的 MQTT sandbox,供開發者測試MQTT
clientId用來讓MQTT-broker辨識連上線的裝置
publishTopic是發佈的主題,例子裡是 “outTopic”, 而其它有subscribe “outTopic” 的裝置可以接收這份訊息。
publishPayload是發佈的內容
subscribeTopic是對MQTT-broker註冊要傾聽的topic
我們將程式碼編譯並上傳到Ameba之後,按下Reset按鈕,然後打開Serial Monitor
可以看到如果連線失敗會嘗試重連,連上之後, “iot.eclipse.org” 這台 server 會傳送 “SADS”在 ”inTopic”
程式裡也有publish ”outTopic”,所以我們需要另外一個MQTT client 來測試看看是否成功
這邊我們使用chrome的外掛程式 MQTTLens當作client,你可以在google的擴充程式裡找到它
打開它之後,點選左邊的Connection的 “+”,並在填入這些欄位
- Connection Name: 用來辨識這筆連線,可以任意填
- Hostname: 這邊填入MQTT-Broker的server位置, “iot.eclipse.org”
- Client ID: 它預設會隨機給你一個 ID,我們可以使用預設的ID
填好之後,點選右下角的 “CREATE CONNECTION”
然後它會連上 “iot.eclipse.org”, 但由於我們沒有註冊想要傾聽的資訊,所以沒有任何訊息進來。我們在Subscribe那邊的Topic填入 “outTopic”, 並點選右邊的 “Subscribe”。
“iot.eclipse.org”此時會馬上送訊息 “hi” 過來,代表已經成功連上。
此時我們等一下Ameba下次傳送資料的時間,或是將Ameba Reset並等它的第一次傳送資料,等到之後就會看到新一筆的資料 “hello world” 出現,這樣代表整個機制運作正常。