陳儒敏,于 靜,張開金,李 澤,劉佳輝
(1.北京科技大學天津學院 信息工程學院,天津 301830;2.山東高圖測繪信息科技有限公司,山東 德州 253072)
隨著教育部對高等院校大學生創新創業教育的大力推進,各高校也都針對性地設立或開放了一些創新性實驗室,這些實驗室在培養學生創新精神與應用能力方面發揮著重要的作用[1]。對于信息化沒有全面覆蓋的高校,實驗室使用登記一直是件令人頭疼的事情。傳統紙質登記效率低,學生不愛填寫。直接購買現成的考勤機,除了成本因素外,還無法與現有系統兼容,后續還需要人工導出數據和統計,增加人力成本。
本設計基于ESP32平臺和MQTT協議設計了一套實驗室自動登記系統。系統分讀卡器終端和服務器端。讀卡器通過射頻卡讀取模塊讀取使用者校園卡、帶NFC功能的手環或手機的基本信息,將信息通過MQTT協議發送到服務器,接收程序通過服務器接收信息,存入數據庫,實現實驗室使用的自動登記。
系統讀卡器終端由ESP32主控模塊、射頻卡讀取模塊、顯示模塊、按鍵、RGB指示燈、蜂鳴電路和供電電路組成,硬件結構如圖1所示。為最大程度利用現有模塊,同時降低調試難度和方便后續擴展,將ESP32主控、供電單元、按鍵與蜂鳴器單元做成一塊主控板,留出接口,外接顯示模塊與射頻卡讀取模塊。

圖1 系統硬件結構
主控板包括ESP32主控的最小系統電路,作為整個系統供電的穩壓電路以及按鍵與蜂鳴器的驅動電路。
1.1.1 ESP32最小系統
ESP32最小系統電路如圖2所示。主控采用樂鑫出品的ESP-WROOM-32模塊,該模塊自帶藍牙和WiFi功能,同時集成了天線開關、射頻Balun(平衡-非平衡轉換器)、功率放大器、低噪聲放大器、濾波器以及電源管理模塊[3]。最小系統電路主要是使該模塊能穩定工作的最小電路,除了復位電路外,還留出了燒寫電路接口,當需要燒寫時,將J1接口用短路帽短接,復位后進入燒寫模式,再使用串口通過CN3燒寫程序即可。平時還可通過CN3與模塊進行串口通信。

圖2 ESP32最小系統電路
1.1.2 供電電路設計
供電電路主要給整個系統提供電源,系統中的器件和模塊使用5 V和3.3 V兩種電壓。這里使用USB-C接口,通過5 V電源適配器直接提供5 V電壓,然后經過穩壓芯片AMS1117降為3.3 V供給需要的器件和模塊。供電電路如圖3所示。

圖3 供電電路
1.1.3 其他電路設計
為了后期可以進行人機交互,系統設計兩個按鍵,平時輸入為高電平,按下為低電平。RGB LED使用的是WS2812,可以使用一個引腳控制,這里主要用來指示系統的不同狀態,蜂鳴器電路用于讀卡成功指示。按鍵、RGB LED、蜂鳴器電路如圖4所示。系統的射頻卡、顯示屏和TF卡讀寫是獨立模塊,為此需要在主控板上留出接口,如圖5所示。

圖4 按鍵、RGB LED、蜂鳴器電路

圖5 接口電路
因為大部分的應用場景主要是用讀取校園卡的ID信息,考慮到成本因素,這里采用NXP 公司的RC522方案,其主要支持ISO/IEC 14443A和MIFARE通信協議,可以滿足要求。讀取模塊使用SPI接口與主控相連。為了滿足以后的擴展要求,特別是讀取帶NFC功能的設備信息,還設計了PN532射頻方案的通信接口,其除了支持ISO/IEC 14443A/MIFARE,還支持ISO/IEC 14443B、ISO/IEC18092,ECM340、Felica等協議。主控板中留出了I2C接口與PN532模塊進行通信。
讀卡器終端使用2.0英寸TFT彩屏模塊顯示工作過程中的基本信息,其采用ILI9225芯片驅動方案,最大可以支持176×220分辨率,262 144種顏色。模塊還帶有一個TF卡接口,這里用來連接TF卡,設備離線時可暫存信息。主控板使用EPS32的HSPI接口與ILI9225相連,使用普通SPI口與TF卡相連。
讀卡器終端使用MQTT協議與服務器連接,傳送打卡信息。MQTT是一個輕量級的發布/訂閱模式的消息傳輸協議,是目前最流行的物聯網傳輸協議之一。協議的特點是輕巧、開放、簡單和規范,比較適合環境受限的機器與機器通信場景,在常見的物聯網應用環境也都有應用[4]。硬件端軟件使用Arduino環境開發。
讀卡器終端軟件主要需要完成參數讀取、連接網絡、檢測卡片、信息顯示、向MQTT服務器發送打卡信息、OTA升級等功能。整體程序框架如圖6所示。

圖6 系統工作整體流程
針對不同的使用環境,其WiFi名稱(SSID)、密碼、設備MQTT主題等參數會不一樣,這里采用將參數先存入ESP32的E2PROM中,系統上電后讀取,再調用相關函數進行初始化。E2PROM中參數格式包括讀卡器類型、WiFi名稱、WiFi密碼、MQTT服務器地址、服務器端口號、服務器賬號、服務器密碼、設備發布主題。其中讀卡器類型為1位,0表示RC522方案讀卡器,1表示PN532方案讀卡器。其余字段均不限定長度,但每個字段的頭兩位表示該字段所帶信息的位數,例如WiFi的名稱是8位,則該字段頭兩位應該是08,后面再跟上WiFi名稱。程序中根據前面的字段以及位數信息依次推算出后續參數信息。
通過按鍵配合ESP32自帶的藍牙功能可以重新寫入上面的參數,這里是利用ESP32的藍牙串口功能。系統上電啟動后,會檢測2號按鍵是否按下,如有按下則進入該模式,可以用PC或手機連接設備藍牙,借助串口調試助手之類的工具對參數進行設置。
系統上電后連接網絡,如果沒有檢測到按鍵,則會接著初始化其他參數,然后進入正常工作模式,主要包括讀取網絡時間,循環檢測是否有卡片,顯示屏及RGB燈信息顯示等。其程序流程如圖7所示。

圖7 讀卡器正常工作流程
這里會直接從NTP服務器讀取時間,該信息用于設置ESP32本身RTC時間,沒有網絡時可以將刷卡的時間信息暫存到TF卡中,網絡恢復后再發送回服務器。由于程序運行較快,可能存在一張卡片多次讀取的情況,程序中設置了10 s左右的時間間隔,這段時間如果再次檢測到同一張卡片,則不記錄該卡片信息。
為方便后續升級,還設計了OTA(Over The Air),即空中下載功能,在程序初始化前按住按鍵1,聯網成功進入OTA模式,并在顯示屏上顯示設備IP。通過1臺與該設備處于同一局域網下的PC機,使用瀏覽器對設備進行固件升級。另外,主控板上還留有對ESP32的燒寫電路,在無法進行OTA時使用。
系統使用MQTT協議進行消息傳送,需要1臺MQTT服務器進行消息轉發,可以使用百度、阿里云提供的物聯網平臺,也可在現有服務器上搭建一個MQTT服務。這里使用的開源程序為ActiveMQ,ActiveMQ是Apache基金會推出的消息中間件程序,可支持多種協議,包括MQTT協議。
數據的接收使用Python語言編寫,使用第三方庫PAHO-MQTT可以實現MQTT信息的訂閱、收取和發送。這里,Python腳本會在啟動后訂閱每臺設備的主題,然后在后臺監控消息,將傳遞過來的消息內容加上接收日期和時間一起記錄在數據庫中。
系統的實物包括主控板的PCB設計與電路設計,PCB的設計圖如圖8所示,實物如圖9所示。

圖8 主控板PCB圖

圖9 實物
設置好MQTT服務器后,使用MQTT.fx軟件訂閱讀卡器的主題,然后刷卡測試,軟件端收到消息以及顯示屏顯示內容如圖10所示。

圖10 讀卡器運行狀態圖
服務器端接收腳本后會存入數據庫,程序調試輸出與數據庫中的數據如圖11所示。

圖11 數據庫信息
實驗室使用登記是實驗室管理的一個重要環節。本文基于MQTT協議與ESP32平臺設計了一種實驗室登記系統,完成了系統的硬件電路設計、讀卡器實物制作,編寫了相應的硬件控制程序、接收程序,并搭建了服務器。經驗證,所設計系統可以實現規定功能,自動完成實驗室使用登記工作。