M5Stack IOT智能门禁系统–基础篇(Blockly+MQTT)

电子说

1.2w人已加入

描述

随着进入智能化时代后,云端智能通讯装置在我们的生活中已是非常的普及,本文章将使用M5Stack的UiFlow开发接口(Blocky)完成具备云端纪录功能的门禁系统,包含4种认证开锁(手机远程遥控开锁、RFID磁卡、击键密码、指纹辨识),并透过MQTT协议传送门禁纪录。

硬件配置

门禁系统使用M5Stack Faces模块化套件包,FACES套件包含有一个控制核心(M5Stack Core)加上GBA、计算器、QWERTY键盘等不同的输入设备,在这里我们使用计算器键盘模块进行击键,特别注意更换Faces模块时请握住模块两侧拔插,避免排针毁损。

接下来设定3个Unit 模块,M5Stack RFID模块使用的通讯界面是I2C,接入Core左侧的Port-A,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))。

IOT

三种Unit模块接线配置完成后,接着制作连接继电器模块的电路(如图)控制电磁锁,这次使用的电磁锁工作电压为DC 12V,M5Stack 继电器模块最高支持DC 30V 3A 的电源输入。

IOT

配置完继电器电路后硬件配置就大功告成了,本次撰写程序将使用M5Stack官方开发界面Uiflow,由于目前UiFlow脱机主机版本更新速度缓慢,笔者建议如果无线Wifi速度够快,尽量使用远程写入Blocky,接下来将介绍透过Wifi无线的方式对M5Stack Core进行程序撰写。

UiFlow 设定

Step 1 更新韧体

在建立联机以前,必须先下载官方刻录器(M5Burner)将韧体版本更新至最新。接上传输线后刻录器会显示COM Port编号,选择最新版本的CORE UiFlow韧体版本,按下”Burn”完成刻录。

IOT

Step 2 建立联机

更新完韧体后,将Core切换至”Internet Mode”,选择”Wi-Fi via AP”,进入联机页面后会看到地球符号闪烁。

IOT

打开笔电的Wifi搜寻AP热点SSID名称,每台Core的名称都不一样笔者这里预设是M5-FB50 ,成功联机后开启浏览器分页,在搜寻栏输入 : [192.168.4.1]导入联机设定页面,输入欲联机的SSID与密码。

IOT

成功联机后浏览器显示如下图,Core的显示器左上角的Wifi与联机的图标皆会显示绿色,下方会显示远程联机所使用到的API KEY,透过这样的设定,Core会存取SSID与密码,之后使用网络模式就可以直接联机,使用过多台AP也可以至Setup > Server select 进行选择。

IOT

接下来打开计算机的浏览器,重新连上因特网,进入Uiflow 网页版,将API KEY 填入,选择Core的类型后按下”OK”。

IOT

最下方的状态栏会显示目前建立联机装置的API KEY ,并显示”Connected”,表示成功远程联机,可以开始使用Blocky积木撰写程序。

功能设计与程序撰写

Step1 设定模块

在开始撰写Blocky前导入这次使用的Unit模块函式库,点选左下加号,继电器模块选择Port B,指纹辨识模块选择Port C,RFID模块选择Port A ,选定模块后记得按下右下角的OK确认。

IOT

导入模块后会显示在左方显示面板,打开Unit选单确认是否正确导入模块。

IOT

Step 2 撰写门禁系统常用之子程序

导入模块后,为了避免程序过于冗长首先撰写门禁系统会重复使用到的几个子程序。

1.系统默认状态(STAY) : 在执行完任何程序后,回归此默认程序状态。击键的显示功能与AC清除功能建立于此,找到AC按钮的初始值(intial value)给予按下按钮时之定义。Uiflow使用到的功能列 : 建立函式、判断逻辑函式 、 键盘输入功能 、UI组件、继电器复归 。

IOT

2.身分确认正确时之动作(UNLOCK) : 透过RFID、指纹辨识、密码输入、远程遥控时如果身分确认正确时之动作,为了确保继电器实作之安全在继电器开启后3秒自动关闭继电器。Uiflow使用到的功能列 : 建立函式、蜂鸣器、判断逻辑函式、UI组件、继电器开启与复归。

IOT

3.身分确认错误时之动作(LOCK) : 透过RFID、指纹辨识、密码输入、远程遥控时如果身分确认正确时之动作。Uiflow使用到的功能列 : 建立函式、蜂鸣器、判断逻辑函式、UI组件。

IOT

Step3 设定网络联机与MQTT功能

设定网络与联机,这次的实作会透过Wifi联机因特网并使用MQTT协议传送每笔开门的数据并储存于暂时的云端空间,MQTT是一种基于「发布∕订阅」机制的讯息传输协议,类似社群媒体或是YOUTUBE的发影片和订阅机制。

MQTT讯息发送端,相当于YOUTUBE的频道或是IG的账号,影片发布或是IG发文之后并不直接寄给订阅者,而是交给服务器或者第三方(broker),来统筹管理发布和订阅事宜。每一个讯息来源(影片/文章内容)都有个唯一的主题名称(影片名称/文章名称),代理人是个服务器软件,向服务器发送主题的一方是发布者(publisher),从服务器获取主题的一方则是订阅者(subscriber)。

以下图为例,传送传感器数据的一边是发布者,接收传感器数据的一边则是订阅者。每个传感器∕微控器的讯息都需要有个主题名称以利识别,像下图的主题A、B和C。代理人(broker)可储存发布者的讯息,在发布者中断联机的情况下,提供订阅者最近更新的讯息。

「订阅者」需要告知代理人想要订阅的主题,每当「发布者」传入新讯息时,代理人就会依照主题,传送给所有订阅者。「发布者」和「订阅者」都是客户端,代理人是服务器。由于两个客户端之间有服务器当作中继站,所以两边并不需要知道彼此的IP地址。

IOT

首先设定门禁Core的Wifi联机功能,打开Uiflow的Advanced选单,选择Network中的“Connect ti Wi-Fi SSID”” PASSWORD ”并填入欲架设门禁系统位置可以联机到的AP名称与密码。

为了确认Wifi是否联机,加上一个判断逻辑函式与屏幕的UI卷标组件,当Wifi联机时呈现绿色,为联机时呈现红色,网络联机设定结束。Uiflow使用到的功能列 : 判断逻辑函式、Wifi设定、UI组件。

IOT

门禁系统使用的MQTT Broker是HiveMQ 提供给所有使用者的免费broker,

打开浏览器进到Public Broker 里面查看Broker的 Host 与TCP Port,

接下来打开UiFlow的Advanced选单,使用MQTT主机设定与开启MQTT功能,将Broker的TCP通讯端口与server填入,client设定一个用户名称,设定完成后Core就会在Wifi联机的情况下开启MQTT服务。Uiflow使用到的功能列 : MQTT功能

IOT

IOT

设定接收/发送MQTT讯息的手机端,在GOOGLE PLAY或是Apple app store 搜寻IoT MQTT Panel并下载开启,IOT MQTT Panel 是一款轻巧方便的MQTT工具,内含许多已经设定好的Ui模板,付费的版本可以提供实时串联手机通知的服务,在接收到新讯息的时候跳出通知。

IOT

开启App后先安照先前设定CORE的broker TCP Port 跟 server (BrokerWeb)依序填入,Client同样设定一个用户的名字,这里记得增加一个功能Dashboard否则无法创建,笔者这里使用SmartLock_log 。

IOT

创立好Dashboard以后接着建立UI功能模块(Add panel),我们总共要搭建两个属性的功能模块,一个是纪录门禁触发的Text Log,一个则是远程遥控的Switch开关。

IOT

Step4 门禁纪录

建立一个门禁记录功能,当门禁系统触发确认身分功能时发送确认结果至此纪录,工作原理为建立一个Topic(笔者这里设定为M5Stack_Log),提供门禁系统Core发送讯息至此Topic。功能模块设定 : 调整显示讯息的数量与字体大小、时间戳,手机实时通知功能(Enable notification)必须付费才能使用,设定完成后按下SAVE即完成创建。

IOT

Step5.门禁功能——远程遥控开锁

远程遥控开关 : 工作原理为在手机端设定一个Topic,根据手机上的UI开关状态(ON/OFF)发出一则msg(笔者这里取作unlock/lock),门锁上的Core透过订阅手机端的Topic读取msg,即可控制门锁开关。

下方的勾选功能列,可以把下方的Show received timestamp以及Show sent timestamp勾选起来纪录时间点,手机实时通知功能(Enable notification)必须付费才能使用,设定完成后按下SAVE即完成创建。

IOT

开启Uiflow,建立远程遥控功能,设定门禁CORE订阅broker的Topic(Lock_Action)当手机端开启开关时执行开锁子程序(UNLOCK)打开门锁,并传送门禁纪录至手机的Topic(M5Stack_Log),讯息名称为Remote_OPEN,注意名称的大小写是否正确,输入错误的Topic会导致无法接收与传送讯息。Uiflow使用到的功能列 : MQTT功能、判断逻辑函式、文字、导入子程序函式。

IOT

远程遥控结果成功电磁阀会作动一次,并显示于Core屏幕上。手机端的纪录模块会显示含时间戳的数据。

IOT

Step6 门禁功能——RFID

设定RFID门禁功能,首先在目前的MQTT设定功能底下加入一个主程序(Main)循环,作为触发判断的主程序,并加入当有RFID卡靠近时功能触发函式。Uiflow使用到的功能列 : MAIN函式建立、判断逻辑函式 、RFID函式库

IOT

建立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功能、文字、导入子程序函式。

IOT

RFID辨识功能成功电磁阀会作动一次并在Core上显示正确,感应到错误的卡片显示错误。

手机端的纪录模块显示正确与错误(含时间戳)的资料。

IOT

Step6 门禁功能——按键密码输入

设定击键密码功能,在主程序(Main)循环下加入一个按键功能触发函式,当键盘输入的数字大于等于7个时触发。Uiflow使用到的功能列 : 函式、判断逻辑函式、文字 、键盘模块函式。

IOT

建立密码输入的判断函式(Password_decision)、密码输入子程序(RFID_OK)、密码输入子程序(RFID_Denied)。判断函式(Password_decision)作为当密码输入正确时执行子程序(Type_OK)加上系统子程序(UNLOCK),或是当密码输入错误时执行子程序(Type_Denied)加上系统子程序(LOCK)。

完成后记得在两个密码输入子程序内加入MQTT推送功能,不管正确或是错误都会推送讯息到Topic(M5Stack_Log)。Uiflow使用到的功能列 : 建立密码输入子程序函式、判断逻辑函式 、 键盘模块函式、UI组件、MQTT功能、文字、导入子程序函式。

IOT

密码输入正确电磁阀会作动一次并在Core上显示正确,输入错误显示错误。

手机端的纪录模块显示密码输入正确与错误(含时间戳)的数据。

IOT

Step7 门禁功能——指纹辨识

建立指纹辨识输入功能以前,必须先建立储存权限机制,使用UiFlow EVENT功能加入按键触发,按下A时清除所有权限,按下B时设定权限存取。Uiflow使用到的功能列 : EVENT、UI组件、指纹辨识模块函式库、导入子程序函式。

IOT

指纹辨识的判别函式有别于前述之RFID与密码输入,可以直接使用Unit模块选单中的Finger模块函式库设定判别函式,完成后记得在两个指纹辨识子程序内加入MQTT推送功能,不管正确或是错误都会推送讯息到Topic(M5Stack_Log)。Uiflow使用到的功能列 : 指纹辨识模块函式库、判断逻辑函式、UI组件、MQTT功能、导入子程序函式。

IOT

辨识到已访问权限的指纹,电磁阀会作动一次并在Core上显示正确,无权限的指纹会显示错误。(注意指纹辨识模块须将手指按压在模块上一段时间方可存取数据)

手机端的纪录模块显示指纹是否含有权限(含时间戳)的资料。

IOT

Step8 门禁功能——摄影机

检视门禁摄影机影像,将APCAM插上TypeC传输线供电,APCAM上的电源指示灯开启,将计算机的Wifi设定开启,与APCAM联机后,打开浏览器在网址列输入 : 192.168.4.1后即可串流影像。

IOT

小结

这次实作的门禁系统使用了RFID、指纹辨识、击键等模块快速地建立起硬设备,并使用MQTT通讯协议远程遥控开启门锁与建立门禁纪录,受限于Blocky的功能,像是AI人脸辨识等功能无法在UiFlow上实现,影像串流后的YOLO侦测进阶功能将在后续与大家做介绍。

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分