M5Stack IOT智慧門禁系統 – 基礎篇(Blockly+MQTT)

商品簡介 :

這是一款使用M5Stack 套件完成的物聯網應用教具,市售常見的智慧門鎖功能不外乎指紋辨識、磁卡磁扣、密碼輸入等,M5Stack智慧門鎖使用M5Stack Core GREY 控制核心 使用不同感測器模擬身分授權(RFID、指紋辨識、密碼輸入),並透過MQTT協定完成遠端遙控開鎖與建立門禁紀錄。

規格 :

控制核心 : ESP32

支援擴充M5Stack Module、Unit、Faces、Base 模組

內置揚聲器,按鍵,LCD屏幕,電源/復位按鍵

大容量flash

3軸陀螺儀、3軸加速計與3軸磁力計

TF 卡插槽(最大可拓展16GB)

內置鋰電池

可拓展的引腳與接口

M-Bus總線母座 & 引腳

按鍵輸入模組(含GBA、Qwerty輸入模組)

RFID無線射頻辨識模組(I2C)

電容式面陣式半導體指紋辨識模組(UART)

DC/3A-30V繼電器模組(I/O)

DC12V 電磁閥

產品尺寸 : 30*20*5(cm)

零件清單:

使用軟體與線上服務連結

mqtt-dashboard : http://www.mqtt-dashboard.com/

開發者手冊 : https://reurl.cc/kVdjDK

前言

隨著進入智慧化時代後,雲端智能通訊裝置在我們的生活中已是非常的普及,本文章將使用M5Stack的UiFlow開發介面(Blocky)完成具備雲端紀錄功能的門禁系統,包含4種認證開鎖(手機遠端遙控開鎖、RFID磁卡、按鍵輸入密碼、指紋辨識),並透過MQTT協定傳送門禁紀錄。

硬體設定

門禁系統使用M5Stack Faces模組化套件包,FACES套件包含有一個控制核心(M5Stack Core)加上GBA、計算機、QWERTY鍵盤等不同的輸入裝置,在這裡我們使用計算機鍵盤模組進行按鍵輸入,特別注意更換Faces模組時請握住模組兩側拔插,避免排針毀損。接下來設定3個Unit 模組,M5Stack RFID模組使用的通訊界面是I2C,接入Core左側的Port-A(M5Stack 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 腳位圖

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

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

UiFlow 設定

Step 1 更新韌體 在建立連線以前,必須先下載官方燒錄器(M5Burner)將韌體版本更新至最新。接上傳輸線後燒錄器會顯示COM Port編號,選擇最新版本的CORE UiFlow韌體版本,按下”Burn”完成燒錄。

Step 2 建立連線

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

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

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

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

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

功能設計與程式撰寫

Step1 設定模組

在開始撰寫Blocky前導入這次使用的Unit模組函式庫,點選左下加號,繼電器模組選擇Port B,指紋辨識模組選擇Port C,RFID模組選擇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元件

Step3 設定網路連線與MQTT功能

設定網路與連線,這次的實作會透過Wifi連線網際網路並使用MQTT協定傳送每筆開門的資料並儲存於暫時的雲端空間,MQTT是一種基於「發布∕訂閱」機制的訊息傳輸協定,類似社群媒體或是YOUTUBE的發影片和訂閱機制。MQTT訊息發送端,相當於YOUTUBE的頻道或是IG的帳號,影片發布或是IG發文之後並不直接寄給訂閱者,而是交給伺服器或者第三方(broker),來統籌管理發布和訂閱事宜。每一個訊息來源(影片/文章內容)都有個唯一的主題名稱(影片名稱/文章名稱),代理人是個伺服器軟體,向伺服器發送主題的一方是發布者(publisher),從伺服器獲取主題的一方則是訂閱者(subscriber)。以下圖為例,傳送感測器資料的一邊是發布者,接收感測器資料的一邊則是訂閱者。每個感測器∕微控器的訊息都需要有個主題名稱以利識別,像下圖的主題A、B和C。代理人(broker)可儲存發布者的訊息,在發布者中斷連線的情況下,提供訂閱者最近更新的訊息。「訂閱者」需要告知代理人想要訂閱的主題,每當「發布者」傳入新訊息時,代理人就會依照主題,傳送給所有訂閱者。「發布者」和「訂閱者」都是用戶端,代理人是伺服器。由於兩個用戶端之間有伺服器當作中繼站,所以兩邊並不需要知道彼此的IP位址。引用自 : 超圖解物聯網IoT實作入門

圖片來源 : MQTT教學(一):認識MQTT

首先設定門禁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開關。

Step4 門禁紀錄

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

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

遠端遙控開關 : 工作原理為在手機端設定一個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螢幕上。

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

Step6 門禁功能_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上顯示正確,感應到錯誤的卡片顯示錯誤。

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

Step6 門禁功能_按鍵密碼輸入

設定按鍵輸入密碼功能,在主程式(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上顯示正確,輸入錯誤顯示錯誤。

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

Step7 門禁功能_指紋辨識

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

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

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

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

Step8 門禁功能_攝影機

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

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