Ameba Arduino: [RTL8195] [RTL8710] 使用MQTT上傳與傾聽資料

MQTT簡介

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的方式做資料傳送與接收。
它的架構如下圖:
9-1

其中它有幾個元素

  • 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”

9-2

因為它需要用到WiFi, 所以要設定裡面的ssid, pass, 以及連上AP的方式。

此外還有一些MQTT的設定可以修改:

9-3

 

其中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

9-4

 

可以看到如果連線失敗會嘗試重連,連上之後, “iot.eclipse.org” 這台 server 會傳送 “SADS”在 ”inTopic”

程式裡也有publish ”outTopic”,所以我們需要另外一個MQTT client 來測試看看是否成功

這邊我們使用chrome的外掛程式 MQTTLens當作client,你可以在google的擴充程式裡找到它

9-5

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

  • Connection Name: 用來辨識這筆連線,可以任意填
  • Hostname: 這邊填入MQTT-Broker的server位置, “iot.eclipse.org”
  • Client ID: 它預設會隨機給你一個 ID,我們可以使用預設的ID

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

9-6

然後它會連上 “iot.eclipse.org”, 但由於我們沒有註冊想要傾聽的資訊,所以沒有任何訊息進來。我們在Subscribe那邊的Topic填入 “outTopic”, 並點選右邊的 “Subscribe”。

“iot.eclipse.org”此時會馬上送訊息 “hi” 過來,代表已經成功連上。

此時我們等一下Ameba下次傳送資料的時間,或是將Ameba Reset並等它的第一次傳送資料,等到之後就會看到新一筆的資料 “hello world” 出現,這樣代表整個機制運作正常。

9-7