0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_cVC5iyAO 来源:易心Microbit编程 2023-01-05 10:20 次阅读

随着进入智能化时代后,云端智能通讯装置在我们的生活中已是非常的普及,本文章将使用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))。

d942b8a8-8c4d-11ed-bfe3-dac502259ad0.png

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

d94b0382-8c4d-11ed-bfe3-dac502259ad0.png

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

UiFlow 设定

Step 1 更新韧体

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

d9522a04-8c4d-11ed-bfe3-dac502259ad0.png

Step 2 建立联机

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

d9771620-8c4d-11ed-bfe3-dac502259ad0.png

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

d9841ce4-8c4d-11ed-bfe3-dac502259ad0.png

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

d99c0494-8c4d-11ed-bfe3-dac502259ad0.png

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

d9a90ebe-8c4d-11ed-bfe3-dac502259ad0.png

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

功能设计与程序撰写

Step1 设定模块

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

d9b8593c-8c4d-11ed-bfe3-dac502259ad0.png

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

d9c2f31a-8c4d-11ed-bfe3-dac502259ad0.png

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

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

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

d9cb3976-8c4d-11ed-bfe3-dac502259ad0.png

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

d9d42982-8c4d-11ed-bfe3-dac502259ad0.png

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

d9e9e7a4-8c4d-11ed-bfe3-dac502259ad0.png

Step3 设定网络联机与MQTT功能

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

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

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

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

d9f1dfb8-8c4d-11ed-bfe3-dac502259ad0.png

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

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

d9fb0638-8c4d-11ed-bfe3-dac502259ad0.png

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

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

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

da06425a-8c4d-11ed-bfe3-dac502259ad0.png

da0e8f50-8c4d-11ed-bfe3-dac502259ad0.png

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

da171620-8c4d-11ed-bfe3-dac502259ad0.png

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

da1df558-8c4d-11ed-bfe3-dac502259ad0.png

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

da2a1a40-8c4d-11ed-bfe3-dac502259ad0.png

Step4 门禁纪录

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

da322082-8c4d-11ed-bfe3-dac502259ad0.png

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

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

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

da3c958a-8c4d-11ed-bfe3-dac502259ad0.png

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

da481c98-8c4d-11ed-bfe3-dac502259ad0.png

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

da51f92a-8c4d-11ed-bfe3-dac502259ad0.png

Step6 门禁功能——RFID

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

da595d3c-8c4d-11ed-bfe3-dac502259ad0.png

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

da6302a6-8c4d-11ed-bfe3-dac502259ad0.png

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

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

da6c3452-8c4d-11ed-bfe3-dac502259ad0.png

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

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

da7fc454-8c4d-11ed-bfe3-dac502259ad0.png

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

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

da863d48-8c4d-11ed-bfe3-dac502259ad0.png

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

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

da92ecc8-8c4d-11ed-bfe3-dac502259ad0.png

Step7 门禁功能——指纹辨识

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

daab9c14-8c4d-11ed-bfe3-dac502259ad0.png

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

dab3f6f2-8c4d-11ed-bfe3-dac502259ad0.png

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

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

dabb7968-8c4d-11ed-bfe3-dac502259ad0.png

Step8 门禁功能——摄影机

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

dacf155e-8c4d-11ed-bfe3-dac502259ad0.png

小结

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

审核编辑:汤梓红

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

    关注

    383

    文章

    5776

    浏览量

    234481
  • IOT
    IOT
    +关注

    关注

    185

    文章

    3976

    浏览量

    193093
  • MQTT
    +关注

    关注

    5

    文章

    534

    浏览量

    21932
  • 智能门禁系统

    关注

    0

    文章

    14

    浏览量

    4957

原文标题:M5Stack IOT智能门禁系统 – 基础篇(Blockly+MQTT)

文章出处:【微信号:易心Microbit编程,微信公众号:易心Microbit编程】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    从0到1学习M5stack系列教程(一)Hello World

    `是否你已经厌倦了传统的开发板,是否你需要一种更快捷的方式来堆叠硬件、编写程序?本系列教程带你认识一种全新的开发硬件——M5Stack。上图就是M5Satck和具备各种功能的模块,根据使用需要进行
    发表于 08-09 20:00

    从0到1学习M5Stack系列教程(三)扫描WiFi网络

    M5Stack支持wifi因此可以方便的连接到WiFi网络,本节介绍如何使用M5Stack扫描附近的WiFi网络,显示到屏幕上。以下内容主要涉及到WiFi库的使用以及简单的屏幕菜单绘制
    发表于 08-22 17:25

    M5Stack学习Arduino(四)WebServer服务

    本帖最后由 M5Stack 于 2019-8-26 11:03 编辑 M5Stack内置了TF卡槽,因此可以方便的读写文件,本节将利用M5Stack做一个Markdown的网络服务器
    发表于 08-26 10:42

    适用于Arduino和M5Stack的MH-Z19B二氧化碳传感器

    描述MH-Z19B 用于 M5StackMH-Z19B是一款易于使用的二氧化碳传感器,适用于 Arduino 和 M5Stack。我做了这个板来检查工作中的二氧化碳水平。通过将其安装在 M5Stack 旁边,您可以节省空间并消除
    发表于 08-16 07:03

    是否有机会看到ESP BASIC的ESP32或M5Stack版本?

    我们是否有机会看到 ESP BASIC 的 ESP32 或 M5Stack 版本?如果在 M5Stack 中安装带有 FACES 键盘的解释器,那将是不可思议的!
    发表于 05-10 08:22

    M5Stack设备装饰圣诞树

    电子发烧友网站提供《用M5Stack设备装饰圣诞树.zip》资料免费下载
    发表于 11-18 09:45 0次下载
    用<b class='flag-5'>M5Stack</b>设备装饰圣诞树

    配备M5Stack智能工厂

    电子发烧友网站提供《配备M5Stack智能工厂.zip》资料免费下载
    发表于 12-09 10:19 0次下载
    配备<b class='flag-5'>M5Stack</b>的<b class='flag-5'>智能</b>工厂

    M5Stack的音频频谱显示

    电子发烧友网站提供《带M5Stack的音频频谱显示.zip》资料免费下载
    发表于 12-28 11:32 0次下载
    带<b class='flag-5'>M5Stack</b>的音频频谱显示

    基于M5Stack的抗COVID安全门

    电子发烧友网站提供《基于M5Stack的抗COVID安全门.zip》资料免费下载
    发表于 02-09 09:55 0次下载
    基于<b class='flag-5'>M5Stack</b>的抗COVID安全门

    Bareboat Necessities的M5Stack坚韧Arduino船展示

    电子发烧友网站提供《Bareboat Necessities的M5Stack坚韧Arduino船展示.zip》资料免费下载
    发表于 06-12 14:30 0次下载
    Bareboat Necessities的<b class='flag-5'>M5Stack</b>坚韧Arduino船展示

    乐高机械组M5Stack温度监控器

    电子发烧友网站提供《乐高机械组M5Stack温度监控器.zip》资料免费下载
    发表于 06-14 15:27 0次下载
    乐高机械组<b class='flag-5'>M5Stack</b>温度监控器

    M5Stack智能植物浇水开源项目

    电子发烧友网站提供《M5Stack智能植物浇水开源项目.zip》资料免费下载
    发表于 06-14 09:58 2次下载
    <b class='flag-5'>M5Stack</b><b class='flag-5'>智能</b>植物浇水开源项目

    M5Stack的工厂监控系统

    电子发烧友网站提供《带M5Stack的工厂监控系统.zip》资料免费下载
    发表于 06-26 11:43 1次下载
    带<b class='flag-5'>M5Stack</b>的工厂监控<b class='flag-5'>系统</b>

    M5Stack圣诞雪球开源分享

    电子发烧友网站提供《M5Stack圣诞雪球开源分享.zip》资料免费下载
    发表于 06-28 10:26 0次下载
    <b class='flag-5'>M5Stack</b>圣诞雪球开源分享

    StickC M5Stack LED闪烁

    电子发烧友网站提供《StickC M5Stack LED闪烁.zip》资料免费下载
    发表于 06-29 11:35 0次下载
    StickC <b class='flag-5'>M5Stack</b> LED闪烁