譚毓鴻,王勛,黃偉淇,柯金河,鄭健欣,陶銘
(東莞理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,東莞523808)
考勤管理是企業(yè)和學(xué)校都十分重視的統(tǒng)計(jì)工作,它不僅是企業(yè)衡量工作者的上班情況和工作狀態(tài)的一個(gè)途徑,也是學(xué)校對(duì)學(xué)生進(jìn)行統(tǒng)一管理的有效手段。隨著企業(yè)和學(xué)校的規(guī)模擴(kuò)大,考勤管理花費(fèi)的時(shí)間成本和人力成本也會(huì)增加。而一個(gè)高效的考勤方式無(wú)疑能很好地減少企業(yè)和學(xué)校在考勤管理上的相關(guān)成本。最近幾年,鑒于數(shù)據(jù)不真實(shí),統(tǒng)計(jì)工作量大等多方面不足,許多以射頻IC卡考勤、紙質(zhì)打卡機(jī)為代表的傳統(tǒng)考勤設(shè)備及考勤方式開(kāi)始逐漸被市場(chǎng)淘汰。與此同時(shí),基于指紋識(shí)別技術(shù)和人臉圖像識(shí)別技術(shù)等考勤技術(shù),由于其有著更好的數(shù)據(jù)真實(shí)性和考勤有效性,而受到大量企業(yè)和學(xué)校的歡迎[1]。其中,鑒于指紋的獨(dú)特性,指紋識(shí)別技術(shù)無(wú)疑是目前最能保證數(shù)據(jù)真實(shí)性的一種。此外,在企業(yè)智能辦公和學(xué)校智能化教學(xué)的發(fā)展趨勢(shì)下,利用物聯(lián)網(wǎng)的功能把考勤數(shù)據(jù)發(fā)送至服務(wù)器端存儲(chǔ),不僅可以降低考勤設(shè)備的體積要求,同時(shí)可以利用服務(wù)器對(duì)考勤數(shù)據(jù)進(jìn)行處理匯總,進(jìn)一步提高了考勤數(shù)據(jù)統(tǒng)計(jì)的效率,這極大地降低了企業(yè)和學(xué)校在考勤方面的相關(guān)成本[2-3]。
本系統(tǒng)可分為三個(gè)部分,分別是ESP3指紋考勤機(jī)的主控端,MQTT服務(wù)器和Nginx服務(wù)器的服務(wù)器端,和微信小程序的客戶端。其中ESP32指紋考勤機(jī)器通過(guò)MQTT連接到MQTT服務(wù)器,通過(guò)MQTT完成指紋的錄入,考勤和指紋信息的管理,微信小程序和MQTT服務(wù)器同時(shí)有MQTT連接和HTTP連接,MQTT連接主要是配合ESP32完成指紋錄入的功能,HTTP連接主要是用來(lái)實(shí)現(xiàn)考勤信息的查詢統(tǒng)計(jì)和被考勤者的信息管理。
本系統(tǒng)選用的MQTT服務(wù)器是EMQX Enterprise企業(yè)級(jí)物聯(lián)網(wǎng)MQTT消息平臺(tái),該平臺(tái)支持百萬(wàn)級(jí)物聯(lián)網(wǎng)設(shè)備一站式接入、MQTT&CoAP多協(xié)議處理以及低時(shí)延實(shí)時(shí)消息通信。通過(guò)下載到該軟件包后部署,部署后獲取到試用許可證后,即可以啟動(dòng)EMQ服務(wù)。啟動(dòng)EMQ服務(wù)后,可通過(guò)IP+端口的方式進(jìn)行訪問(wèn)[4]。系統(tǒng)通過(guò)微信小程序連接EMQ服務(wù)器完成MQTT通信,再配合完成指紋錄入過(guò)程的指紋錄入功能,同時(shí)讓ESP32主控端與EMQ服務(wù)器建立EMQ連接,通過(guò)MQTT協(xié)議來(lái)完成指紋錄入和指紋考勤的數(shù)據(jù)通信。
本系統(tǒng)采用MySQL數(shù)據(jù)庫(kù),主要有兩個(gè)地方會(huì)操作到數(shù)據(jù)庫(kù)。一是通過(guò)EMQ的規(guī)則引擎來(lái)進(jìn)行指紋數(shù)據(jù)的錄入和指紋考勤數(shù)據(jù)的存儲(chǔ),二是微信小程序發(fā)起的請(qǐng)求會(huì)被PHP處理然后調(diào)用MySQL進(jìn)行操作,主要用途有考勤記錄的查詢和考勤對(duì)象的數(shù)據(jù)查詢、修改和刪除[5]。
其中本系統(tǒng)在MySQL建立的數(shù)據(jù)庫(kù)主要由兩張表構(gòu)成,被考勤者指紋信息存儲(chǔ)表及指紋考勤信息存儲(chǔ)表。兩張表的數(shù)據(jù)定義如下,被考勤者指紋信息存儲(chǔ)表包含了主鍵id、姓名、指紋ID以及指紋是否錄入的標(biāo)志。指紋考勤信息存儲(chǔ)表是對(duì)考勤信息進(jìn)行記錄的數(shù)據(jù)表,主要包含主鍵、指紋ID以及打開(kāi)時(shí)間和結(jié)束打開(kāi)的時(shí)間。
本課題的指紋考勤機(jī)分成三個(gè)部分,分別是ESP32指紋考勤機(jī)的主控端,MQTT服務(wù)器和Nginx服務(wù)器的服務(wù)器端,以及微信小程序的客戶端。其中ESP32指紋考勤機(jī)器通過(guò)MQTT連接到MQTT服務(wù)器,通過(guò)MQTT完成指紋的錄入,考勤和指紋信息的管理,微信小程序和MQTT服務(wù)器同時(shí)有MQTT連接和HTTP連接,MQTT連接主要是配合ESP32完成指紋錄入的功能,HTTP連接主要是用來(lái)實(shí)現(xiàn)考勤信息的查詢統(tǒng)計(jì)和被考勤者的信息管理[6]。系統(tǒng)框架結(jié)構(gòu)如圖1所示。
圖1系統(tǒng)框架結(jié)構(gòu)
采用ESP32的串口0來(lái)進(jìn)行系統(tǒng)調(diào)試輸出,串口1和AS608通信共同完成指紋錄入和指紋的驗(yàn)證工作,通過(guò)IIC和OLED屏幕來(lái)進(jìn)行IIC通信完成考勤系統(tǒng)的信息顯示。ESP32主控端的外圍電路由一個(gè)AS608的串口指紋傳感器、IIC協(xié)議的OLED屏幕以及一些GPIO口的引腳和按鍵共同組成。如圖2所示,其中的AS608通過(guò)串口1來(lái)進(jìn)行數(shù)據(jù)通信,OLED屏幕通過(guò)IIC完成通信工作[7]。
圖2 ESP32硬件連接圖
智能配網(wǎng)是影響用戶體驗(yàn)的關(guān)鍵。一旦設(shè)備聯(lián)機(jī),不論是連接在家庭局域網(wǎng)絡(luò)還是接入云端,消費(fèi)者都可體驗(yàn)更好的服務(wù),輕松地進(jìn)行設(shè)備的控制及監(jiān)測(cè)。ESP32可以實(shí)現(xiàn)多種配網(wǎng)方式,本系統(tǒng)將以藍(lán)牙配網(wǎng)方式通過(guò)微信小程序客戶端來(lái)對(duì)ESP32的Wi-Fi聯(lián)網(wǎng)的功能進(jìn)行配置。首先讓ESP32開(kāi)啟GATT Server功能,向微信小程序客戶端發(fā)送特定的adv data廣播。然后使用微信小程序藍(lán)牙客戶端連接到ESP32建立GATT,兩者進(jìn)行上海樂(lè)鑫官方規(guī)定的BluFi傳輸格式的協(xié)商[8]。協(xié)商完成后微信小程序藍(lán)牙客戶端向ESP32發(fā)送“BluFi傳輸格式”定義的SSID、Password等用于Wi-Fi連接的必要信息。然后,ESP32開(kāi)始連接Wi-Fi。ESP32連接到Wi-Fi后,向藍(lán)牙客戶端發(fā)送“Wi-Fi連接狀態(tài)報(bào)告”控制幀,報(bào)告連接狀態(tài),至此配網(wǎng)成功。流程圖如圖3所示。
圖3藍(lán)牙智能配網(wǎng)流程圖
在指紋錄入過(guò)程中,首先ESP32主控端會(huì)注冊(cè)收到微信小程序客戶端發(fā)布的填寫完被考勤數(shù)據(jù)的MQTT主題消息input0。在微信小程序端錄入被考勤者數(shù)據(jù)后,按下錄入按鈕會(huì)發(fā)生兩個(gè)事件,一個(gè)是HTTP會(huì)請(qǐng)求服務(wù)器錄入被考勤者數(shù)據(jù)信息,另外一個(gè)是發(fā)布指紋考勤主題信息input0。ESP32主控端在收到指紋考勤主題消息input0后會(huì)等待被考勤者觸摸指紋傳感器和按下指紋錄入按鈕,在指紋采集工作完成后,ESP32會(huì)讀取傳感器采集到的數(shù)據(jù)信息來(lái)獲取指紋ID,然后進(jìn)行JSON數(shù)據(jù)封裝發(fā)送指紋錄入MQTT主題消息input1,EMQ服務(wù)器和微信小程序接收到該消息后,EMQ服務(wù)器利用規(guī)則引擎將指紋ID存入之前擁有被考勤者的個(gè)人信息的數(shù)據(jù)表的行列中。指紋錄入詳細(xì)過(guò)程如圖4所示。
圖4指紋錄入過(guò)程圖
指紋管理包括對(duì)被考勤者的信息查詢、修改和刪除。指紋管理模塊的功能流程圖如圖5所示:用戶可以在微信小程序頁(yè)面輸入被考勤者的姓名,然后調(diào)用微信小程序發(fā)起HTTP請(qǐng)求,服務(wù)器端的PHP在收到請(qǐng)求后對(duì)請(qǐng)求解析,將個(gè)人信息以JSON格式返回給微信小程序,小程序?qū)€(gè)人信息進(jìn)行解析和顯示。用戶可以通過(guò)按下對(duì)應(yīng)按鈕選擇修改或者刪除考勤者的個(gè)人信息。如果用戶按下修改按鈕,那么微信小程序會(huì)發(fā)布一個(gè)/finger/alter修改指紋主題信息給ESP32指紋考勤機(jī),ESP32指紋考勤機(jī)收到修改信息后會(huì)對(duì)下位機(jī)的數(shù)據(jù)進(jìn)行修改,修改后返回/alter/result主題信息給微信小程序進(jìn)行判斷修改結(jié)果。若修改成功則會(huì)發(fā)送HTTP請(qǐng)求到PHP后臺(tái),修改完成后返回;若消息修改失敗,則告知用戶指紋信息修改失敗。若按下刪除按鈕,那么微信小程序就會(huì)發(fā)布一個(gè)/finger/delete主題去讓ESP32進(jìn)行刪除下位機(jī)的數(shù)據(jù)。同樣的,刪除操作后ESP32會(huì)發(fā)布/delete/res主題給微信小程序進(jìn)行判斷。若消息是刪除成功,會(huì)發(fā)送HTTP刪除請(qǐng)求,刪除服務(wù)器數(shù)據(jù)庫(kù)的被考勤者的個(gè)人信息;若消息是刪除失敗,則告知用戶指紋信息刪除失敗。
圖5指紋管理模塊流程圖
如圖6指紋考勤功能流程圖所示,考勤者觸摸指紋傳感器和按下指紋考勤按鈕時(shí),ESP32主控端會(huì)讀取傳感器采集的指紋數(shù)據(jù),生成對(duì)應(yīng)的指紋模型和特征ID,然后開(kāi)始在數(shù)據(jù)庫(kù)中高速搜索指紋模型進(jìn)行匹配。匹配成功后,指紋考勤機(jī)通過(guò)NTP網(wǎng)絡(luò)時(shí)間協(xié)議獲取網(wǎng)絡(luò)時(shí)間,將指紋id和網(wǎng)絡(luò)時(shí)間進(jìn)行JSON數(shù)據(jù)封裝,再轉(zhuǎn)換成字符串。隨后,指紋考勤機(jī)會(huì)發(fā)布一個(gè)包含指紋id和網(wǎng)絡(luò)時(shí)間的指紋考勤MQTT主題。MQTT服務(wù)器接收到包含指紋id和網(wǎng)絡(luò)時(shí)間的主題信息后,會(huì)觸發(fā)事先寫好的指紋存儲(chǔ)功能,調(diào)用MySQL存儲(chǔ)函數(shù),對(duì)打卡信息進(jìn)行記錄。記錄的打卡信息有兩個(gè),一個(gè)當(dāng)天是第一次打卡的數(shù)據(jù),一個(gè)是當(dāng)天最后一次打卡的數(shù)據(jù)。
圖6指紋考勤功能流程圖
考勤信息的匯總和統(tǒng)計(jì)可以為企業(yè)和學(xué)校的數(shù)據(jù)統(tǒng)計(jì)提供很大的便利。在系統(tǒng)中,我們的考勤統(tǒng)計(jì)功能,能夠通過(guò)被考勤者的姓名查詢到他的考勤信息,查詢的結(jié)果會(huì)按照時(shí)間進(jìn)行排序,顯示到微信小程序。
如圖7考勤統(tǒng)計(jì)流程圖所示,首先要去輸入被考勤者的姓名,然后用戶點(diǎn)擊查詢按鈕進(jìn)行系統(tǒng)查詢,之后數(shù)據(jù)通過(guò)HTTP發(fā)送到后臺(tái),后臺(tái)會(huì)進(jìn)行對(duì)數(shù)據(jù)庫(kù)的查詢,并且將數(shù)據(jù)排序返回。返回的數(shù)據(jù)會(huì)先到微信小程序的前端,由微信小程序?qū)Y(jié)果進(jìn)行渲染輸入。
圖7考勤統(tǒng)計(jì)流程圖
微信小程序服務(wù)器端的后臺(tái)主要包括DiController類完成對(duì)考勤數(shù)據(jù)統(tǒng)計(jì)方法的一些封裝和ingerController類完成對(duì)指紋查找、修改、刪除的指紋管理方法的封裝[9]。
該P(yáng)HP后臺(tái)采用MVC設(shè)計(jì),且僅作為PHP后臺(tái)使用,故沒(méi)有體現(xiàn)視圖層次。其中controller目錄存放的是控制類,而ext目錄的則是一些額外的輔助類和第三方包,在model目錄的是所需模型類,config.php文件則是對(duì)數(shù)據(jù)庫(kù)和其他部分的配置,index.php文件是整個(gè)框架的入口處理,其中包括PHP的類的自動(dòng)加載機(jī)制。而FingerController和FingerModel類負(fù)責(zé)被指紋考勤者的個(gè)人信息查詢、信息修改和信息刪除的信息管理操作,DiController和DiModel類完成指紋考勤的功能。
系統(tǒng)采用Nginx作為后臺(tái)服務(wù)器,微信小程序的端口由微信小程序指定,而EMQ運(yùn)行的MQTT端口是8083。為了使微信小程序能訪問(wèn)MQTT的服務(wù),我們?cè)谑褂脤?duì)Nginx Web服務(wù)端口80(443)進(jìn)行監(jiān)聽(tīng)的同時(shí),建立微信小程序訪問(wèn)MQTT時(shí)端口的映射[10]。具體的代理配置過(guò)程如下:把80端口的HTTP轉(zhuǎn)為HTTPS,并且配置監(jiān)聽(tīng)443端口完成Web服務(wù),將配置監(jiān)聽(tīng)域名下的/mqtt訪問(wèn)路徑代理到監(jiān)聽(tīng)MQTT服務(wù)的8083端口,從而實(shí)現(xiàn)HTTP(HTTPS)訪問(wèn)與進(jìn)行MQTT的服務(wù)的正常使用的同步進(jìn)行,讓本項(xiàng)目能讓微信小程序發(fā)布上線進(jìn)行使用。
首先對(duì)藍(lán)牙配網(wǎng)功能進(jìn)行測(cè)試:打開(kāi)微信小程序,開(kāi)啟手機(jī)藍(lán)牙,搜索藍(lán)牙設(shè)備,找到ESP32客戶端進(jìn)行連接,通過(guò)小程序?qū)SP32發(fā)送Wi-Fi賬號(hào)密碼,進(jìn)行配網(wǎng)操作,如圖8所示。配網(wǎng)成功后,我們可以在ESP32串口調(diào)試信息看到Wi-Fi連接結(jié)果,在OLDED中也會(huì)有顯示,如圖9所示。配網(wǎng)完成后,可進(jìn)一步實(shí)現(xiàn)指紋數(shù)據(jù)的錄入,考勤數(shù)據(jù)的查詢和被考勤者的信息管理等多項(xiàng)操作。
圖8智能配網(wǎng)頁(yè)面
圖9實(shí)物圖連接服務(wù)器信息
基于ESP32的指紋考勤系統(tǒng)將服務(wù)器端,微信小程序端,嵌入式編程多方面內(nèi)容進(jìn)行結(jié)合,實(shí)現(xiàn)了與傳統(tǒng)考勤方式相比,考勤設(shè)備體積更小,數(shù)據(jù)更具真實(shí)性,考勤數(shù)據(jù)統(tǒng)計(jì)更加高效的目標(biāo),極大地降低了企業(yè)和學(xué)校在考勤方面的時(shí)間與人力成本。隨著企業(yè)智能辦公和學(xué)校智能化教學(xué)不斷發(fā)展,指紋考勤系統(tǒng)將被更加廣泛利用。本項(xiàng)目雖然實(shí)現(xiàn)了指紋考勤系統(tǒng)的基本功能,但仍有許多不足之處,仍需進(jìn)一步完善。