陳明忠,陳榮軍
(1.汕頭職業(yè)技術(shù)學(xué)院 機(jī)電工程系,廣東 汕頭 515078;2. 廣東技術(shù)師范大學(xué) 計算機(jī)科學(xué)學(xué)院,廣東 廣州 510665)
鎖具分為機(jī)械鎖和智能門鎖.機(jī)械鎖使用金屬鑰匙開鎖,存在兩個弊端:一是金屬鑰匙需要隨身攜帶容易丟失,二是金屬鑰匙容易復(fù)制、安全性差[1].隨著人們對生活質(zhì)量的追求,機(jī)械鎖已不能滿足人們對生活簡便、高效、安全的需求,智能門鎖應(yīng)運而生.智能門鎖主要使用射頻、IC卡、指紋、數(shù)字密碼等方式完成開鎖動作[2],無需攜帶金屬鑰匙,廣泛應(yīng)用在短租房、酒店業(yè)和高檔住宅中.
當(dāng)現(xiàn)行的智能門鎖應(yīng)用到短租房以后,若租戶初次看房,短租房房主必須親自到達(dá)現(xiàn)場為租戶開門,不能實現(xiàn)遠(yuǎn)程開鎖;當(dāng)現(xiàn)行的智能門鎖應(yīng)用到酒店業(yè)以后,若客人辦理入住手續(xù)時,必須提供身份證給前臺核查,增加了客人的等待時間.使用IC卡開鎖還存在IC卡容易被非法復(fù)制等問題.本文設(shè)計了一款基于STM32和云平臺的智能門鎖系統(tǒng),該系統(tǒng)允許房主或酒店服務(wù)員對智能門鎖進(jìn)行遠(yuǎn)程控制[3],允許客人憑身份證在門鎖端驗證個人信息,節(jié)省客人在前臺辦理入住手續(xù)時的等待時間.
為了實現(xiàn)短租房房主或酒店服務(wù)員遠(yuǎn)程控制門鎖,就需要開發(fā)一個手機(jī)端程序,然后上傳到云平臺上.如果在門鎖端與云平臺之間選用Wi-Fi 連接方式,這就需要在門鎖端加入Wi-Fi 模塊,通過Wi-Fi模塊連接房間里的路由器,然后再連接到云平臺[4].通常,客人入住酒店、旅館時都需要將身份證呈交前臺核查,增加客人的等待時間.如果客人在網(wǎng)上訂好房間,就要在門鎖端刷身份證進(jìn)入房間,這就需要在門鎖端加入身份證識別模塊.
綜合上述分析,基于STM32和云平臺的智能門鎖系統(tǒng)包括三部分,即門鎖端、云平臺和手機(jī)端程序[5].門鎖端以STM32微控制器為核心,外接Wi-Fi模塊、身份證識別模塊、數(shù)字鍵盤模塊,主要實現(xiàn)身份驗證和門鎖的開關(guān)控制,并將門鎖的開關(guān)信息上傳到云平臺(見圖1).云平臺使用專用于智能家居環(huán)境的京東微聯(lián),主要對Wi-Fi模塊傳輸過來的數(shù)據(jù)加上時間戳,以便顯示數(shù)據(jù)發(fā)生的時間,同時將用戶在手機(jī)端的注冊信息傳輸?shù)介T鎖端.手機(jī)端程序采用Html5開發(fā),以京東微聯(lián)云為服務(wù)器.用戶通過手機(jī)訪問云平臺,首先進(jìn)行身份注冊和房間預(yù)訂,當(dāng)?shù)卿浽破脚_后,便可實現(xiàn)門鎖的遠(yuǎn)程控制,并能查看門鎖當(dāng)前的開關(guān)狀態(tài)、開關(guān)時間等.系統(tǒng)總體框架如圖1所示,STM32與數(shù)字鍵盤模塊的通信協(xié)議是IIC[6],與身份證識別模塊的通信協(xié)議是USART,與Wi-Fi模塊的通信協(xié)議是SPI;門鎖端、云平臺、手機(jī)端使用JoyLink協(xié)議通信.
STM32是意法半導(dǎo)體集團(tuán)(ST)推出的一種高性能、低成本的基于ARM Cortex-M架構(gòu)的微控制器(MCU),本系統(tǒng)選用STM32F103RBT6作為微控制器.該微控制器具有如下優(yōu)勢:
(1)運行速度快,工作頻率高達(dá)72MHz;
(2)儲存容量大,內(nèi)部集成128KB FLASH和20KB的SRAM;
(3)低電壓、低功耗,工作電壓為2.0~3.6V,可設(shè)置待機(jī)、停止和睡眠三種低功耗模式;
(4)外設(shè)接口豐富,有51個IO口:PA0~PA15、PB0~PB15、PC0~PC15、PD0~PD2;
(5)擁有9個通信接口,分別是2個IIC接口、2 個SPI 接 口、3 個USART 串 口、1 個CAN、1個USB;
(6)程序調(diào)試方便,各功能模塊在PC 端開發(fā),然后編譯、生成目標(biāo)文件后,通過ARM仿真器就可燒寫到STM32的存儲器中[7].
身份證識別模塊選用廣州華大股份的MINI身份證閱讀套件板,如圖2所示.該套件是經(jīng)公安機(jī)關(guān)批準(zhǔn)備案的,專用于讀取居民身份證芯片內(nèi)所存儲的壓縮信息,采用非接觸式IC 卡技術(shù)[8],通過USART 口與STM32 通信,套件的RX、TX 引腳分別與STM32 的PB10、PB11連接.
讀卡時,STM32采用輪詢法向身份證識別模塊發(fā)送讀取指令,身份證識別模塊將身份壓縮信息反饋給STM32,STM32將身份壓縮信息還原出來,包括姓名、性別、身份證號、照片等,將對身份證號進(jìn)行驗證,判斷該身份證的有效性,從而實現(xiàn)開鎖動作.
數(shù)字鍵盤模塊由一塊12路電容式觸摸傳感芯片CP2532(如圖3所示),外嵌4×3電容式按鍵組成[9].在12個按鍵中,除了數(shù)字0~9,還包括“*”和"#”分別代表“取消”和“確定”.
該模塊利用CDC(電容數(shù)字轉(zhuǎn)換)技術(shù)把按鍵時產(chǎn)生的電容變化量轉(zhuǎn)換成數(shù)字信號,并通過IIC 接口傳送給STM32[10].CP2532 芯片的INTN、SCL、SDA 引腳分別與STM32 的PB5、PB6、PB7 連接,IADJ引腳通過外接電阻來調(diào)節(jié)12路按鍵的靈敏度.當(dāng)某個按鍵被按下時,中斷狀態(tài)寄存器ISR對應(yīng)位自動置1,芯片的INTN引腳將由高電平變成低電平,并通過PB5傳送給STM32,STM32檢測到中斷信號后,就知曉哪個按鍵被按下,從而實現(xiàn)密碼開鎖.
Wi-Fi 模塊選用北京聯(lián)盛德的WMSP06 模塊.該模塊內(nèi)置32 位ARM CPU、416KB 存儲空間,適應(yīng)于二次開發(fā);該模塊支持IEEE802.11b/g/i 無線標(biāo)準(zhǔn),支持高速的SPI 通信,速率最高達(dá)到50Mbps,滿足Wi-Fi模塊與STM32的通信需求.WMSP06模塊還具有自動連接無線網(wǎng)絡(luò)、靈敏度高、功耗低等優(yōu)點.WiFi模塊與STM32采用SPI協(xié)議通信,WiFi模塊的SPI_CS、SPI_CLK、SPI_DO、SPI_DI引腳分別與STM32的PA4、PA5、PA6、PA7連接.
按軟件的開發(fā)工具和運行環(huán)境,本系統(tǒng)的軟件設(shè)計分為STM32程序設(shè)計、Wi-F模塊設(shè)計和手機(jī)端程序設(shè)計三部分.STM32程序設(shè)計主要實現(xiàn)對板載資源的初始化、用戶身份驗證和智能門鎖的開關(guān)控制,包括STM32芯片的邏輯控制的設(shè)計、身份證識別模塊和數(shù)字鍵盤模塊的設(shè)計,STM32程序的開發(fā)工具為Keil MDK,經(jīng)編譯后燒寫到STM32芯片的Flash中.Wi-Fi模塊的開發(fā)工具為Keil C51,經(jīng)燒寫后存入Wi-Fi模塊的存儲空間中.手機(jī)端程序的開發(fā)工具為Html5,開發(fā)后移殖到云平臺中.
STM32 程序分為主程序模塊、身份證識別模塊、數(shù)字鍵盤模塊[11].當(dāng)STM32 上電之后,首先對系統(tǒng)資源初始化,包括系統(tǒng)時鐘、LED、Key、以及USART、IIC、SPI通信端口初始化,然后對NVIC(嵌套中斷向量控制器)初始化,緊接著,定時器開始計時,并檢測USART、IIC、SPI通信端口是否有中斷請求,若在設(shè)定的時間內(nèi)檢測到某個通信端口有中斷請求,則執(zhí)行相應(yīng)的子模塊后,定時器才重新計時.若在設(shè)定的時間內(nèi)沒有檢測到任何中斷請求,則定時器重新計時,開始新一輪中斷請求的檢測.程序流程圖如圖4所示.
3.1.1 身份證識別模塊設(shè)計
STM32向串口發(fā)送尋證指令,當(dāng)收到“檢測到身份證”的反饋信息之后,再向串口發(fā)送讀證指令[12].若讀證成功,則從讀到的身份證信息提取身份證號,再從數(shù)據(jù)庫中尋找該身份證號,若找到,則開啟門鎖,并通過Wi-Fi模塊上傳門鎖狀態(tài);否則,發(fā)出錯誤信息.程序流程圖如圖5所示.
圖4 主程序流程圖
圖5 身份證識別模塊流程圖
3.1.2 數(shù)字鍵盤模塊設(shè)計
首先定義一個數(shù)組用于存放數(shù)字密碼.當(dāng)STM32的PB5引腳有中斷請求時,STM32就向IIC接口發(fā)送查詢指令,讀取傳感芯片CP2532ISR(中斷狀態(tài)寄存器)置1 的位號,并將該位號轉(zhuǎn)換成鍵值.若讀取的鍵值為數(shù)字,則將鍵值存儲到數(shù)組中;若讀取的鍵值為“*”(取消鍵),則清空數(shù)組;若讀取的鍵值為“#”(確定鍵),則將用戶輸入的密碼與從Flash中讀取的系統(tǒng)密碼相比較,若系統(tǒng)密碼包含在輸入密碼中,則開鎖,否則,發(fā)出錯誤信息.程序流程圖如圖6所示.
圖6 數(shù)字鍵盤模塊流程圖
Wi-Fi模塊的代碼存放在Wi-Fi模塊的存儲空間中.Wi-Fi模塊上電后,首先檢查內(nèi)部是否有聯(lián)網(wǎng)配置信息,如果沒有,則讓手機(jī)連接無線路由器,然后通過oneshot 軟件配置Wi-Fi 的信息(包括ssid、password、加密方式),再通過廣播方式向Wi-Fi 模塊發(fā)送配置信息[13];如有,則嘗試Wi-Fi 模塊與無線路由器的連接.當(dāng)聯(lián)網(wǎng)成功后,Wi-Fi模塊就充當(dāng)STM32和云平臺之間信息傳遞的媒介,一方面,Wi-Fi模塊接收STM32 發(fā)來的門鎖開關(guān)信息并轉(zhuǎn)發(fā)給云平臺;另一方面,Wi-Fi模塊接收云平臺發(fā)來的門鎖遠(yuǎn)程控制命令并轉(zhuǎn)發(fā)給STM32.程序流程圖如圖7所示.
3.3.1 云平臺簡介
京東微聯(lián)官網(wǎng)提供了開發(fā)者平臺,設(shè)備廠商可以通過云平臺對自己的產(chǎn)品進(jìn)行升級優(yōu)化,云平臺也為每個產(chǎn)品分配唯一的調(diào)試序列號(UUID)[14].只要在手機(jī)端指定UUID,就可以將手機(jī)端程序推送到云平臺的相應(yīng)產(chǎn)品中.京東微聯(lián)云平臺提供了JoyLink協(xié)議的SDK,只需要將SDK移植到Wi-Fi模塊中,即可實現(xiàn)門鎖端與手機(jī)端的交互,門鎖端的數(shù)據(jù)包通過云平臺時會自動加上時間戳.
3.3.2 手機(jī)端程序設(shè)計
手機(jī)端程序設(shè)計包括Html5界面設(shè)計和控制邏輯設(shè)計[15].
手機(jī)界面從上到下按導(dǎo)航區(qū)、功能控制區(qū)、狀態(tài)顯示區(qū)布局.功能控制區(qū)主要實現(xiàn)門鎖的遠(yuǎn)程控制、用戶的身份注冊和房間預(yù)訂,狀態(tài)顯示區(qū)主要顯示門鎖的開關(guān)狀態(tài).
Html5界面設(shè)計基于京東微聯(lián)APP,通過京東微聯(lián)的JDSMART控件,用戶可以對不同智能設(shè)備進(jìn)行遠(yuǎn)程控制.控制邏輯設(shè)計由JavaScript實現(xiàn),采用vue控件搭建一種交互界面的漸進(jìn)式框架,實現(xiàn)數(shù)據(jù)的雙向綁定,從而快捷地實現(xiàn)事件觸發(fā)和數(shù)據(jù)更新.當(dāng)手機(jī)端加載頁面時,系統(tǒng)會調(diào)用JDSMART.app.getNetworkType方法獲取app的網(wǎng)絡(luò)狀態(tài);調(diào)用JDSMART.ready方法對設(shè)備信息進(jìn)行初始化.通過定時函數(shù)和JDSMART.io.getSnapshot方法獲取設(shè)備快照,以及時獲取設(shè)備的狀態(tài),并刷新頁面的狀態(tài)顯示區(qū).在頁面的功能控制區(qū),通過vue控件與click事件的綁定構(gòu)造power按鈕,當(dāng)用戶點擊該按鈕時,就調(diào)用JDSMART.io.controlDevice方法發(fā)送控制消息到設(shè)備端,并實時刷新頁面.
針對現(xiàn)行的智能門鎖控制系統(tǒng)的缺陷,設(shè)計了一款智能門鎖控制系統(tǒng).整個系統(tǒng)分為門鎖端、云平臺和手機(jī)端三部分,并對門鎖端進(jìn)行硬件選型與設(shè)計.根據(jù)軟件的開發(fā)工具和運行環(huán)境,把本系統(tǒng)的軟件分為STM32程序、Wi-Fi模塊程序和手機(jī)端程序三個模塊,并對每個模塊進(jìn)行功能設(shè)計.通過對該款智能門鎖進(jìn)行50次的身份證開鎖、50次的數(shù)字密碼開鎖和50次的手機(jī)端遠(yuǎn)程開鎖,其中合法身份證和非法身份證各25次,合法密碼和非法密碼各25次.測試表明,使用合法身份證和合法密碼都能快速正常開鎖,使用非法身份證和非法密碼都無法開鎖,通過手機(jī)端每次都能遠(yuǎn)程開鎖,系統(tǒng)具有較好的穩(wěn)定性.