基于ESP32的指纹考勤系统设计与实现
2021-04-01谭毓鸿王勋黄伟淇柯金河郑健欣陶铭
谭毓鸿,王勋,黄伟淇,柯金河,郑健欣,陶铭
(东莞理工学院计算机科学与技术学院,东莞523808)
0 引言
考勤管理是企业和学校都十分重视的统计工作,它不仅是企业衡量工作者的上班情况和工作状态的一个途径,也是学校对学生进行统一管理的有效手段。随着企业和学校的规模扩大,考勤管理花费的时间成本和人力成本也会增加。而一个高效的考勤方式无疑能很好地减少企业和学校在考勤管理上的相关成本。最近几年,鉴于数据不真实,统计工作量大等多方面不足,许多以射频IC卡考勤、纸质打卡机为代表的传统考勤设备及考勤方式开始逐渐被市场淘汰。与此同时,基于指纹识别技术和人脸图像识别技术等考勤技术,由于其有着更好的数据真实性和考勤有效性,而受到大量企业和学校的欢迎[1]。其中,鉴于指纹的独特性,指纹识别技术无疑是目前最能保证数据真实性的一种。此外,在企业智能办公和学校智能化教学的发展趋势下,利用物联网的功能把考勤数据发送至服务器端存储,不仅可以降低考勤设备的体积要求,同时可以利用服务器对考勤数据进行处理汇总,进一步提高了考勤数据统计的效率,这极大地降低了企业和学校在考勤方面的相关成本[2-3]。
本系统可分为三个部分,分别是ESP3指纹考勤机的主控端,MQTT服务器和Nginx服务器的服务器端,和微信小程序的客户端。其中ESP32指纹考勤机器通过MQTT连接到MQTT服务器,通过MQTT完成指纹的录入,考勤和指纹信息的管理,微信小程序和MQTT服务器同时有MQTT连接和HTTP连接,MQTT连接主要是配合ESP32完成指纹录入的功能,HTTP连接主要是用来实现考勤信息的查询统计和被考勤者的信息管理。
1 相关技术
1.1 MQTT通信协议
本系统选用的MQTT服务器是EMQX Enterprise企业级物联网MQTT消息平台,该平台支持百万级物联网设备一站式接入、MQTT&CoAP多协议处理以及低时延实时消息通信。通过下载到该软件包后部署,部署后获取到试用许可证后,即可以启动EMQ服务。启动EMQ服务后,可通过IP+端口的方式进行访问[4]。系统通过微信小程序连接EMQ服务器完成MQTT通信,再配合完成指纹录入过程的指纹录入功能,同时让ESP32主控端与EMQ服务器建立EMQ连接,通过MQTT协议来完成指纹录入和指纹考勤的数据通信。
1.2 MySQL数据库
本系统采用MySQL数据库,主要有两个地方会操作到数据库。一是通过EMQ的规则引擎来进行指纹数据的录入和指纹考勤数据的存储,二是微信小程序发起的请求会被PHP处理然后调用MySQL进行操作,主要用途有考勤记录的查询和考勤对象的数据查询、修改和删除[5]。
其中本系统在MySQL建立的数据库主要由两张表构成,被考勤者指纹信息存储表及指纹考勤信息存储表。两张表的数据定义如下,被考勤者指纹信息存储表包含了主键id、姓名、指纹ID以及指纹是否录入的标志。指纹考勤信息存储表是对考勤信息进行记录的数据表,主要包含主键、指纹ID以及打开时间和结束打开的时间。
2 系统软硬件设计方案
本课题的指纹考勤机分成三个部分,分别是ESP32指纹考勤机的主控端,MQTT服务器和Nginx服务器的服务器端,以及微信小程序的客户端。其中ESP32指纹考勤机器通过MQTT连接到MQTT服务器,通过MQTT完成指纹的录入,考勤和指纹信息的管理,微信小程序和MQTT服务器同时有MQTT连接和HTTP连接,MQTT连接主要是配合ESP32完成指纹录入的功能,HTTP连接主要是用来实现考勤信息的查询统计和被考勤者的信息管理[6]。系统框架结构如图1所示。
图1系统框架结构
2.1 ESP32主控端设计
采用ESP32的串口0来进行系统调试输出,串口1和AS608通信共同完成指纹录入和指纹的验证工作,通过IIC和OLED屏幕来进行IIC通信完成考勤系统的信息显示。ESP32主控端的外围电路由一个AS608的串口指纹传感器、IIC协议的OLED屏幕以及一些GPIO口的引脚和按键共同组成。如图2所示,其中的AS608通过串口1来进行数据通信,OLED屏幕通过IIC完成通信工作[7]。
图2 ESP32硬件连接图
2.2 ESP32蓝牙智能配网设计
智能配网是影响用户体验的关键。一旦设备联机,不论是连接在家庭局域网络还是接入云端,消费者都可体验更好的服务,轻松地进行设备的控制及监测。ESP32可以实现多种配网方式,本系统将以蓝牙配网方式通过微信小程序客户端来对ESP32的Wi-Fi联网的功能进行配置。首先让ESP32开启GATT Server功能,向微信小程序客户端发送特定的adv data广播。然后使用微信小程序蓝牙客户端连接到ESP32建立GATT,两者进行上海乐鑫官方规定的BluFi传输格式的协商[8]。协商完成后微信小程序蓝牙客户端向ESP32发送“BluFi传输格式”定义的SSID、Password等用于Wi-Fi连接的必要信息。然后,ESP32开始连接Wi-Fi。ESP32连接到Wi-Fi后,向蓝牙客户端发送“Wi-Fi连接状态报告”控制帧,报告连接状态,至此配网成功。流程图如图3所示。
图3蓝牙智能配网流程图
2.3 指纹录入与管理功能程序设计
在指纹录入过程中,首先ESP32主控端会注册收到微信小程序客户端发布的填写完被考勤数据的MQTT主题消息input0。在微信小程序端录入被考勤者数据后,按下录入按钮会发生两个事件,一个是HTTP会请求服务器录入被考勤者数据信息,另外一个是发布指纹考勤主题信息input0。ESP32主控端在收到指纹考勤主题消息input0后会等待被考勤者触摸指纹传感器和按下指纹录入按钮,在指纹采集工作完成后,ESP32会读取传感器采集到的数据信息来获取指纹ID,然后进行JSON数据封装发送指纹录入MQTT主题消息input1,EMQ服务器和微信小程序接收到该消息后,EMQ服务器利用规则引擎将指纹ID存入之前拥有被考勤者的个人信息的数据表的行列中。指纹录入详细过程如图4所示。
图4指纹录入过程图
指纹管理包括对被考勤者的信息查询、修改和删除。指纹管理模块的功能流程图如图5所示:用户可以在微信小程序页面输入被考勤者的姓名,然后调用微信小程序发起HTTP请求,服务器端的PHP在收到请求后对请求解析,将个人信息以JSON格式返回给微信小程序,小程序对个人信息进行解析和显示。用户可以通过按下对应按钮选择修改或者删除考勤者的个人信息。如果用户按下修改按钮,那么微信小程序会发布一个/finger/alter修改指纹主题信息给ESP32指纹考勤机,ESP32指纹考勤机收到修改信息后会对下位机的数据进行修改,修改后返回/alter/result主题信息给微信小程序进行判断修改结果。若修改成功则会发送HTTP请求到PHP后台,修改完成后返回;若消息修改失败,则告知用户指纹信息修改失败。若按下删除按钮,那么微信小程序就会发布一个/finger/delete主题去让ESP32进行删除下位机的数据。同样的,删除操作后ESP32会发布/delete/res主题给微信小程序进行判断。若消息是删除成功,会发送HTTP删除请求,删除服务器数据库的被考勤者的个人信息;若消息是删除失败,则告知用户指纹信息删除失败。
图5指纹管理模块流程图
2.4 指纹考勤功能程序设计
如图6指纹考勤功能流程图所示,考勤者触摸指纹传感器和按下指纹考勤按钮时,ESP32主控端会读取传感器采集的指纹数据,生成对应的指纹模型和特征ID,然后开始在数据库中高速搜索指纹模型进行匹配。匹配成功后,指纹考勤机通过NTP网络时间协议获取网络时间,将指纹id和网络时间进行JSON数据封装,再转换成字符串。随后,指纹考勤机会发布一个包含指纹id和网络时间的指纹考勤MQTT主题。MQTT服务器接收到包含指纹id和网络时间的主题信息后,会触发事先写好的指纹存储功能,调用MySQL存储函数,对打卡信息进行记录。记录的打卡信息有两个,一个当天是第一次打卡的数据,一个是当天最后一次打卡的数据。
图6指纹考勤功能流程图
考勤信息的汇总和统计可以为企业和学校的数据统计提供很大的便利。在系统中,我们的考勤统计功能,能够通过被考勤者的姓名查询到他的考勤信息,查询的结果会按照时间进行排序,显示到微信小程序。
如图7考勤统计流程图所示,首先要去输入被考勤者的姓名,然后用户点击查询按钮进行系统查询,之后数据通过HTTP发送到后台,后台会进行对数据库的查询,并且将数据排序返回。返回的数据会先到微信小程序的前端,由微信小程序对结果进行渲染输入。
图7考勤统计流程图
2.5 服务器设计
微信小程序服务器端的后台主要包括DiController类完成对考勤数据统计方法的一些封装和ingerController类完成对指纹查找、修改、删除的指纹管理方法的封装[9]。
该PHP后台采用MVC设计,且仅作为PHP后台使用,故没有体现视图层次。其中controller目录存放的是控制类,而ext目录的则是一些额外的辅助类和第三方包,在model目录的是所需模型类,config.php文件则是对数据库和其他部分的配置,index.php文件是整个框架的入口处理,其中包括PHP的类的自动加载机制。而FingerController和FingerModel类负责被指纹考勤者的个人信息查询、信息修改和信息删除的信息管理操作,DiController和DiModel类完成指纹考勤的功能。
系统采用Nginx作为后台服务器,微信小程序的端口由微信小程序指定,而EMQ运行的MQTT端口是8083。为了使微信小程序能访问MQTT的服务,我们在使用对Nginx Web服务端口80(443)进行监听的同时,建立微信小程序访问MQTT时端口的映射[10]。具体的代理配置过程如下:把80端口的HTTP转为HTTPS,并且配置监听443端口完成Web服务,将配置监听域名下的/mqtt访问路径代理到监听MQTT服务的8083端口,从而实现HTTP(HTTPS)访问与进行MQTT的服务的正常使用的同步进行,让本项目能让微信小程序发布上线进行使用。
3 系统测试
首先对蓝牙配网功能进行测试:打开微信小程序,开启手机蓝牙,搜索蓝牙设备,找到ESP32客户端进行连接,通过小程序对ESP32发送Wi-Fi账号密码,进行配网操作,如图8所示。配网成功后,我们可以在ESP32串口调试信息看到Wi-Fi连接结果,在OLDED中也会有显示,如图9所示。配网完成后,可进一步实现指纹数据的录入,考勤数据的查询和被考勤者的信息管理等多项操作。
图8智能配网页面
图9实物图连接服务器信息
4 结语
基于ESP32的指纹考勤系统将服务器端,微信小程序端,嵌入式编程多方面内容进行结合,实现了与传统考勤方式相比,考勤设备体积更小,数据更具真实性,考勤数据统计更加高效的目标,极大地降低了企业和学校在考勤方面的时间与人力成本。随着企业智能办公和学校智能化教学不断发展,指纹考勤系统将被更加广泛利用。本项目虽然实现了指纹考勤系统的基本功能,但仍有许多不足之处,仍需进一步完善。