(毕设3)基于esp32-cam单片机门禁系统设计(附源码,PPT,演示视频)

基于esp32-cam单片机门禁系统设计

摘 要

本文设计是利用esp32-cam单片机为核心,esp8266单片机为辅助,通过摄像头模块,oled显示屏模块,巴发云平台,rfid射频模块,微信小程序,热释电传感器模块,as608指纹传感器模块,将人脸识别技术,指纹识别技术,网页技术,射频技术相结合实现的门禁系统。

关键词:esp32-cam;传感器;门禁系统;esp8266

四个月时间完成的这个毕业设计,今天整理了一下内容,分享给需要的人,源码什么的放在了文章末尾的百度网盘链接里,如果未来有人看见这篇文章觉得它有帮助就帮忙点个赞收藏一下吧,嘿嘿,本人QQ:2535640842有问题欢迎找我

齐鲁师范学院

本科毕业论文(设计)

题目:基于esp32-cam单片机门禁系统设计

Design of access control system based on esp32-cam microcontroller

学 院

专 业 计算机科学与技术

班 级 云计算

学 号

姓 名 孙 浩

Q Q 2535640842

齐鲁师范学院教务处制

二O二二年 五 月

齐鲁师范学院学士学位论文原创性声明

本人郑重声明:所呈交的学位论文,是本人在导师的指导下进行研究工作所取得的成果。除文中已经注明引用的内容外,本论文不含任何其他个人或集体已经发表或撰写过的研究成果。对本文的研究做出重要贡献的个人和集体,均已在论文中作了明确的说明并表示了谢意。本声明的法律结果由本人承担。

学位论文作者签名: 孙浩

2022 年 5 月 19 日

齐鲁师范学院关于论文使用授权的说明

本人完全了解齐鲁师范学院有关保留、使用学士学位论文的规定,即:学校有权保留、送交论文的复印件,允许论文被查阅,学校可以公布论文的全部或部分内容,可以采用影印或其他复制手段保存论文。

指导教师签名: 论文作者签名: 孙浩

年 月 日 2022 年 5 月 19 日

目录

一、绪论

二、关键技术及协议

(一)开发语言

(二)通信协议

1.IEEE 802.11协议

2.MQTT协议

3.IIC协议

4.UART协议

5.HTTP协议

6.Socket协议

(三)软件

1.Pycharm

2.Upycraft

3.Thonny

4.Activemq

5.Node-red

6.Face Recognition

7.微信开发者工具

(四)硬件

1.esp32-cam

2.esp8266

3.Ly-01电磁锁

4.as608指纹传感器

5.mfrc522非接触式读写卡芯片

6.oled显示屏

7.Pir传感器

8.继电器

三、门禁的系统设计

(一)系统架构

(二)实现思路

1.人脸识别系统

2.网页控制系统

3.指纹识别系统

4.RFID射频识别系统

(三)流程图及电路设计

1.流程图

2.电路设计

四、门禁的软硬件实现

(一)人脸识别系统

(二)RFID射频识别系统

五、系统功能测试及部分展示

(一)人脸识别系统

(二)网页控制系统

(三)指纹识别系统

(四)RFID射频识别系统

六、总结

七、源代码,PPT及演示视频

及论文结构

本次设计使用的开发语言是micropython, micropython是小型的python语言编译器,它支持python语言在嵌入式设备上运行,micropython与python的语法一致,支持常用的python语法。micropython是计算机工程师和物理学家 Damien George 在2013年创建。micropython的程序无需编译就可以直接在开发板运行。通过干净、简单的Python代码来控制硬件,使用者不用使用像c或c++十分复杂的底层语言控制硬件控制硬件。

本文中的esp32-cam与esp8266使用的网络为wifi网络,wifi协议是ieee802.11协议的一个组成部分,用于无线局域网络的数据传输,弥补无线局域网络传输数据的不足,工作频段分为2.4Ghz和5Ghz,帧结构相对复杂。

MQTT是IBM设计,是一个基于客户端-服务器的消息发布/订阅传输协议[11],esp8266与node-red使用该协议,这个协议以TCP/IP协议为基石,易于实现,简单,使用比较少的代码和比较有限的带宽。

MQTT使用发布与订阅消息模式,一个发送者可以使多个消息者接受,使应用程序更加灵活,实现了对负载内容屏蔽的消息传输。消息的发布者、代理服务器、消息的订阅者是完成mqtt通信的三个组成部分。[8]主题和负载是是消息的两个部分。Mqtt通信模型如图 2-1 mqtt通信模型

(毕设3)基于esp32-cam单片机门禁系统设计(附源码,PPT,演示视频)

图 2-2 mqtt通信模型

esp32-cam与oled显示屏使用IIC协议,IIC协议使用两根信号线即可实现主设备和从设备的通信,开发板仅需要两个普通的输入输出引脚即可向oled屏传输消息,IIC协议分为数据帧和地址帧,IIC主要有硬件实现和软件实现两种方式,本次设计使用的是软件实现,软件IIC是程序控制SCL,SDA线输出高低电平,模拟i2c协议的时序。软件实现IIC一般较硬件实现IIC稳定。

esp8266与as608指纹传感器通信使用UART协议,Uart协议可以实现全双工传输和接收数据,是一个通用的通用串行数据总线,它的基本结构有六种比较常用的寄存器。

esp32-cam单片机与与巴法云平台通信,微信小程序与巴法云平台通信使用此协议,HTTP的中文名字叫超文本传输协议,它是基于TCP协议来传输网页和图片文件的协议,端口是80,HTTP比较常见的请求方法为GET和POST。文中esp32-cam使用post方法传输图片到云平台,微信小程序使用post方法请求云平台中的图片来给用户展示。

Socket协议

esp32-cam单片机与esp8266单片机通信使用Socket协议。Socket借助TCP协议实现,它是一个的中间软件抽象层。Socket其实就是一个通信模式,它能够简化通信,可以把复杂的通信协议变得简单,Socket相当于一个接口,用户只需要使用这个接口,而不需要考虑这个接口后面的东西是什么,只负责组织计算机双方的数据的传输。

PyCharm是python的集成开发环境,功能比较强大,是一个比较不错的软件。另外,pycharm还有一些高级的功能,比如版本控制、自动搭建web开发框架等。Pycharm在项目中用来运行人脸验证的服务端。

uPyCraft是一个用于micropython开发的IDE工具,支持比较主流操作系统。,uPyCraft在windows系列系统上都采用点击exe文件即可使用的方法。uPyCraft在项目中用来为单片机烧录micropython的固件,其较传统的固件烧录更加简单。

Thonny是一个用于micropython开发的IDE工具,支持比较主流操作系统。它里面有一个类似pip的工具包,对于下载一些库很友好,不用专门到官方网站里面下载,它是用tkinter开发出来的python ide,有一些不错的功能等功能,Thonny在项目中负责编写esp32-cam和esp8266单片机的程序,并且上传至单片机中。

Apache ActiveMQ是一个消息服务器。这个服务器可以使用C,Python,java等程序等连接。它是由java开发的,开源,支持多协议,可以使用STOMP通过websocket在Web应用程序之间交换消息,本文使用它作为mqtt服务器转发消息,node-red web端的mqtt消息通过它转发给esp8266单片机。

Node-red 是由IBM开发,是一种简化物联网开发的一种基于流的可视化编程平台编程工具,目前是OpenJS 基金会的成员之一。

Node-red的编程环境是在网页中,用户运行Node-red服务器,通过浏览器登录开发平台,现将已经写好node节点拉到工作区并用线连接节点创建数据流来实现一些功能。用户通过部署即可运行。创建的这个程序以JSON字符串的格式保存,用户可以分享、修改这个程序。

Face_recognition是一个人脸识别python库,由于这个项目开源可以免费使用,这个人脸识别库目前用的人比较多,国内教程比较多。用一些国外的人脸数据集进行测试,它的准确率很高,这个项目的配置运行有两种方式,pip和conda,pip下载十分复杂,conda下载类似linux中的yum下载,十分友好,因此采用conda下载该项目。

用于开发微信小程序和公众号网页开发,项目中主要用它完成监控画面的获取并在手机上展示。方便用户查看。

esp32-cam

esp32-cam是一个带有摄像头模块的单片机,可以在上面运行c或者micropython程序,可以作为一个系统进行独立的工作,它的正常供电电压在5v,它的电流最低为6mA。它在各种物联网场合都能使用,价格便宜,可用于很多物联网解决方案中。Esp32-cam的管脚定义,如图 2-2管脚定义

(毕设3)基于esp32-cam单片机门禁系统设计(附源码,PPT,演示视频)

图 2-2管脚定义

esp32-cam的最小系统图,如图 2-3 esp32-cam最小系统图

(毕设3)基于esp32-cam单片机门禁系统设计(附源码,PPT,演示视频)

图 2-3 esp32-cam最小系统图

esp8266

nodeMcu是一个esp8266开发板,工作电压为5v,有两个模拟输入引脚,10个pwm引脚,两个串行端口,有软件模拟的I²C端口,没有硬件I²C端口,4个spi端口,可以运行C,micropython程序,使用简单容易上手。引脚对应关系如图 2-4 esp8266引脚对应关系

(毕设3)基于esp32-cam单片机门禁系统设计(附源码,PPT,演示视频)

图 2-4 esp8266引脚对应关系

nodemcu模型图,如图 2-5 nodemcu模型图

(毕设3)基于esp32-cam单片机门禁系统设计(附源码,PPT,演示视频)

图 2-5 nodemcu模型图

Ly-01电磁锁的供电电压是12v,在介绍电磁锁的原理之前需要介绍一下电生磁的现象,一条通电的直导线空间会产生圆形磁场。这条导线中的电流越大,那么其产生的磁场越强。该导线产生的磁场是圆形,会围绕导线周围。

电磁锁的原理是电磁锁通电时,电磁锁的电磁线圈产生电磁力会把锁芯吸入锁内,即锁打开,通电结束,电磁力消失,弹簧把锁芯弹出,即锁关上。

As608指纹传感器有两个通信总线,分别为uart和usb,由于usb实现比较复杂,故本文采用uart通信总线与esp8266单片机进行通信,as608指纹传感器芯片是由杭州晟元芯片技术有限公司设计,它有8个控制接口,可以进行二次开发,指纹识别是一对多,指纹验证是一对一,一般它的控制指令一般分三种,包括指令包,数据包和结束包,实现指纹验证的思路一般先把指纹的图像录入进去,然后对录入的这个图像生成一些特征,然后根据这个特征做指纹的验证或者注册,或者删除。

5.mfrc522非接触式读写卡芯片

mfrc522芯片是一个非接触的读写卡的芯片,质量高,价格便宜。它和s50卡常用于门禁系统,水卡系统,饭卡系统,它有uart,iic,spi三种通信接口,通信速率可以达到13.56MHz,本文使用mfrc522芯片通过uart协议与esp32-cam单片机进行数据的交互,可以实现RFID射频系统识别开锁。Mfrc522芯片原理图如图2-6 mfrc522芯片原理。

(毕设3)基于esp32-cam单片机门禁系统设计(附源码,PPT,演示视频)

图 2-6 mfrc522芯片原理

oled是一种显示屏,其发光过程共分为4种,其功耗比较低,显示效果比led好,接线数量少于lcd屏,可以减少单片机端口的占用,本文采用oled显示屏代替lcd屏连接esp32-cam单片机用于显示相关信息。

热释电传感器PIR可以检测是否有人,常用于监控领域,PIR传感器里面的材料压电陶瓷类电介质存在自发极化特性,当这个材料表面受到人体红外辐射温度会升高,上面的电荷减少,减少的电荷经过一些特殊处理会变成电压信号输出,单片机收到这个信号会根据内部的逻辑作出相应的处理,当红外辐射消失,电荷则会恢复,电压消失。热释电原理如图2-7热释电原理图

(毕设3)基于esp32-cam单片机门禁系统设计(附源码,PPT,演示视频)

图 2-7 热释电原理图

8.继电器

继电器是一个低电流控制高电流的电子元器件,常由于各种物联网项目开发,当输入的电流达到一定阀值时,会将电路进行转换,本文使用esp8266的3.3v电压引脚输出电流,用来控制12v电压给电磁锁供电,当esp8266单片机收到开锁指令后,3.3v引脚输出电流,继电器收到小电流,控制12v外部电源给与电磁锁供电,锁开,其本质是用小的电流去控制大的电流运作的一种开关,起到自动调节、安全保护、转换电路的作用[4]。

门禁系统设计共分为四个子系统,分别为人脸识别系统,射频识别系统,网页控制系统以及指纹识别系统,本文重点探讨人脸识别系统和射频识别系统的设计与实现。人脸识别系统主要通过验证人脸开锁,射频系统主要通过验证卡开锁。

系统架构图如下,如图 3-1 门禁系统架构图

(毕设3)基于esp32-cam单片机门禁系统设计(附源码,PPT,演示视频)

图 3-1 门禁系统架构图

验证人脸,验证成功锁开,具体实现:人靠近房门,热释电传感器PIR向esp3-cam单片机发送指令,开始拍照,照片通过wlan传送后端windows服务器(采用socket协议),由后端python程序进行人脸识别,识别成功将开门指令返回esp32-cam,收到开门指令后,esp32-cam向esp8266发送开门指令, esp8266连接继电器模块,继电器模块外接电磁锁和12v电源,[6]esp8266收到指令,发送指令给由继电器模块,继电器模块控制电源模块向电磁锁供电,锁开,人进入后,红外感应装置失去目标,程序恢复等待状态。esp8266与esp32-cam同处一个wlan网络中,工作频段为2.4Ghz,IEEE 802.11g通讯协议,为了保证安全性,在esp8266与esp32-cam中设置认证字段,在发送指令前需进行认证,在esp32-cam向服务器发送照片的同时也将照片通过http协议发送至巴法云平台,开发微信小程序对接巴法云平台展示图片,实现监控功能。

登录网页系统,打开开关按钮,即可实现电磁锁的开与关。具体实现:esp8266连接继电器,继电器连接电磁锁和12v电源,网页向esp8266收到指令,发送指令给继电器模块,继电器控制电源模块向电磁锁供电,锁开或锁关,网页与esp8266使用mqtt协议进行通信,mqtt服务器使用activemq,网页开发使用node-red,运行node-red服务器进入可视化编程平台,对接mqtt服务器,添加按钮,设置发送的消息内容,完成之后对接activemq,在esp8266连接activemq,设置连接密码,订阅主题,根据回调函数收到的指令做出电磁锁相应的操作。

验证指纹,验证成功锁开,具体实现:该系统无需使用esp32-cam,使用esp8266连接继电器模块,继电器外接电磁锁和12v电源,esp8266连接as608指纹识别模块,通信协议采用UART,手指按压传感器,指纹识别成功则锁开,不成功则锁不开,若指纹识系统实现增加指纹,删除指纹功能与清空指纹功能则需要与网页控制系统做联动,通信协议为MQTT。

验证IC卡,验证成功锁开,具体实现:esp8266连接mfrc522非接触读写卡芯片,共占有单片机7个引脚,通过uart协议进行通信,该系统可以读写s50卡,先写s50卡,写完后当再次读取到这个s50卡后会向esp8266发送开锁指令,如果读取到的不是写过的s50卡,则不会发送开锁指令给继电器。

人脸识别流程,如图 3-2 人脸识别流程图

(毕设3)基于esp32-cam单片机门禁系统设计(附源码,PPT,演示视频)

图 3-2 人脸识别流程图

鉴于另外三个方案流程图类似,略过。

esp32-cam 引脚2连红外传感器,引脚6,7连接oled显示屏。

esp8266 引脚5连继电器,继电器连电源,电磁锁,引脚1,3连as608指纹传感器,引脚14, 12, 13, 15, 2连mrff522读写卡。

实现

软件:thonny,pycharm,micropython,微信小程序开发工具,巴法云平台。

硬件:红外传感器,oled屏,电源模块,数据线,esp32-cam单片机,esp8266单片机,路由器,继电器,电磁锁。

人脸识别子系统使用micropython语言开发,云平台主要负责接受esp32-cam发来的图片,微信小程序开发工具主要负责开发微信小程序,展示从云平台获得的图片,数据线用来烧录代码,oled屏用来展示认证是否成功的消息,红外传感器主要负责检测是否有人,有人的话唤醒esp32-cam单片机拍照,路由器充当网关,负责传输无线数据,电源模块用来给esp8266单片机供电。esp8266负责连接继电器与电磁锁。

部分关键代码:

人脸验证部分

if len(unknown_face_encodings) > 0:

        #在以存在的人脸库搜索特征码,匹配上则认证成功,匹配不上则验证失败

        for face_who in face_list:

            match_results = compare_faces(

                [face_who[0]], unknown_face_encodings[0])

            if match_results[0]:

                is_name = face_who[1]

图像监控部分

#api接口,云平台的接口

API='http://images.bemfa.com/upload/v1/upimages.php'

#密钥,用于和云平台做认证

uid="ecedeb645ec8090652704f0608dad074"

#主题,相当于MQTT中的主题

topic= "123456"

#构造http的请求头

headers={"ContentType":"image/jpg","Authtopic":topic,"Authorization":uid}

#初始化相机参数,捕捉图片的大小,格式等

camera.init(0, format=camera.JPEG)

camera.framesize(camera.FRAME_SVGA)

camera.speffect(camera.EFFECT_NONE)

camera.whitebalance(camera.WB_NONE)

#连接wifi,门禁系统设计底层网络为wlan

def connectWifi(ssid,passwd):

    global wlan

    wlan=network.WLAN(network.STA_IF)

    wlan.active(True)

    wlan.disconnect()

    wlan.connect(ssid,passwd)

    while(wlan.ifconfig()[0]=='0.0.0.0'):

        time.sleep(1)

connectWifi(SSID,PASSWORD)

#调用micropython的urequest库向云平台以http协议发送图像

def do_camera():

   buf = camera.capture()

   response = urequests.post(API, data=buf,headers = headers)

   print(response.text)

   print(response.json())

   time.sleep(40)

#不间断发送,实际应该检测到pir传感器的信号时在进行发送,为了简化展示此代码处略过。

while True:

    do_camera()

软件:thonny,pycharm,micropython。

硬件:s50卡,mfrc522非接触式读写卡芯片,电源模块,数据线,esp32-cam单片机,esp8266单片机,继电器,电磁锁。

RFID子系统使用microython语言开发,Thonny负责编写esp32-cam,esp8266端代码,mfrc522非接触式读写卡芯片主要负责读写s50卡,s50卡用来存储读写卡芯片写的信息。路由器充当二层网关,负责esp32-cam与esp8266的通信,数据线用来烧录代码,esp8266负责连接继电器与电磁锁。

部分关键代码:

读卡

def do_read():

    rdr = mfrc522.MFRC522(14, 12, 13, 15, 2) ###连接单片机的pin引脚

    index = True  ###用于标记是否读到卡片

    try:

        while True:

            (stat, tag_type) = rdr.request(rdr.REQIDL)

            if stat == rdr.OK:

                (stat, raw_uid) = rdr.anticoll()

                if stat == rdr.OK:

                    index = False

                    if rdr.select_tag(raw_uid) == rdr.OK:

                        key = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]

                        if rdr.auth(rdr.AUTHENT1A, 8, key, raw_uid) == rdr.OK:

                            rdr.stop_crypto1()

                            return 1  ####读取到已认证的id卡返回数字1,后续开锁函数开锁的条件值

                        else:

                            print("Authentication error")

为了验证系统的正常运行,本文做了人脸识别系统,射频识别系统,网页控制系统以及指纹识别系统的测试,下面是具体的结果以及部分截图展示。

esp32-cam连接wifi网络,正常。

esp32-cam获取ip地址,正常。

服务端人脸身份验证,正常。

esp32-cam与人脸认证服务端通信,正常。

服务端人脸身份验证,正常。

Pir红外传感器检测到人唤醒esp32-cam,正常。

esp32-cam 拍照上传云平台,正常。

微信小程序展示监控图片,正常。

esp32-cam与esp8266通信,正常。

esp32-cam与oled屏通信,正常。

face_recognition库调用,正常。

微信小程序监控画面展示,如图 5-1小程序端监控查看

(毕设3)基于esp32-cam单片机门禁系统设计(附源码,PPT,演示视频)

图 5-1小程序端监控查看

esp8266连接wifi网络,正常。

esp8266获取IP地址,正常。

Activemq转发MQTT数据,正常。

esp8266连接activemq服务器,正常。

Node-red连接activemq服务器,正常。

Node-red部署web项目,正常。

用户登录web网页,正常。

Web网页与esp8266通信,正常。

Node-red web后端如图5-2 node-red web后端

(毕设3)基于esp32-cam单片机门禁系统设计(附源码,PPT,演示视频)

图5-2 node-red web后端

As608指纹传感器与esp8266单片机连线,正常。

esp8266单片机与As608指纹传感器通信,正常。

esp8266单片机控制As608指纹传感器注册,删除,验证指纹,正常。

as608指纹传感器读取指纹,如图 5-3 指纹读取

(毕设3)基于esp32-cam单片机门禁系统设计(附源码,PPT,演示视频)

图 5-3 指纹读取

(四)RFID射频识别系统

esp32-cam连接wifi网络,正常。

esp32-cam获取ip地址,正常。

esp32-cam与mfrc522读写卡通信,正常。

mrff522读写卡读,写s50卡,正常。

mrff522读取s50卡,如图 5-4 mrff522射频芯片读取s50卡片信息

(毕设3)基于esp32-cam单片机门禁系统设计(附源码,PPT,演示视频)

图 5-4 mrff522射频芯片读取s50卡片信息

六、总结

本文门禁系统设计共有4个子系统。通过借助esp8266单片机,esp32-cam单片机,红外传感器,继电器,电磁锁等硬件以及micropython, face_recognition,node-red,微信小程序等软件之间的相互配合实现了人脸识别系统、射频识别系统、网页控制系统以及指纹识别系统这四个子系统的设计。本文重点设计并实现人脸识别门禁系统和射频识别门禁系统。本系统存在一定的缺点,单片机并没有实现多进程多线程处理任务的功能,处理多个进程或线程任务时不够友好,后续需要进一步提高该系统的性能。

七、源代码,PPT及演示视频

链接:https://pan.baidu.com/s/1emct2jyJMb8tcZvm1G4XDg
提取码:h2zy

Original: https://blog.csdn.net/qq_45891048/article/details/125584937
Author: “孙小浩
Title: (毕设3)基于esp32-cam单片机门禁系统设计(附源码,PPT,演示视频)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/637109/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球