陳衛麗,黃金雪
(廣州商學院信息技術與工程學院,廣東廣州511363)
儲物柜給人們在公眾場合需要臨時存放物品帶來了很大便利,目前常用的都是電子儲物柜[1],由MCU控制驅動電路打開關閉的儲物柜門,但是其儲物過程需要打印密碼憑條或者輸入密碼,用戶萬一丟失憑條或忘記密碼,就會造成極大的不便和管理難度?;诖爽F狀,文獻[2-3]提出了基于校園卡的儲物柜設計,通過刷卡開門方式對電子儲物柜進行改進,但在無卡化[4]的時代趨勢下,很多人只帶手機出門,針對此問題,文中設計一種利用手機微信和RFID卡[5]均可作為開柜憑據的智能儲物柜,能夠檢測儲物柜的實時使用情況,刷卡開柜或者手機微信開柜,并能把所有存取記錄存在云端及終端數據庫,方便管理員管理和用戶使用,并增加了租賃收費等功能,智能化程度非常高,有很廣闊的應用前景。
分為3部分:嵌入式Linux智能儲物柜終端系統,云服務器及云端數據庫,手機微信端,見圖1所示,各部分之間通過互聯網進行數據交互。
智能儲物柜總體設計框圖如圖2所示。LCD觸摸屏進行人機交互,RFID無線射頻模塊主要檢測和讀取RFID卡的輸入,繼電器模塊進行儲物柜上電控鎖的開關控制及狀態檢測,Wi-Fi模塊連接無線網絡,與云服務器進行通信。嵌入式Linux儲物柜終端系統接收到RFID刷卡數據后,進行本地數據庫處理,LCD人機交互,繼電器控制及云服務器通信。云服務器上建立MySQL數據庫進行數據存儲和處理,接口程序一方面與儲物柜終端進行數據交互,一方面與微信服務器進行通信。微信服務器用于微信公眾號和云端服務器通信。

圖1 智能儲物柜網絡數據交互圖

圖2 智能儲物柜總體設計框圖
智能儲物柜控制過程[6]如圖3所示,用戶在儲物柜終端刷卡后,系統會對卡號進行數據庫的匹配或者寫入操作。用戶在人機交互界面進行開箱等操作后,系統解析命令并查詢本地數據庫后發送控制指令,經譯碼器送給繼電器控制電控鎖進行開關操作。同時數據通過網絡http請求傳輸給云端服務器。云服務器解析數據,同步更新云數據庫。
用戶掃描LCD屏幕上的二維碼關注微信公眾號進行開箱等操作時[7],微信公眾號把開箱等控制指令經過微信服務器送給云服務器,云服務器查詢用戶及箱子狀態并更新云端數據庫,在智能終端的http請求中返回控制指令,使智能儲物柜終端進行相應開箱操作,同時智能儲物柜終端更新本地數據庫,返回信息給云端服務器,云端服務器把開箱結果返回給微信公眾號,微信公眾號通過設置的自動回復內容把狀態信息返回給微信。
系統硬件電路主要由ARM7主控電路、RFID讀卡器接口電路[8]、繼電器及密碼鎖驅動電路、WIFI接口電路、電源電路和LCD接口電路組成。
系統主控制器S3C2440自帶64 M字節的SDRAM,配有512 M的NAND FLASH,用于存儲系統程序、配置文件、系統正常運行時產生的用戶程序和程序正常運行時臨時數據的存儲區[9]。系統穩定運行在405 MHz,完全滿足系統要求,是ARM公司高性能低功耗的代表產品,價格便宜,易于產業化。RFID讀寫器模塊采用NXP原裝MFRC522芯片開發的13.56 MHz的智能IC卡讀卡模塊,不但支持Mifare卡的數據讀寫操作還支持CPU卡的讀寫操作,通過UART與主控板進行通信。wifi模塊[10]選用SDIOWi-Fi連接無線網絡,通過SD卡的IO口與主控制器實現雙向通信,并能通過Wifi掛載到路由上去,連接外網。LCD觸摸屏選用7寸TFT電容屏,可用于觸摸控制,顯示信息等。儲物柜使用電控鎖,由繼電器控制。為了節省IO,盡可能控制多個儲物柜電子鎖,選用CD4514四——十六譯碼器進行譯碼之后連接繼電器模塊進行開關控制。
智能終端軟件設計主要包括Wi-Fi模塊驅動設計、RFID讀寫驅動設計,Linux系統裁剪及移植和智能終端應用軟件設計[11]。

圖3 智能儲物柜控制信息流
為了進行智能控制,方便數據庫的使用,在嵌入式智能終端S3C2440A主控板上移植嵌入式Linux2.6.32系統和QT界面系統。在硬件電路中,wifi模塊通過SD卡的IO口與主控制器進行通信,配置wifi模塊驅動需要內核支持SDIO功能和marvell-8686,將 marvell-8686的 wifi模塊固件 sd8686_helper.bin和sd8686.bin拷貝到內核目錄下編譯進內核模塊,添加腳本自動連接無線網絡。RFID讀寫器模塊通過UART口與主控板進行通信,Linux內核已經支持串口讀寫。RFID讀寫程序主要完成檢測天線范圍內的卡和防碰撞,獲取天線范圍內的最大ID。
用QT編寫智能儲物柜終端應用軟件,Mysql數據庫存儲各類用戶及儲物柜狀態信息[12]。刷卡后,用戶和管理員分別進入不同的功能界面。用戶可進行儲物柜租用開啟等功能操作,管理員可進行用戶管理、儲物柜管理、數據庫管理等功能。主要軟件流程圖如圖4所示。

圖4 智能儲物柜終端軟件流程圖
為了與云端數據庫數據保持一致,智能儲物柜終端程序中開辟一個新的process進程,定時通過get方式發送http請求到云端服務器,進行數據交互。該進程把新注冊卡號及箱門開關狀態數據定時發給云服務器,并接收云服務器返回的對儲物柜操作命令。
為了實現終端數據和微信開箱數據的一致性,必須搭建一個中繼的云服務器[13]。云服務器接口程序接收微信服務器轉發的微信post操作請求,根據自定義的通信協議解析操作命令,進行云端數據庫匹配后把操作命令通過智能儲物柜終端的get請求返回給終端,終端接到云服務器返回的操作命令后進行開箱等操作。云服務器功能如圖5所示。

圖5 云服務器功能示意圖
開發者可用微博賬號注冊新浪云服務器進行云端開發,新浪云(SAE)服務器[14]是一款分布式WEB應用/業務開發托管、運行平臺,Web開發語言PHP作為首選的支持語言,Web開發者可以在Linux/Mac/Windows上通過SVN或者Web版在線代碼編輯器進行開發、部署、調試,更好的支持微信公眾號的操作。
為了數據的存儲和處理,在新浪云服務器中建立共享型MySQL數據庫。MySQL數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,增加了訪問速度并提高了靈活性。配置好數據庫后,在數據庫中建立存儲用戶信息的相應數據表,并在云服務器將數據庫與服務器相連接。本設計最重要的幾張表存儲內容及作用如表1所示。

表1 主要數據表存儲內容
手機端軟件開發常用有手機APP 和微信公眾平臺等。市面上手機操作系統大部分分為IOS和安卓,開發手機APP需要分別支持安卓和IOS系統,工作量大且開發過程繁瑣,開發周期長,并且需要用戶下載相應應用,占用手機內存。微信是騰訊公司推出的一個為智能終端提供即時通訊服務的免費應用程序,微信已覆蓋中國90%以上的智能手機。微信公眾號是開發者或商家在微信公眾平臺上申請的應用賬號,該帳號與微信賬號互通,通過公眾號,可在微信平臺上實現和特定群體的文字、圖片、語音、視頻的全方位溝通與互動。微信在安卓和IOS上均有應用,項目依托微信公眾平臺接口進行開發,直接利用微信平臺實現需要的功能,減少了開發工作量,更加方便用戶操作。
當微信公眾號開啟開發者模式,并將之前建立的新浪云服務器域名和平臺的URL(統一資源定位符)與微信服務器綁定后,微信公眾平臺將把用戶發送至公眾號的消息通過HTTP協議以XML的格式轉發至該服務器。在云端服務器上部署的消息接口代碼和解碼消息按照定制的邏輯對消息做出響應,然后將響應以同樣的格式發送至微信服務器,微信服務器再將消息轉發至用戶微信界面,完成一次完整的交互過程。
使用微信公眾平臺接口調試工具,填入微信access_token的值,在body中添加微信規定的數據格式,設計自定義菜單如圖6所示。

圖6 配置菜單界面
設計加入了計費功能,當用戶點擊計費查詢時,服務器便根據用戶綁定的賬號在數據庫中查詢其租用的時間點,把時間點讀取出來,和當前時間算差值。
為了防止用戶不小心誤點擊,開箱和掛失刷卡使用了微信的關鍵字回復。當用戶點擊開箱和掛失刷卡時,詢問是否發生該操作,并對用戶回復的消息進行解析,產生相應的操作。微信開箱的具體軟件設計流程如圖7所示。

圖7 微信開箱軟件設計流程
當微信端有操作時,微信服務器通過https的Post請求與云服務器進行通信,并同時發送4個參數進行校驗。參數表如表2所示。

表2 微信服務器GET請求參數表
云服務器通過檢驗signature簽名對請求進行校驗。若確認此次GET請求來自微信服務器,則原樣返回echostr參數內容,并接入生效,否則接入失敗。signature結合了開發者填寫的Token參數和請求中的timestamp參數、nonce參數。云服務器加密/校驗流程:
1)將 Token、Timestamp、Nonce 3個參數進行字典序排序。
2)將3個參數字符串拼接成一個字符串進行Sha1加密。
3)開發者獲得加密后的字符串可與Signature對比,標識該請求來源于微信。
云服務器接口程序校驗簽名[15]后,解析出操作命令,標記云數據庫后把操作指令送給智能儲物柜終端,并返回響應數據給微信。
微信access_token值是公眾號的全局唯一接口調用憑據,公眾號調用各接口時都需使用,目前有效期為兩個小時,需定時刷新,重復獲取將導致上次獲取的值失效。每天獲取次數限定為2000次[16],為了方面大流量訪問,對值的獲取改進為如下圖8方法所示,利用數據庫來保存access_token的值,在第一次獲取access_token值后,和當前獲取時間一起存入數據庫,以后每次需要使用該值時,先向數據庫查詢該值的獲取時間進行對比,兩個小時之內直接使用數據庫中存儲的值,超過兩小時便重新獲取access_token的值存入數據庫,此方法解決了每天access_token值獲取次數有限的問題。

圖8 改進的access_token值獲取方法
在實驗室環境對系統各部分功能進行測試,系統上電運行后,用各類餐卡,超市會員卡等RFID卡進行刷卡開箱測試,系統平均在2秒內開箱成功并把結果顯示在LCD屏幕上。用手機微信掃描LCD屏幕上的二維碼關注微信公眾號進行開箱測試,用時4秒左右。
本系統采用云服務器作為中繼和接口服務器,實現了嵌入式智能終端和微信公眾號平臺的實時數據共享互通。利用數據庫存儲了用戶使用數據,方面管理的同時還可以對用戶數據進行大數據分析。RFID和微信雙憑證的開箱方式,在便捷性、智能性、安全性、信息化程度和成本控制及維護性上都有了很大提升。