【知識教學文】Linkit7697與IFTTT譜出雲端協奏曲

【知識教學文】Linkit7697與IFTTT譜出雲端協奏曲

 

一般來說,要建置一個完整的物聯網系統,除了微控制器端要部屬硬體與撰寫微控制器韌體之外,還需要配合雲端平台的程式,包含後台、觸發訊息、推播訊息等,這才算是建構完整的物聯網系統。然而對於一般的Maker或是業餘玩家,要建構完整系統通常要耗費難以負荷的人力及物力。本篇教學文旨在利用Linkit7697實作成一個打卡簽到系統,並且結合IFTTT串接第三方程式達到即時推播效果,降低開發雲端的成本。

 

本次專案需要硬體材料如下:

  • Linkit7697物聯網開發板
  • 亞堤Linkit7697擴充板(可用麵包板或其他相容擴充板替代)
  • RC522 RFID模組
  • RFID卡片、悠遊卡、一卡通
  • 杜邦線數條

硬體接線

硬體接線的部分與聯發科Linkit7697教學相同,這邊就直接沿用了。參考下方接線圖,將RFID-RC522模組的SDA、SCK、MOSI、MISO,依序接到Linkit7697的P10、P13、P11與P12;電源部分則需使用3.3V,注意別接錯了。

Linkit7697與RFID模組接線(source: mediatek Labs)

 

使用BlocklyDuino快速建構微控制器程式

 

BlocklyDuino for 7697 V3畫面

 

今年(2018)七月聯發科官方推出BlocklyDuino for Linkit V3,裡面不但整合了Arduino IDE與Blockly,也內建許多常用到的函式庫(library),Blockly介面也可以直接燒錄開發板程式,還支援開啟putty終端機介面,算是一個非常有感的大改版,幫助入門者打包成『懶人包』,安裝開發環境只需要一個解壓縮,替代以往繁瑣的流程步驟。但缺點是目前此版本的作業系統僅只支援Windows,MAC與Linux尚未有對應的版本。

雖然積木不如直接編寫Arduino程式碼來得彈性,但對於初學者或是撰寫簡單功能時,是非常有幫助的;再者,新版的BlocklyDuino增加不少模組積木,也可大大縮短開發時間。這裡就直接下載最新版(3.0.268b)解壓縮開來執行BlocklyDuino for linkit7697進行積木編輯。

 

Blockly積木程式範例

 

積木程式在初始化時做本地端WiFi連線,這邊請填入自己家中或工作地點的Wi-Fi SSID與PASSWORD,若成功連線完成後將獲得IP印出。主迴圈分為上下兩個部分,上半部利用Linkit7697內建的按鈕(P6)與LED(P7),設定目前簽到狀態,可切換為簽到或是簽退。下半部從RFID模組讀取卡片ID,若不為空(代表有確實讀到卡片)則進行ID的判定,將對應的學員人名賦值到變數”name”中,若找不到匹配則填入”unknow”(未知)。最後要把資訊上傳到IFTTT,在IFTTT積木當中事件名稱與認證碼(key)需在後面我們設定IFTTT時取得。每一次傳送IFTTT要求最多可以傳送三個參數,而因為要做打卡簽到系統,三個參數可以分別設定為:姓名、簽到狀態與時間戳記。

基本上積木拉完程式也寫完了,但是筆者在實際測試時發現一個小bug:在傳送完成一筆IFTTT資料後,第二筆就無法再次傳送了。因此這裡需要先存檔後,開啟Arduino IDE做個小修改。將invokeIFTTT()函式中判斷http連線是否已斷線的判斷註解掉,強制每次傳送完成之後就自行中斷連線。筆者推斷是http POST封包送給IFTTT時雖然表示傳送完成要進行斷線,但IFTTT並沒有主動把連線終止掉,導致第二次要傳送時因為第一次連線的狀態還保持著,被IFTTT給拒絕連線了。這邊修改完畢就可以進行燒錄了。

 

將Arduino程式中判斷斷線的部分註腳調,強制其中斷連線

 

IFTTT設定即時line訊息通知

IFTTT的全稱是"If This Then That",非常直白的名字:如果這樣然後那樣。主要功能就是一但觸發了A事件,就會幫我們自動執行B動作,更棒的是完全不用寫程式!完全不用寫程式!完全不用寫程式!(很重要)目前網站上已有數百種不同服務可以進行串接,以下就提供STEP by STEP的設定流程給各位參考:

 

STEP1: 進入IFTTT首頁,可以選擇登入帳號或申請一個

 

STEP2: 登入後可以看到下方每個圖示都是IFTTT可以串接的服務,我們點選右上角的”New Applet”

 

STEP3: Applet是IFTTT裡面所謂”小程式”的意思,點選下方”this”選擇觸發事件

 

STEP4: 在眾多服務裡面搜尋”Webhooks”,並點選圖示

 

STEP5: 選擇一種webhooks的觸發方式,這邊就只有一種”Receive a web request”(接收到一個網頁要求)

 

STEP6: 事件輸入名稱,這裡示範名稱用 linkit7697,這樣就完成了觸發條件

 

STEP7: 接著點選”that”設定動作

 

STEP8: 搜尋”line”作為觸發事件,也可以使用類似性質的SMS簡訊服務

 

STEP9: 選擇”connect” 連接line

 

STEP10: 因為要連接到line,需要進行登入line的動作

 

STEP11: IFTTT要求透過Line Notify的通知進行推播,選擇同意繼續

 

STEP12: 選擇一種Line動作(當然是發送訊息囉!)

 

 

STEP13: 設定傳送line訊息的內容。可以選擇要推播到特定群組,或是一對一的Line Notify。再來是訊息格式,一個webhooks可以傳送三個數值,我們把分別設定為學員名稱、狀態以及時間戳記。

 

STEP14: 輸入一個好記憶的名稱及完成了!後面隨時要關閉功能也可以!

 

STEP15: 回到Webhooks頁面,選擇右上角的”Settings”查看組態。

 

STEP16: 在URL後面的一串雜湊碼就是這組Webhooks的金鑰,將他複製下來貼回前面的程式碼。如果要更換金鑰的話,可以點選下方的”Edit Connection”,會自動產生一組新的金鑰。

 

實際測試

實際將程式燒錄至Linkit7697後,即可把匹配的RFID卡片,接觸RFID模組做感應。同時Linkit7697上面內建的按鈕與LED可以表示目前狀態為簽到或是簽退。在感應後可以發現手機端的LINE APP隨即收到LINE Notify傳送過來的推播通知,上面確實註記了學員名稱、簽到狀態以及時間戳記。

實際將一卡通接觸RFID模組做感應

 

手機上的Line收到的推播訊息

 

結論

本篇簡單實作了物聯網開發板與IFTTT的串聯應用,讀取RFID模組並透過LINE訊息發送學員簽到與簽退的通知。類似的IFTTT應用可以結合MAIL與簡訊發送、社群媒體、智慧家電、雲端儲存等服務,大幅降低開發者的負擔輕鬆地完成自動化服務。期待各位Maker可以活用IFTTT完成其他更有趣便利的應用!

 

歡迎加入AIoT/AR/VR主題論壇:https://goo.gl/YdjJQp

(作者:Felix Lin;責任編輯:葉佳錚)

No Comments

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料