一次就學會使用Adafruit IO 平台!

介紹

本篇文章主要的學習內容為瞭解 Adafruit IO 平台操作,包括「Feed建立」、「Group建立」、「Dashboard建立」,並且使用 Linkit7697 + Adafruit IO Blockly 積木示範如何發送資料以及接收資料(透過網頁遠端控制Linkit7697)。

Adafruit IO 是一個免費/付費的IoT 平台,提供數據雲端化、圖像化的服務整合,Adafruit IO 可以讓使用者自由定義雲端的資料內容;Protocol 除了支援MQTT(S)、HTTP(S)、WebSocket 外,也提供多樣化的API供使用者使用,大部分程式語言都可以透過HTTP 或MQTT 協定對Adafruit IO 存取。

接下來就要開始帶大家一步步操作,內容包含以下七個部分:

  1. 註冊Adafruit IO帳號
  2. 建立Group
  3. 建立Feed
  4. 建立Dashboard
  5. 取得Username & AIO Key
  6. 軟體安裝
  7. 程式設計(IoT範例)

一、註冊Adafruit IO 帳號

首先至Adafruit IO官網註冊頁面,註冊免費帳號。

免費及付費帳號所支援的功能差異請參見下表,一般小型專案使用免費帳號即可;有更多需求的夥伴可以自行評估是否升級,以$10 USD/月或$99 USD/年的方式去付費使用。

免費付費
每分鐘可存取的資料筆數3060
資料保存天數3060
Feed(節點)數量10無限制
Dashboard(儀表板)數量5無限制
Trigger(觸發)頻率15分鐘一次5秒一次

二、建立Group

Group(群組)主要用來集中管理Feed(感測器節點),可將一個Group 當作一台裝置看待(如下圖所示的Device 1號、Device 2號),裝置內便能建立各自的感測器,好處是可以更集中管理或存取每個裝置內的感測器。

請參考下圖建立Group。

三、建立Feed

Feed(節點)是用來存放感測資料及觀看歷史數據的地方:下圖紅框區域會呈現歷史數據折線圖;藍框由左至右分別表示「新增一筆資料」、「下載所有資料」、「過濾及塞選資料」;下方綠框會顯示歷史資料;右側紫色框內除了顯示Feed基本資料的「Feed Info」外,更可針對此Feed新增更多設定。

點入Feed Info後可見,畫面如下圖所示,紅框內容為預設提供的API,若是使用MQTT 協定可以直接複製MQTT by key這行內容,作為MQTT 要Subscribe(訂閱)或Publish(發佈)的Topic(主題),詳細HTTP 的API可以參考官網提供的API Documentation

請參考下圖建立Feed。

四、建立Dashboard

Dashboard 即儀表板,以圖型方式呈現數值,預設提供多種圖表供選擇,包含開關、滑桿、調色盤、圖片、折線圖等等,使用這些圖表相互搭配可以很容易的建構出網頁版的監測站,比起其他平台省去不少建置費用及時間成本!

在建立Dashboard 的時候預設有多種block可以選擇。

選擇Dashboard 時需要選取對應的資料來源(即Feed),並針對細節做顯示設定:例如Gauge可以設定標題、數值顯示的範圍、線寬粗細等等,可依照使用需求去設定調整。

請參考下圖建立Dashboard。

五、取得Username & AIO key

在對Adafruit IO 資料操作時都需要經過驗證,使用MQTT、HTTP時都需提供帳號及AIO Key才可存取Adafruit IO,以下將介紹如何取得帳號密碼。

進入Adafruit IO官網,點選紅框「My Key」跳出帳號密碼。

下圖藍框為Username,紅框是系統產生的AIO Key,若密碼意外洩漏,也可透過右邊綠色框內的「REGENERATE KEY」按鈕重新產生新的密碼。這裡有一點要特別注意,Adafruit IO會定時檢查Github上公開的code,看有沒有人不小心把密碼放上去,若是被掃描到的話,Adafruit IO 相當地貼心,會自動幫你重新產生新的key,不過還是請大家要小心,密碼不要亂放唷!

六、軟體安裝

(一)軟體下載與擴充

撰寫程式時我們是採用與Scratch類似的Blockly 來編寫程式,所以需要下載LinkIt 7697專用的程式撰寫編輯器BlocklyDuino v3

目前該程式只支援Windows的作業系統,請依照自己的版本將下載下來的壓縮檔解壓縮。

因為該編輯器是免安裝的版本,對於路徑相當要求,解壓縮後的資料夾不能放置在任何有中文檔名的資料夾內,否則上傳程式時可能會產生錯誤。

除了編輯器外,我們還需要下載相容BlocklyDuino的程式庫CIRCUS Pi KIT,因為原先的BlocklyDuino內並沒有Adafruit IO相關的程式積木,所以需要使用者自行擴充。

如上圖所示,點選擴充程式CIRCUS Pi KIT連結後,找到「0622擴充程式.zip」這個選項並點選。檔案名稱的0622是發佈日期,若有新的版本日期會不同。

依照下圖所示,點選「Download」的選項下載擴充程式到自己的電腦,下載完成後請解壓縮。

截至目前為止我們應該獲得了兩個資料夾,分別是程式編輯器「BlocklyDuino」以及「0622擴充程式」。接下來請將「0622擴充程式」資料夾內的兩個檔案複製起來,並在BlocklyDuino資料夾內貼上並取代。

(二)安裝驅動程式

請下載並安裝CP2102N 驅動程式,以便PC能連接到您的LinkIt 7697。 

點選頁面內「DOWNLOADS」的選項,並依照您作業系統的版本,下載對應的驅動程式並安裝。

將上述步驟做完就完成軟體的準備囉~現在開啟軟體檢查看看有沒有擴充程式吧!打開BlocklyDuino資料夾,並點選「BlocklyDuino.exe」,如下圖所示,檢查看看有沒有「Adafruit IO」的選項。

七、程式設計(IoT 範例)

本次使用Linkit7697做為IoT 裝置硬體,開發環境使用BlocklyDuino,示範如何與Adafruit IO溝通,將資料發送至Adafruit IO、透過Adafruit IO Dashboard網頁控制Linkit7697 LED亮滅。

(一)程式撰寫

依照下圖所示拉入積木程式碼,請自行修改WiFi IDWiFi密碼Adafruit IO UsernameAIO Key;DeviceID 可以自訂,在雲端平台會作為Group 名稱,並且積木程式將會使用DeviceID 作為MQTT ID,所以每個裝置請使用不同的DeviceID,重複使用將會剔除ID 相同者連線。

程式說明

  1. 設定並連線到WiFi連線,請自行修改WiFi ID、密碼。
  2. 設定並連線到Adafruit IO,請自行修改Adafruit IO Username、AIO Key。
  3. 在Loop函式中持續同步Adafruit IO狀態以檢查感測器資料是否更新。
  4. 使用計時的方式取代Delay,每10秒將目前的開機毫秒數更新到雲端。
  5. 設定當雲端感測器led更新時判斷內容並控制內建LED亮滅。

完整Adafruit IO範例程式

(二)Adafruit IO設定

Adafruit IO中可以透過首次發布新資料時自動建立Feed,建議大家可以自行建立所有的Feed,以確保資料發布成功。

下圖為建立一個名為「icshop」的群組,「led」、「time」Feed。

下圖為建立一個名為「icshop」的Dashboard。

在「icshop」Dashboard內點選紅框Create New Block」新增圖塊。

選擇「Stream」圖塊。

資料來源選擇icshop「time」。

設定Stream Block Title,可自訂。

新增「Toggle」圖塊。

資料來源選擇icshop「led」。

設定Toggle Block Title(可自訂),可設定發送的文字內容,預設為「ON」、「OFF」。

完成後如下圖所示。

Linkit7697 將會每10秒發送一次開機時間到Adafruit IO,並且使用者可透過網頁開關控制Linkit7697 LED亮滅,如下圖所示。

關閉LED
開啟LED

八、結語

Adafruit IO 支援MQTT(S)、HTTP(S)、WebSocket,所以不管用什麼語言都很容易上手;再加上相當直覺的網頁操作介面、簡潔好上手的Dashboard、完整的官方API,更重要的是有免費版本可以使用;我們也針對 Adafruit IO 製作了積木程式,對於初學者使用上會更加容易,不妨現在就一起使用 LinkIt 7697 操作看看吧!