【CIRCUS Pi】如何使用M5Stack IOT智慧門鎖

作者/圖片來源: CIRCUS Pi

隨著進入智慧化時代後,雲端智能通訊裝置在我們的生活中已經相當普及,本篇將介紹如何使用 M5Stack的 UiFlow開發具備雲端記錄功能的門禁系統,其中包含4種認證開鎖:手機遠端遙控開鎖、RFID磁卡、按鍵輸入密碼、指紋辨識,並且透過MQTT協定傳送門禁紀錄至手機APP,亦能夠透過 MQTT實現遠端開鎖的應用。

材料清單

M5Stack FACES Kit 遊戲鍵盤套件組-K005
M5Stack 指紋辨識模組-U008
M5Stack RFID模組-U031
M5Stack 繼電器模組-U023
M5Stack M5CameraX圖像識別開發板-U038
LY-01 DC12V電磁電控鎖
12V變壓器

使用軟體與線上服務連結

UIFLOW 線上編輯器
開發者手冊
MQTT

HIVEMQ mqtt-dashboard
開發者手冊

硬體設定

本次製作的門禁系統使用M5Stack Faces模組化套件包,FACES套件包含一個控制核心(M5Stack Core)加上GBA、計算機、QWERTY鍵盤等不同的輸入裝置,在這裡我們使用計算機鍵盤模組進行按鍵輸入(特別注意更換Faces模組時請握住模組兩側拔插,避免排針毀損)。

接下來設定3個Unit 模組,M5Stack RFID模組使用的通訊界面是I2C接入Core左側的Port-AM5Stack Core常用的接腳定義),M5Stack 指紋辨識模組使用的通訊界面是UART接入Core Port-C,欲使用 Core的 GPIO可以看到 Core背面會有提示相對應介面的PIN,Core後方的 GPIO接口(GND、5V、R2(16)、T2(17) ) ,M5Stack 繼電器模組透過I/O控制接入Core port-B(GND、5V、DA(26)、AD(36))。

M5Stack Core 腳位圖

三種Unit模組接線配置完成後,接著製作連接繼電器模組的電路(如下圖)控制電磁鎖,這次使用的電磁鎖工作電壓為DC 12VM5Stack 繼電器模組最高支援DC 30V 3A 的電源輸入

繼電器、電源、電磁閥連接示意圖

配置完繼電器電路後硬體設定就大功告成了。由於目前UiFlow離線主機版本更新速度緩慢,小編建議如果無線Wifi速度夠快,盡量使用遠端寫入Blockly,接下來將介紹有別於「簡單3步驟!使用 M5Stack StickC 製作簡易電子秤」使用USB Type C與電腦連線,透過Wifi無線的方式對M5Stack Core進行程式撰寫。

UiFlow 設定

Step 1. 更新韌體

在建立連線以前,必須先下載官方燒錄器(M5Burn)將韌體版本更新至最新。Core 透過Type C傳輸線連接電腦後,燒錄器會顯示COM Port編號,選擇最新版本的CORE UiFlow韌體版本,按下「Burn」完成燒錄。

Step 2. 建立連線

更新完韌體後,將Core切換至「Internet Mode」,選擇「Wi-Fi via AP」,進入連線頁面後會看到地球符號閃爍。

打開筆電的Wifi搜尋AP熱點SSID名稱,每台Core的名稱都不一樣 ,成功連線後開啟瀏覽器分頁,在搜尋欄輸入 : [192.168.4.1]導入連線設定頁面,輸入欲連線的SSID與密碼。

成功連線後瀏覽器顯示如下圖,Core的顯示器左上角的WiFi與連線的圖示皆會顯示綠色,下方會顯示遠端連線所使用到的API KEY,透過這樣的設定,Core會存取SSID與密碼,之後使用網路模式就可以直接連線,使用過多台AP也可以至Setup > Server select 進行選擇。

接下來打開電腦的瀏覽器,重新連上網際網路,進入Uiflow 網頁版,將API KEY 填入,選擇Core的類型後按下「OK」。

最下方的狀態列會顯示目前建立連線裝置的API KEY ,並顯示「Connected」,表示成功遠端連線,可以開始使用Blockly積木撰寫程式。

功能設計與程式撰寫

Step 1. 設定模組

在開始撰寫Blockly前,要先導入這次會使用到的Unit模組函式庫,點選左下加號,繼電器模組選擇Port B指紋辨識模組選擇Port CRFID模組選擇Port A ,選定模組後記得按下右下角的OK確認。

導入模組後會顯示在左方顯示面板,打開Unit選單確認是否正確導入模組。

Step 2. 撰寫門禁系統常用之副程式

導入模組後,為了避免程式過於冗長,首先撰寫門禁系統會重複使用到的幾個副程式。

1.系統預設狀態(STAY):在執行完任何程式後,回歸此預設程式狀態。按鍵輸入的顯示功能與AC清除功能建立於此,找到AC按鈕的初始值(intial value)給予按下按鈕時之定義。Uiflow使用到的功能列 : 建立函式、 判斷邏輯函式 、 鍵盤輸入功能 、UI元件繼電器復歸 

2. 驗證正確時解鎖(UNLOCK) :透過RFID、指紋辨識、密碼輸入、遠端遙控時,如果驗證正確將解鎖,為了確保繼電器實作之安全在繼電器開啟後3秒自動關閉繼電器。Uiflow使用到的功能列 : 建立函式、 蜂鳴器 、判斷邏輯函式 、UI元件繼電器開啟與復歸 。

 3. 驗證錯誤時保持上鎖(LOCK) :透過RFID、指紋辨識、密碼輸入、遠端遙控時,如果驗證錯誤保持上鎖狀態。Uiflow使用到的功能列 : 建立函式、 蜂鳴器 、判斷邏輯函式 、UI元件 。

Step 3. 設定網路連線與MQTT功能

設定網路與連線,這次的實作會透過Wifi連線網際網路並使用MQTT協定傳送每筆開門的資料並儲存於暫時的雲端空間,MQTT是一種基於「發布/訂閱」機制的訊息傳輸協定,類似社群媒體或是YOUTUBE的發影片和訂閱機制。

MQTT訊息發送端,相當於YOUTUBE的頻道或是IG的帳號,影片發布或是IG發文之後並不直接寄給訂閱者,而是交給伺服器或者第三方(broker),來統籌管理發布和訂閱事宜。每一個訊息來源(影片/文章內容)都有個唯一的主題名稱(影片名稱/文章名稱),代理人是個伺服器軟體,向伺服器發送主題的一方是發布者(publisher),從伺服器獲取主題的一方則是訂閱者(subscriber)。

以下圖為例,傳送感測器資料的一邊是發布者,接收感測器資料的一邊則是訂閱者。每個感測器/微控器的訊息都需要有個主題名稱以利識別,像下圖的主題A、B和C。代理人(broker)可儲存發布者的訊息,在發布者中斷連線的情況下,提供訂閱者最近更新的訊息。

「訂閱者」需要告知代理人想要訂閱的主題,每當「發布者」傳入新訊息時,代理人就會依照主題,傳送給所有訂閱者。「發布者」和「訂閱者」都是用戶端,代理人是伺服器。由於兩個用戶端之間有伺服器當作中繼站,所以兩邊並不需要知道彼此的IP位址。(引用自 cubie 2017/3/ 27 MQTT教學(一):認識MQTT   「MQTT的Publisher, Broker和Subscriber」,查詢日期:2021/1/18)

首先設定門禁Core的WiFi連線功能,打開Uiflow的Advanced選單,選擇Network中的 「Connect ti Wi-Fi SSID」 「 PASSWORD 」並填入欲架設門禁系統位置可以連線到的AP名稱與密碼。為了確認WiFi是否連線,加上一個判斷邏輯函式與螢幕的UI標籤元件,當Wifi連線時呈現綠色,為連線時呈現紅色,網路連線設定結束。Uiflow使用到的功能列 : 判斷邏輯函式 、Wifi設定UI元件

門禁系統使用的MQTT Broker是HiveMQ 提供給所有使用者的免費broker,打開瀏覽器進到Public Broker 裡面查看Broker的 Host 與TCP Port,接下來打開UiFlow的Advanced選單,使用MQTT主機設定與開啟MQTT功能,將Broker的TCP通訊埠與server填入,client設定一個用戶名稱,設定完成後Core就會在Wifi連線的情況下開啟MQTT服務。Uiflow使用到的功能列 : MQTT功能

圖片來源 : HIVEMQ

設定接收/發送MQTT訊息的手機端,在 Google Play或是Apple app store 搜尋「IoT MQTT Panel」並下載開啟,IOT MQTT Panel 是一款輕巧方便的MQTT工具,內含許多設定好的Ui模板,付費的版本可以提供即時串聯手機通知的服務,在接收到新訊息的時候跳出通知。

開啟App後先按照先前設定CORE的broker TCP Port 跟 server (BrokerWeb)依序填入,Client同樣設定一個用戶的名字,這裡記得增加一個功能Dashboard否則無法創建,小編這裡使用SmartLock_log。

創立好Dashboard以後接著建立UI功能模組(Add panel),我們總共要搭建兩個屬性的功能模組,一個是記錄門禁觸發的Text Log,一個則是遠端遙控的Switch開關。

Step 4. 門禁紀錄

建立一個門禁紀錄功能,當門禁系統觸發確認身分功能時發送確認結果至此紀錄,工作原理為建立一個Topic(小編這裡設定為M5Stack_Log),提供門禁系統Core發送訊息至此Topic。功能模組設定 : 調整顯示訊息的數量與字體大小、時間戳記,手機即時通知功能(Enable notification)必須付費才能使用,設定完成後按下SAVE即完成創建。

Step 5. 門禁功能_遠端遙控開鎖

遠端遙控開關 : 工作原理為在手機端設定一個Topic,根據手機上的UI開關狀態(ON/OFF)發出一則msg(小編這裡取名為unlock/lock),門鎖上的Core透過訂閱手機端的Topic讀取msg,即可控制門鎖開關。下方的勾選功能列,可以把下方的Show received timestamp以及Show sent timestamp勾選起來記錄時間點,手機即時通知功能(Enable notification)必須付費才能使用,設定完成後按下SAVE即完成創建。

開啟Uiflow,建立遠端遙控功能,設定門禁CORE訂閱broker的Topic(Lock_Action)當手機端開啟開關時執行開鎖副程式(UNLOCK)打開門鎖,並傳送門禁紀錄至手機的Topic(M5Stack_Log),訊息名稱為Remote_OPEN(注意名稱的大小寫是否正確,輸入錯誤的Topic會導致無法接收與傳送訊息)。Uiflow使用到的功能列 : MQTT功能判斷邏輯函式 、文字導入副程式函式

遠端遙控結果成功電磁閥會作動一次,並顯示於Core螢幕上。

手機端的紀錄模組會顯示含時間戳記的資料。

Step 6. 門禁功能_RFID

設定RFID門禁功能,首先在目前的MQTT設定功能底下加入一個主程式(Main)迴圈,作為觸發判斷的主程式,並加入當有RFID卡靠近時功能觸發函式。Uiflow使用到的功能列 : MAIN函式建立 、判斷邏輯函式 、RFID函式庫

建立RFID的判斷函式(RFID_decision)、RFID副程式(RFID_OK)、RFID副程式(RFID_Denied)。判斷函式(RFID_decision)作為當RFID正確時執行副程式(RFID_OK)加上系統副程式(UNLOCK),或是當RFID錯誤時執行副程式(RFID_Denied)加上系統副程式(LOCK)。

完成後記得在兩個RFID副程式內加入MQTT推送功能,不管正確或是錯誤都會推送訊息到Topic(M5Stack_Log),RFID的UID可以透過Uiflow RFID功能取得。Uiflow使用到的功能列 : 建立RFID副程式函式 、判斷邏輯函式 、RFID函式庫UI元件MQTT功能文字導入副程式函式

RFID辨識功能成功電磁閥會作動一次並在Core上顯示正確,感應到錯誤的卡片顯示錯誤。

手機端的紀錄模組顯示正確與錯誤(含時間戳記)的資料。

Step 7. 門禁功能_按鍵密碼輸入

設定按鍵輸入密碼功能,在主程式(Main)迴圈下加入一個按鍵功能觸發函式,當鍵盤輸入的數字大於等於7個時觸發。Uiflow使用到的功能列 : 函式判斷邏輯函式 、文字 、鍵盤模組函式

建立密碼輸入的判斷函式(Password_decision)、密碼輸入副程式(RFID_OK)、密碼輸入副程式(RFID_Denied)。判斷函式(Password_decision)作為當密碼輸入正確時執行副程式(Type_OK)加上系統副程式(UNLOCK),或是當密碼輸入錯誤時執行副程式(Type_Denied)加上系統副程式(LOCK)。

完成後記得在兩個密碼輸入副程式內加入MQTT推送功能,不管正確或是錯誤都會推送訊息到Topic(M5Stack_Log)。Uiflow使用到的功能列 : 建立密碼輸入副程式函式 、判斷邏輯函式 、 鍵盤模組函式UI元件MQTT功能文字導入副程式函式

密碼輸入正確電磁閥會作動一次並在Core上顯示正確,輸入錯誤顯示錯誤。

手機端的紀錄模組顯示密碼輸入正確與錯誤(含時間戳記)的資料。

Step 8. 門禁功能_指紋辨識

建立指紋辨識輸入功能以前,必須先建立儲存權限機制,使用UiFlow EVENT功能加入按鍵觸發,按下A時清除所有權限,按下B時設定權限存取。Uiflow使用到的功能列 : EVENT、UI元件指紋辨識模組函式庫導入副程式函式

指紋辨識的判別函式有別於前述之RFID與密碼輸入,可以直接使用Unit模組選單中的Finger模組函式庫設定判別函式,完成後記得在兩個指紋辨識副程式內加入MQTT推送功能,不管正確或是錯誤都會推送訊息到Topic(M5Stack_Log)。Uiflow使用到的功能列 : 指紋辨識模組函式庫判斷邏輯函式 、UI元件MQTT功能導入副程式函式

辨識到已存取權限的指紋,電磁閥會作動一次並在Core上顯示正確,無權限的指紋會顯示錯誤。(注意指紋辨識模組須將手指按壓在模組上一段時間方可存取資料)

手機端的紀錄模組顯示指紋是否含有權限(含時間戳記)的資料。

Step 9. 門禁功能_攝影機

檢視門禁攝影機影像,將APCAM插上TypeC傳輸線供電,APCAM上的電源指示燈開啟,將電腦的Wifi設定開啟,與APCAM連線後,打開瀏覽器在網址列輸入 : 192.168.4.1後即可串流影像。

結語

這次實作的門禁系統使用了RFID、指紋辨識、按鍵輸入等模組快速地建立起硬體設備,並使用MQTT通訊協定遠端遙控門鎖與建立門禁紀錄,受限於Blockly的功能有限,諸如AI人臉辨識等功能無法在UiFlow上實現,影像串流後的YOLO偵測功能將在下一篇「M5Stack IOT智慧門禁系統 - 進階篇」與大家做介紹。

(本文經同意轉載自CIRCUS Pi原文連結;責任編輯:林亮潔)

CIRCUS Pi

Author: CIRCUS Pi

分享有趣的創作與教學,提供Maker們創作的軍火庫,DIY 零件 | 套件| 工具。

Share This Post On

發表