陳儒敏,于 靜,張開金,李 澤,劉佳輝
(1.北京科技大學(xué)天津?qū)W院 信息工程學(xué)院,天津 301830;2.山東高圖測繪信息科技有限公司,山東 德州 253072)
隨著教育部對(duì)高等院校大學(xué)生創(chuàng)新創(chuàng)業(yè)教育的大力推進(jìn),各高校也都針對(duì)性地設(shè)立或開放了一些創(chuàng)新性實(shí)驗(yàn)室,這些實(shí)驗(yàn)室在培養(yǎng)學(xué)生創(chuàng)新精神與應(yīng)用能力方面發(fā)揮著重要的作用[1]。對(duì)于信息化沒有全面覆蓋的高校,實(shí)驗(yàn)室使用登記一直是件令人頭疼的事情。傳統(tǒng)紙質(zhì)登記效率低,學(xué)生不愛填寫。直接購買現(xiàn)成的考勤機(jī),除了成本因素外,還無法與現(xiàn)有系統(tǒng)兼容,后續(xù)還需要人工導(dǎo)出數(shù)據(jù)和統(tǒng)計(jì),增加人力成本。
本設(shè)計(jì)基于ESP32平臺(tái)和MQTT協(xié)議設(shè)計(jì)了一套實(shí)驗(yàn)室自動(dòng)登記系統(tǒng)。系統(tǒng)分讀卡器終端和服務(wù)器端。讀卡器通過射頻卡讀取模塊讀取使用者校園卡、帶NFC功能的手環(huán)或手機(jī)的基本信息,將信息通過MQTT協(xié)議發(fā)送到服務(wù)器,接收程序通過服務(wù)器接收信息,存入數(shù)據(jù)庫,實(shí)現(xiàn)實(shí)驗(yàn)室使用的自動(dòng)登記。
系統(tǒng)讀卡器終端由ESP32主控模塊、射頻卡讀取模塊、顯示模塊、按鍵、RGB指示燈、蜂鳴電路和供電電路組成,硬件結(jié)構(gòu)如圖1所示。為最大程度利用現(xiàn)有模塊,同時(shí)降低調(diào)試難度和方便后續(xù)擴(kuò)展,將ESP32主控、供電單元、按鍵與蜂鳴器單元做成一塊主控板,留出接口,外接顯示模塊與射頻卡讀取模塊。
圖1 系統(tǒng)硬件結(jié)構(gòu)
主控板包括ESP32主控的最小系統(tǒng)電路,作為整個(gè)系統(tǒng)供電的穩(wěn)壓電路以及按鍵與蜂鳴器的驅(qū)動(dòng)電路。
1.1.1 ESP32最小系統(tǒng)
ESP32最小系統(tǒng)電路如圖2所示。主控采用樂鑫出品的ESP-WROOM-32模塊,該模塊自帶藍(lán)牙和WiFi功能,同時(shí)集成了天線開關(guān)、射頻Balun(平衡-非平衡轉(zhuǎn)換器)、功率放大器、低噪聲放大器、濾波器以及電源管理模塊[3]。最小系統(tǒng)電路主要是使該模塊能穩(wěn)定工作的最小電路,除了復(fù)位電路外,還留出了燒寫電路接口,當(dāng)需要燒寫時(shí),將J1接口用短路帽短接,復(fù)位后進(jìn)入燒寫模式,再使用串口通過CN3燒寫程序即可。平時(shí)還可通過CN3與模塊進(jìn)行串口通信。
圖2 ESP32最小系統(tǒng)電路
1.1.2 供電電路設(shè)計(jì)
供電電路主要給整個(gè)系統(tǒng)提供電源,系統(tǒng)中的器件和模塊使用5 V和3.3 V兩種電壓。這里使用USB-C接口,通過5 V電源適配器直接提供5 V電壓,然后經(jīng)過穩(wěn)壓芯片AMS1117降為3.3 V供給需要的器件和模塊。供電電路如圖3所示。
圖3 供電電路
1.1.3 其他電路設(shè)計(jì)
為了后期可以進(jìn)行人機(jī)交互,系統(tǒng)設(shè)計(jì)兩個(gè)按鍵,平時(shí)輸入為高電平,按下為低電平。RGB LED使用的是WS2812,可以使用一個(gè)引腳控制,這里主要用來指示系統(tǒng)的不同狀態(tài),蜂鳴器電路用于讀卡成功指示。按鍵、RGB LED、蜂鳴器電路如圖4所示。系統(tǒng)的射頻卡、顯示屏和TF卡讀寫是獨(dú)立模塊,為此需要在主控板上留出接口,如圖5所示。
圖4 按鍵、RGB LED、蜂鳴器電路
圖5 接口電路
因?yàn)榇蟛糠值膽?yīng)用場景主要是用讀取校園卡的ID信息,考慮到成本因素,這里采用NXP 公司的RC522方案,其主要支持ISO/IEC 14443A和MIFARE通信協(xié)議,可以滿足要求。讀取模塊使用SPI接口與主控相連。為了滿足以后的擴(kuò)展要求,特別是讀取帶NFC功能的設(shè)備信息,還設(shè)計(jì)了PN532射頻方案的通信接口,其除了支持ISO/IEC 14443A/MIFARE,還支持ISO/IEC 14443B、ISO/IEC18092,ECM340、Felica等協(xié)議。主控板中留出了I2C接口與PN532模塊進(jìn)行通信。
讀卡器終端使用2.0英寸TFT彩屏模塊顯示工作過程中的基本信息,其采用ILI9225芯片驅(qū)動(dòng)方案,最大可以支持176×220分辨率,262 144種顏色。模塊還帶有一個(gè)TF卡接口,這里用來連接TF卡,設(shè)備離線時(shí)可暫存信息。主控板使用EPS32的HSPI接口與ILI9225相連,使用普通SPI口與TF卡相連。
讀卡器終端使用MQTT協(xié)議與服務(wù)器連接,傳送打卡信息。MQTT是一個(gè)輕量級(jí)的發(fā)布/訂閱模式的消息傳輸協(xié)議,是目前最流行的物聯(lián)網(wǎng)傳輸協(xié)議之一。協(xié)議的特點(diǎn)是輕巧、開放、簡單和規(guī)范,比較適合環(huán)境受限的機(jī)器與機(jī)器通信場景,在常見的物聯(lián)網(wǎng)應(yīng)用環(huán)境也都有應(yīng)用[4]。硬件端軟件使用Arduino環(huán)境開發(fā)。
讀卡器終端軟件主要需要完成參數(shù)讀取、連接網(wǎng)絡(luò)、檢測卡片、信息顯示、向MQTT服務(wù)器發(fā)送打卡信息、OTA升級(jí)等功能。整體程序框架如圖6所示。
圖6 系統(tǒng)工作整體流程
針對(duì)不同的使用環(huán)境,其WiFi名稱(SSID)、密碼、設(shè)備MQTT主題等參數(shù)會(huì)不一樣,這里采用將參數(shù)先存入ESP32的E2PROM中,系統(tǒng)上電后讀取,再調(diào)用相關(guān)函數(shù)進(jìn)行初始化。E2PROM中參數(shù)格式包括讀卡器類型、WiFi名稱、WiFi密碼、MQTT服務(wù)器地址、服務(wù)器端口號(hào)、服務(wù)器賬號(hào)、服務(wù)器密碼、設(shè)備發(fā)布主題。其中讀卡器類型為1位,0表示RC522方案讀卡器,1表示PN532方案讀卡器。其余字段均不限定長度,但每個(gè)字段的頭兩位表示該字段所帶信息的位數(shù),例如WiFi的名稱是8位,則該字段頭兩位應(yīng)該是08,后面再跟上WiFi名稱。程序中根據(jù)前面的字段以及位數(shù)信息依次推算出后續(xù)參數(shù)信息。
通過按鍵配合ESP32自帶的藍(lán)牙功能可以重新寫入上面的參數(shù),這里是利用ESP32的藍(lán)牙串口功能。系統(tǒng)上電啟動(dòng)后,會(huì)檢測2號(hào)按鍵是否按下,如有按下則進(jìn)入該模式,可以用PC或手機(jī)連接設(shè)備藍(lán)牙,借助串口調(diào)試助手之類的工具對(duì)參數(shù)進(jìn)行設(shè)置。
系統(tǒng)上電后連接網(wǎng)絡(luò),如果沒有檢測到按鍵,則會(huì)接著初始化其他參數(shù),然后進(jìn)入正常工作模式,主要包括讀取網(wǎng)絡(luò)時(shí)間,循環(huán)檢測是否有卡片,顯示屏及RGB燈信息顯示等。其程序流程如圖7所示。
圖7 讀卡器正常工作流程
這里會(huì)直接從NTP服務(wù)器讀取時(shí)間,該信息用于設(shè)置ESP32本身RTC時(shí)間,沒有網(wǎng)絡(luò)時(shí)可以將刷卡的時(shí)間信息暫存到TF卡中,網(wǎng)絡(luò)恢復(fù)后再發(fā)送回服務(wù)器。由于程序運(yùn)行較快,可能存在一張卡片多次讀取的情況,程序中設(shè)置了10 s左右的時(shí)間間隔,這段時(shí)間如果再次檢測到同一張卡片,則不記錄該卡片信息。
為方便后續(xù)升級(jí),還設(shè)計(jì)了OTA(Over The Air),即空中下載功能,在程序初始化前按住按鍵1,聯(lián)網(wǎng)成功進(jìn)入OTA模式,并在顯示屏上顯示設(shè)備IP。通過1臺(tái)與該設(shè)備處于同一局域網(wǎng)下的PC機(jī),使用瀏覽器對(duì)設(shè)備進(jìn)行固件升級(jí)。另外,主控板上還留有對(duì)ESP32的燒寫電路,在無法進(jìn)行OTA時(shí)使用。
系統(tǒng)使用MQTT協(xié)議進(jìn)行消息傳送,需要1臺(tái)MQTT服務(wù)器進(jìn)行消息轉(zhuǎn)發(fā),可以使用百度、阿里云提供的物聯(lián)網(wǎng)平臺(tái),也可在現(xiàn)有服務(wù)器上搭建一個(gè)MQTT服務(wù)。這里使用的開源程序?yàn)锳ctiveMQ,ActiveMQ是Apache基金會(huì)推出的消息中間件程序,可支持多種協(xié)議,包括MQTT協(xié)議。
數(shù)據(jù)的接收使用Python語言編寫,使用第三方庫PAHO-MQTT可以實(shí)現(xiàn)MQTT信息的訂閱、收取和發(fā)送。這里,Python腳本會(huì)在啟動(dòng)后訂閱每臺(tái)設(shè)備的主題,然后在后臺(tái)監(jiān)控消息,將傳遞過來的消息內(nèi)容加上接收日期和時(shí)間一起記錄在數(shù)據(jù)庫中。
系統(tǒng)的實(shí)物包括主控板的PCB設(shè)計(jì)與電路設(shè)計(jì),PCB的設(shè)計(jì)圖如圖8所示,實(shí)物如圖9所示。
圖8 主控板PCB圖
圖9 實(shí)物
設(shè)置好MQTT服務(wù)器后,使用MQTT.fx軟件訂閱讀卡器的主題,然后刷卡測試,軟件端收到消息以及顯示屏顯示內(nèi)容如圖10所示。
圖10 讀卡器運(yùn)行狀態(tài)圖
服務(wù)器端接收腳本后會(huì)存入數(shù)據(jù)庫,程序調(diào)試輸出與數(shù)據(jù)庫中的數(shù)據(jù)如圖11所示。
圖11 數(shù)據(jù)庫信息
實(shí)驗(yàn)室使用登記是實(shí)驗(yàn)室管理的一個(gè)重要環(huán)節(jié)。本文基于MQTT協(xié)議與ESP32平臺(tái)設(shè)計(jì)了一種實(shí)驗(yàn)室登記系統(tǒng),完成了系統(tǒng)的硬件電路設(shè)計(jì)、讀卡器實(shí)物制作,編寫了相應(yīng)的硬件控制程序、接收程序,并搭建了服務(wù)器。經(jīng)驗(yàn)證,所設(shè)計(jì)系統(tǒng)可以實(shí)現(xiàn)規(guī)定功能,自動(dòng)完成實(shí)驗(yàn)室使用登記工作。