作者:Felix Lin
一般來說,要建置一個完整的物聯網系統,除了微控制器端要部屬硬體與撰寫微控制器韌體之外,還需要配合雲端平台的程式,包含後台、觸發訊息、推播訊息等,這才算是建構完整的物聯網系統。然而對於一般的 Maker 或是業餘玩家,要建構完整系統通常要耗費難以負荷的人力及物力。本篇教學文旨在利用 LinkIt 7697 實作成一個打卡簽到系統,並且結合 IFTTT 串接第三方程式達到即時推播效果,降低開發雲端的成本。
本次專案需要硬體材料如下:
- LinkIt 7697 物聯網開發板
- 亞堤 LinkIt 7697 擴充板(可用麵包板或其他相容擴充板替代)
- RC522 RFID 模組
- RFID 卡片、悠遊卡、一卡通
- 杜邦線數條
硬體接線
硬體接線的部分與聯發科 LinkIt 7697 教學相同,這邊就直接沿用了。參考下方接線圖,將 RFID-RC522 模組的 SDA、SCK、MOSI、MISO,依序接到 LinkIt 7697 的 P10、P13、P11 與 P12;電源部分則需使用 3.3V,注意別接錯了。

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

BlocklyDuino for 7697 V3 畫面
雖然積木不如直接編寫 Arduino 程式碼來得彈性,但對於初學者或是撰寫簡單功能時,是非常有幫助的;再者,新版的 BlocklyDuino 增加不少模組積木,也可大大縮短開發時間。這裡就直接下載最新版(3.0.268b)解壓縮開來執行 BlocklyDuino for linkIt 7697 進行積木編輯。
積木程式在初始化時做本地端 WiFi 連線,這邊請填入自己家中或工作地點的 Wi-Fi SSID 與 PASSWORD,若成功連線完成後將獲得 IP 印出。主迴圈分為上下兩個部分,上半部利用 LinkIt 7697 內建的按鈕(P6)與 LED(P7),設定目前簽到狀態,可切換為簽到或是簽退。下半部從 RFID 模組讀取卡片 ID,若不為空(代表有確實讀到卡片)則進行 ID 的判定,將對應的學員人名賦值到變數「name」中,若找不到匹配則填入「unknow」(未知)。

Blockly 積木程式範例
最後要把資訊上傳到 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 的設定流程給各位參考:
STEP 1:進入 IFTTT 首頁,可以選擇登入帳號或申請一個
STEP 2:登入後可以看到下方每個圖示都是 IFTTT 可以串接的服務,我們點選右上角的「New Applet」
STEP 3:Applet 是 IFTTT 裡面所謂「小程式」的意思,點選下方「this」選擇觸發事件
STEP 4:在眾多服務裡面搜尋「Webhooks」,並點選圖示
STEP 5:選擇一種 webhooks 的觸發方式,這邊就只有一種「Receive a web request」(接收到一個網頁要求)
STEP 6:事件輸入名稱,這裡示範名稱用 linkit 7697,這樣就完成了觸發條件
STEP 7:接著點選「that」設定動作
STEP 8:搜尋「LINE」作為觸發事件,也可以使用類似性質的 SMS 簡訊服務
STEP 9:選擇「connect」連接 LINE
STEP 10:因為要連接到 LINE,需要進行登入LINE 的動作
STEP 11:IFTTT 要求透過 LINE Notify 的通知進行推播,選擇同意繼續
STEP 12:選擇一種 LINE 動作(當然是發送訊息囉!)
STEP 13:設定傳送 LINE 訊息的內容。可以選擇要推播到特定群組,或是一對一的 LINE Notify,再來是訊息格式,一個 Webhooks 可以傳送三個數值,我們把分別設定為學員名稱、狀態以及時間戳記
STEP 14:輸入一個好記憶的名稱及完成了!後面隨時要關閉功能也可以!
STEP 15:回到 Webhooks 頁面,選擇右上角的「Settings」查看組態
STEP 16:在 URL 後面的一串雜湊碼就是這組 Webhooks 的金鑰,將它複製下來貼回前面的程式碼,如果要更換金鑰的話,可以點選下方的「Edit Connection」,會自動產生一組新的金鑰
實際測試
實際將程式燒錄至 LinkIt 7697 後,即可把匹配的 RFID 卡片,接觸 RFID 模組做感應。同時 LinkIt 7697 上面內建的按鈕與 LED 可以表示目前狀態為簽到或是簽退。在感應後可以發現手機端的 LINE APP 隨即收到 LINE Notify 傳送過來的推播通知,上面確實註記了學員名稱、簽到狀態以及時間戳記。

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

手機上的 LINE收到的推播訊息
小結
本篇簡單實作了物聯網開發板與 IFTTT 的串聯應用,讀取 RFID 模組並透過 LINE 訊息發送學員簽到與簽退的通知。類似的 IFTTT 應用可以結合 MAIL 與簡訊發送、社群媒體、智慧家電、雲端儲存等服務,大幅降低開發者的負擔輕鬆地完成自動化服務。期待各位 Maker 可以活用 IFTTT 完成其他更有趣便利的應用!
(責任編輯:葉于甄)
- 【開箱實測】OpenVINO榨出單板極限,實作離線LLM AI助理! - 2024/07/25
- 【Maker 玩 AI】Grove Vision AI 模組讓 Arduino 也能玩 YOLO 模型 - 2023/12/26
- 【Maker 玩 AI】Edge Impulse 搭配 XIAO ESP32-S3 實作影像分類專題 - 2023/12/04
訂閱MakerPRO知識充電報
與40000位開發者一同掌握科技創新的技術資訊!