王永順 玉士蒙
(北京建筑大學電氣與信息工程學院 北京 100044)(建筑大數(shù)據(jù)智能處理方法研究北京市重點實驗室 北京 100044)
隨著共享經(jīng)濟概念的流行,在線短租行業(yè)越來越被人們接受。信息技術的進步、社會信用體系的不斷完善、人們多樣化的住宿需求以及大量閑置房源,這些都推動了在線短租的發(fā)展[1]。但是現(xiàn)有短租房門鎖存在聯(lián)網(wǎng)困難、不能實名登記、IC房卡易被復制等安全性問題。雖然有部分門鎖能夠通過云平臺進行管理,但是成本高昂[2]。與此同時,酒店管理存在入住程序繁瑣,用戶等待時間長等問題[3]。
本文設計開發(fā)了一款基于云平臺的智能門鎖系統(tǒng),該智能門鎖系統(tǒng)包括三部分,即門鎖端、云平臺和手機端APP。門鎖端嵌入Wi-Fi模塊實現(xiàn)了與京東微聯(lián)云平臺的互聯(lián),解決了傳統(tǒng)門鎖不能聯(lián)網(wǎng)的問題。門鎖端嵌入身份證讀取模塊,可讀取用戶身份信息并進行注冊登記,也可通過云平臺在手機端APP注冊,從而能夠縮減酒店入住程序,同時使用身份證作為房卡,降低了房卡被復制的風險。除身份證識別外,門鎖端還可利用密碼鍵盤作為輔助開鎖手段,密碼輸入設置了虛位密碼功能,能夠有效降低用戶的安全風險。云平臺將手機端和門鎖端發(fā)送的數(shù)據(jù)包加上時間戳,用以顯示操作時間。手機端能夠對用戶和門鎖進行注冊和控制,顯示門鎖當前及過去狀態(tài)信息。本文中的門鎖端利用STM32F103RCT6單片機作為主控芯片,單片機通過無線通信技術上傳用戶操作信息,保證了用戶數(shù)據(jù)的可查看性。目前常用的無線通信技術主要有Bluetooth、IEEE802.11a、UWB等[4-5],其中基于IEEE802.11a協(xié)議的Wi-Fi通信具有覆蓋范圍廣(Wi-Fi組網(wǎng))、傳輸速度快、節(jié)省開發(fā)成本等優(yōu)點[6-7],因此本文在技術上采用Wi-Fi通信。
智能門鎖系統(tǒng)主要由門鎖端、云平臺和手機端APP三部分組成。門鎖端主要包括STM32F103RCT6主控單片機、數(shù)字鍵盤模塊、身份證讀取模塊和Wi-Fi通信模塊,用于進行身份認證和開/關鎖控制。云平臺使用京東微聯(lián),實現(xiàn)手機端與門鎖端的通信。用戶在手機端操作APP,用于注冊和對門鎖端進行遠程控制。系統(tǒng)總體結構圖如圖1所示。
圖1 系統(tǒng)及協(xié)議結構圖
在門鎖端主要實現(xiàn)虛位數(shù)字密碼開鎖、身份證認證及開鎖、雙重認證開鎖等功能,并可將開鎖相關信息通過Wi-Fi模塊上傳到京東微聯(lián)。數(shù)字鍵盤融合虛位密碼技術,使用KMP算法實現(xiàn)虛位密碼輸入,以防被偷窺,同時具有密碼設置、修改、刪除等功能。云平臺主要對Wi-Fi模塊傳輸來的數(shù)據(jù)加上時間戳,然后將數(shù)據(jù)傳到手機端,為用戶提供門鎖實時數(shù)據(jù),同時可將用戶在手機端的注冊信息傳輸?shù)介T鎖端。在手機端主要實現(xiàn)對門鎖端的遠程控制、注冊,并可以顯示門鎖的操作信息,主要包括身份證號錄入實現(xiàn)實名注冊、對門鎖的遠程開關控制、顯示當前門鎖的開關狀態(tài)、開關時間以及相應開鎖人身份等。此外,門鎖端的控制電路還具有待機、喚醒等功能,使電路在低功耗下運行。
京東微聯(lián)作為云服務器,在門鎖聯(lián)網(wǎng)過程中將Wi-Fi模塊按照JoyLink協(xié)議傳送來的json格式的數(shù)據(jù)進行登記并保存,主要包括身份證號、輸入密碼和開鎖密碼以及用戶的操作方式等信息。同時京東微聯(lián)將門鎖狀態(tài)等信息通過網(wǎng)絡按照JoyLink協(xié)議發(fā)送到用戶手機APP中。
門鎖端單片機與數(shù)字鍵盤模塊使用IIC協(xié)議通信,與身份證讀取模塊使用USART進行通信,與Wi-Fi模塊使用SPI總線進行通信。門鎖系統(tǒng)的協(xié)議結構圖如圖1所示。
系統(tǒng)注冊使用手機端注冊和門鎖端注冊兩種方法。用戶在APP中輸入身份證號,通過云平臺將數(shù)據(jù)傳輸?shù)介T鎖端進行注冊,同時用戶也能在門鎖端輸入身份證號進行注冊。用戶可通過注冊過的身份證進行開鎖密碼的設置,并選擇開鎖認證方式。用戶自行注冊的方式簡化了短租房和酒店的管理程序,保證了房卡的唯一性。門鎖的注冊/使用流程如圖2所示。
圖2 注冊/使用流程圖
京東微聯(lián)作為云平臺,為用戶提供遠程控制、雙向通信,對數(shù)據(jù)進行登記和存儲[8],對門鎖狀態(tài)及相關信息進行傳輸,并在數(shù)據(jù)包中加入時間戳為用戶提供時間信息。
京東微聯(lián)在系統(tǒng)中承擔兩項工作:接收Wi-Fi模塊發(fā)送的門鎖信息數(shù)據(jù),對其進行解析、保存,并將其發(fā)送到手機端,H5交互界面提供信息數(shù)據(jù)的展示;將手機端發(fā)送的控制命令、身份證和注冊等信息通過網(wǎng)絡發(fā)送給門鎖端。
京東微聯(lián)官網(wǎng)提供開發(fā)者平臺,首先需要在平臺上創(chuàng)建產(chǎn)品,并對產(chǎn)品信息進行完善。之后云平臺會給設備匹配專用的調試序列號(UUID),將UUID寫入到Wi-Fi程序中即可實現(xiàn)虛擬設備調試。在虛擬設備調試中可對多種功能參數(shù)進行設置,并對手機端進行消息推送的設置。
京東微聯(lián)云平臺與門鎖及手機均使用JoyLink協(xié)議通信,且提供了JoyLink協(xié)議的SDK和相關的技術文檔及開發(fā)流程,將SDK移植到Wi-Fi模塊中即可實現(xiàn)與門鎖端的交互。平臺會在每次的協(xié)議包中加上時間戳用以時間顯示。
手機端主要提供HTML5交互界面,供用戶查看門鎖狀態(tài)及開鎖記錄,能夠對門鎖狀態(tài)進行控制,并可對身份證號進行注冊登記。
2.2.1 JoyLink2.0協(xié)議
JoyLink2.0協(xié)議是京東微聯(lián)開放平臺提供的標準接入?yún)f(xié)議,主要功能包括設備發(fā)現(xiàn)、feedid、accesskey、localkey寫入、獲取設備快照,控制設備等[9]。JoyLink協(xié)議中定義的數(shù)據(jù)格式如表1所示。協(xié)議包頭結構體packet包含的信息如表2所示。
表1 JoyLink數(shù)據(jù)格式
表2 協(xié)議包頭結構體
2.2.2 JoyLink協(xié)議通信
APP從JoyLink SDK協(xié)議中讀取設備對應的feedID是否在線,若設備在線就將控制請求提交給SDK,SDK通過UDP協(xié)議透傳給門鎖,門鎖執(zhí)行相應動作后原路返回通知APP,同時異步告知云端。設備上電后會向云端發(fā)送認證請求,云端在驗證設備合法性后,會隨機生成一個設備與云端生成的對話密鑰,用于云端與門鎖的通信。門鎖認證成功后與云端建立長連接,之后控制、數(shù)據(jù)上報等數(shù)據(jù)包體進行AES加解密[9]。
2.2.3 HTML5界面開發(fā)
手機APP前端開發(fā)選用HTML5在京東微聯(lián)APP中生成信息及控制界面,主要實現(xiàn)注冊登記、門鎖開關控制以及開關記錄功能。手機端及云平臺的開發(fā)主要是對手機端H5界面和控制邏輯的開發(fā),主要包括HTML5、CSS、JavaScript和vue.js技術的開發(fā)。界面設計以iPhone5為主要設計尺寸(640×1 136),左右各留8 px的間距,運用柵格原理進行設計的規(guī)范樣式,每列柵格均按照52 px×52 px為單位的基礎柵格尺寸進行。整體布局規(guī)范從上至下依次為:頂部導航欄、狀態(tài)顯示區(qū)、功能控制區(qū)、底部輔助信息區(qū)。
狀態(tài)顯示區(qū)主要呈現(xiàn)設備當前的運行狀態(tài)(不可控參數(shù)),可以讓用戶直觀地獲取到設備運行信息。功能控制區(qū)用于放置設備的控制功能,主要用于身份證號登記以及門鎖控制,功能控制區(qū)采用卡片方式進行布局。
為解決前端界面適配的問題,首先在JavaScript中獲取當前設備的寬度,對于Internet Explorer、Chrome、Firefox、Opera和Safari等瀏覽器來說,獲取設備寬度方法為window.innerWidth,但是對于Internet Explorer 5~8瀏覽器獲取設備的寬度方法為document.documentElement.clientWidth,所以為了兼容所有瀏覽器,選擇用var clientWidth=document.documentElement.clientWidth‖window.innerWidth來兼容所有的瀏覽器,以獲得瀏覽器寬度來適配設備。然后根據(jù)設置的baseWidth和baseFontSize的值,通過rem=Math.floor(clientWidth/baseWidth×baseFontSize)計算出設備的rem值。最后根據(jù)獲得的rem值來重置頁面中的控件、字體等大小,以保證頁面在任意設備中都能正確顯示。H5開發(fā)的界面如圖3所示。
圖3 H5主界面
頁面body部分通過v-show與vue對象中的pages.index綁定,當pages.index為真時,界面顯示正常,當pages.index為假時,頁面顯示空白。頁面由三個div部分組成,最上面的是設備狀態(tài)顯示區(qū),由一個image標簽組成,圖片像素為640 px×280 px,設備狀態(tài)顯示部分顯示門鎖的開合狀態(tài),當鎖為閉合狀態(tài)時,鎖的顏色為藍色,否則為紅色。中間的控制部分由左右兩部分組成,在HTML中用兩個div區(qū)分開,而樣式主要在css中定義。左側是設備狀態(tài)文字顯示區(qū),由vue對象中的變量控制,右側是vue控件,綁定了命令下發(fā)函數(shù)。在手機端點擊控件時,根據(jù)手機界面顯示的狀態(tài),調用JDSMART.io.controlDevice方法,下發(fā)與現(xiàn)在狀態(tài)相反的命令,同時也會根據(jù)返回數(shù)據(jù)來進一步更新頁面。最下側的div部分是日志查詢部分,在此div標簽中添加了click事件,點擊該按鈕會調用JDSMART.app.openUrl 方法打開使用記錄查詢頁面,調用JDSMART.io.getWifiHistory方法查詢開門的記錄情況,根據(jù)返回的數(shù)據(jù)將開鎖記錄顯示在新打開的頁面上。
前端的邏輯控制是由JavaScript部分來完成的。首先頁面加載后JDSMART.ready方法會對設備信息進行初始化,查詢設備的狀態(tài)、獲取設備快照,根據(jù)得到的信息更新界面。然后設置4秒的定時函數(shù),定時獲取設備快照,以獲取設備的狀態(tài)。在設備控制區(qū)域的組件power通過vue綁定了click事件,當用戶在手機端點擊時,可以實時地發(fā)送消息到設備端,返回值為執(zhí)行的結果,JavaScript根據(jù)返回的結果調用函數(shù)及時地刷新頁面。
硬件電路部分使用DXP進行PCB設計,通過接插件與接在鎖芯上的接插件相連進行控制。門鎖端可由兩種方式供電:干電池供電和外置USB接口供電。控制主板主要包括聲光人機交互以及電機驅動部分。
3.1.1 控制單元及Wi-Fi通信模塊
門鎖端控制單元的核心選擇STM32F103RCT6單片機。STM32F103RCT6具有13個多種類型的通信接口,51個I/O口能夠滿足門鎖控制系統(tǒng)對外圍設備的控制需求[10]。Wi-Fi通信模塊采用LHW100A模塊,模塊內(nèi)嵌TCP/IP協(xié)議,能夠與網(wǎng)絡服務器進行實時通信,并且支持高速SPI接口,能夠適應Wi-Fi通信模塊與單片機之間通信的數(shù)據(jù)量。模塊能夠自動連接無線網(wǎng)絡,以防在網(wǎng)絡斷開之后門鎖部分功能失效。
3.1.2 電源模塊及其接口
干電池供電采用4節(jié)干電池通過變壓降到3.3 V,為單片機以及Wi-Fi通信模塊供電。穩(wěn)壓芯片采用的是AMS1117-5.0和AMS1117-3.3芯片,將4節(jié)電池的6 V電壓分別轉換成5 V和3.3 V。穩(wěn)壓電路通過電容濾波,芯片穩(wěn)壓,再接濾波電容,從而得到穩(wěn)定的輸出電壓。6 V轉5 V和3.3 V穩(wěn)壓電路如圖4、圖5所示。
圖4 6 V轉5 V穩(wěn)壓電路
圖5 6 V轉3.3 V穩(wěn)壓電路
本款門鎖在電源模塊加入了USB接口,通過該接口用戶可使用充電寶等供電設備給門鎖供電,以防止門鎖電量耗盡,導致門鎖不能正常打開。USB供電穩(wěn)壓電路如圖6所示。
圖6 USB供電穩(wěn)壓電路
3.1.3 數(shù)字鍵盤模塊
數(shù)字鍵盤模塊使用IIC接口與單片機進行通信,單片機采用中斷方式讀取中斷狀態(tài)寄存器,檢查是哪個按鍵產(chǎn)生中斷。數(shù)字鍵盤采用4× 3數(shù)字鍵盤,數(shù)字鍵盤模塊如圖7所示。圖中‘*’和‘#’分別作為“取消”和“確定”使用;鍵盤主要用于密碼輸入、密碼修改、菜單選擇、系統(tǒng)設置等,是人機交互的關鍵組成部分[11]。
圖7 數(shù)字鍵盤模塊
3.1.4 身份證讀取模塊
身份證讀取模塊采用公安部統(tǒng)一認證的身份信息讀取模塊。本設計只利用身份證號來核對并登記身份信息,門鎖會將用戶的身份證號傳輸?shù)皆破脚_進行登記注冊,進而對相關信息進行采集,包括身份證號、開鎖方式、注冊時間以及注冊有效時長等信息。STM32通過串口采用輪詢法來對身份證讀取模塊進行信息采集,模塊收到單片機的查詢信息會對該查詢進行回應并將身份證號傳輸給單片機,單片機對身份證號進行驗證,判斷該身份證的有效性。身份證讀取模塊如圖8所示。
圖8 身份證讀取模塊
3.1.5 控制主板
控制主板上的功能模塊主要包括功能指示燈、蜂鳴器、輸入按鍵、電機驅動等模塊。在每個輸入輸出引腳連接光電耦合器進行光電隔離,以提高系統(tǒng)的抗干擾能力。電機驅動電路采用直流電機驅動芯片MX08,該芯片給鎖芯內(nèi)部的電機提供驅動,電機驅動電路圖如圖9所示。在接收到開鎖/關鎖信號后,電機正轉/反轉并帶動鎖舌移動。鎖舌一端有限位開關,當鎖舌移動到指定位置后會觸發(fā)限位開關,電機停止轉動。蜂鳴器采用無源蜂鳴器,當輸入端有輸入時會觸發(fā)蜂鳴器,單片機使用PWM方波控制無源蜂鳴器發(fā)出聲音,蜂鳴器驅動電路如圖10所示。掉電保護電路采用法拉電容串接電阻的方法,放電時間足夠單片機執(zhí)行緊急存儲的時間。
圖9 電機驅動電路
圖10 蜂鳴器驅動電路
單片機程序開發(fā)是在keil的編程環(huán)境下完成的,包括身份證識別模塊控制程序、數(shù)字鍵盤控制程序、KMP算法、SPI通信程序以及休眠喚醒、掉電存儲等附屬功能的程序編寫。
3.2.1 身份證識別模塊
單片機在上電后對系統(tǒng)以及各通信模塊接口進行初始化并進入循環(huán)操作,單片機通過串口持續(xù)發(fā)出尋卡指令,當收到尋卡成功指令后,發(fā)出讀取身份信息指令,身份證識別模塊將采集到的身份信息統(tǒng)一通過串口傳給單片機。控制單元在接收到身份信息后對身份證號數(shù)據(jù)進行篩選,之后進行保存并對比。身份證識別模塊的信息傳遞工作流程圖如圖11所示。
3.2.2 數(shù)字鍵盤模塊程序開發(fā)
KMP算法是字符串匹配中是最常用的算法之一,同時也是效率較高的算法[12]。KMP算法的基本思想是當一次匹配過程中出現(xiàn)失配時,無需追溯主串指針,而是充分利用已經(jīng)得到的“部分匹配”的結果將模式向右滑動盡可能遠的一段距離后繼續(xù)比較,從而提高了模式匹配的效率[13]。
數(shù)字鍵盤模塊在上電之后執(zhí)行復位并進行初始化,軟件配置使能觸摸中斷功能,按鍵狀態(tài)發(fā)生變化時中斷引腳產(chǎn)生中斷信號,此時單片機發(fā)送查詢指令查詢中斷狀態(tài)寄存器,判斷按鍵動作情況。
門鎖的有效密碼設置為6位數(shù)字,在按下按鍵后控制單元會通過數(shù)組將讀取到的按鍵值進行保存,當讀取到“#”按鍵觸發(fā)時,會與系統(tǒng)中存儲的密碼進行比對。系統(tǒng)使用了虛位密碼技術,使用KMP算法將用戶輸入的大于等于6位的用戶密碼與系統(tǒng)密碼進行逐字符匹配。若系統(tǒng)密碼包含在用戶密碼中,即字符串a(chǎn)包含字符串b,則系統(tǒng)返回匹配結果為真,驅動電機開鎖,并通過Wi-Fi模塊上傳門鎖狀態(tài),否則系統(tǒng)會發(fā)出錯誤信號,電機無動作。
數(shù)字鍵盤模塊與控制單元的通信數(shù)據(jù)采用IIC時序,數(shù)據(jù)類型是12位的按鍵狀態(tài)寄存器的數(shù)據(jù)。數(shù)字鍵盤模塊工作流程如圖12所示。
圖12 數(shù)字鍵盤模塊工作流程圖
3.2.3 掉電信息存儲
在門鎖使用過程中,電池電量耗盡或其他原因而導致系統(tǒng)掉電復位進而導致門鎖不能正常開啟。本文將單片機的FLASH模擬EEPROM配合掉電保護電路來進行密碼信息以及身份信息的存儲。在門鎖掉電之后掉電保護電路放電以提供單片機進行緊急存儲的所需電源,在重新上電后系統(tǒng)會讀取FLASH,將讀取的密碼信息分別重新存儲到相應的數(shù)組中。使用單片機自身的FLASH代替EEPROM能夠降低系統(tǒng)功耗,同時節(jié)約成本。
3.3.1 Wi-Fi模塊工作流程
Wi-Fi模塊在上電后進行系統(tǒng)初始化,包括系統(tǒng)時鐘初始化、SPI初始化以及JoyLink2.0協(xié)議中各種參數(shù)的配置等。然后監(jiān)察系統(tǒng)的網(wǎng)絡配置,如果有配置網(wǎng)絡連接的信息,則按照之前的配置嘗試連接到Wi-Fi,如果沒有則等待配置oneshot。oneshot配置的過程:手機連接路由器,打開oneshot軟件,配置已連接Wi-Fi的信息,然后向Wi-Fi模塊廣播網(wǎng)絡配置的信息,包括ssid、password以及加密方式,Wi-Fi模塊按照手機端發(fā)來的配置信息連接路由器。聯(lián)網(wǎng)成功后,Wi-Fi模塊一方面接收STM32通過SPI總線發(fā)來的數(shù)據(jù),另一方面接收云平臺發(fā)來的數(shù)據(jù)命令。
3.3.2 JoyLink通信
Wi-Fi模塊與京東微聯(lián)云平臺使用京東提供的JoyLink2.0協(xié)議進行通信。Wi-Fi模塊網(wǎng)絡配置成功后,會向云平臺發(fā)送認證請求,門鎖認證成功后會與云平臺建立長連接,并發(fā)送設備快照,之后即可進行數(shù)據(jù)傳輸,控制請求及回應等操作。Wi-Fi模塊每隔一定時間會發(fā)送心跳請求,以確保門鎖在線。Wi-Fi模塊開發(fā)流程圖如圖13所示。
圖13 Wi-Fi模塊開發(fā)流程圖
3.3.3 SPI通信
STM32與Wi-Fi通信模塊使用高速SPI接口進行通信。當STM32向Wi-Fi模塊傳輸數(shù)據(jù)時首先發(fā)出片選信號,Wi-Fi通信模塊進入接收模式等待單片機數(shù)據(jù)的傳入。之后利用透傳功能將數(shù)據(jù)傳輸?shù)皆贫诉M行處理并將處理結果下發(fā)至Wi-Fi通信模塊和手機用戶APP,提醒用戶采取相應的措施。單片機通過SPI通信向Wi-Fi模塊讀數(shù)據(jù)的程序如下:
GPIO_ResetBits(GPIOA, GPIO_Pin_4);
SPI1_ReadWriteByte(0x10);
for(i=0;i { *(RXBuf+i)=SPI1_ReadWriteByte(0xff); } GPIO_SetBits(GPIOA, GPIO_Pin_4); SetSPIStatus(SPI_DATA_IN); STM32單片機進行片選并向Wi-Fi模塊發(fā)送讀數(shù)據(jù)指令,之后向Wi-Fi模塊發(fā)送無效數(shù)據(jù)以得到有效數(shù)據(jù),關閉片選并將SPI有關位進行置位。寫數(shù)據(jù)與讀數(shù)據(jù)類似。單片機向Wi-Fi模塊寫數(shù)據(jù)的程序如下: GPIO_ResetBits(GPIOA, GPIO_Pin_4); SPI1_ReadWriteByte(0x90); //寫數(shù)據(jù)命令 for(i=0; i { SPI1_ReadWriteByte(*(TXBuf+i)); } GPIO_SetBits(GPIOA, GPIO_Pin_4); 本文設計開發(fā)的智能門鎖控制系統(tǒng)主要包括門鎖端、云平臺和手機端APP三部分。使用Wi-Fi模塊通過互聯(lián)網(wǎng)實現(xiàn)云平臺和手機端對門鎖端控制與信息采集。門鎖端使用身份證代替IC卡作為房卡,并且數(shù)字鍵盤結合KMP算法設置虛位密碼功能,分別實現(xiàn)身份證、數(shù)字密碼以及手機端控制三種開鎖方式進行開鎖操作。同時能夠實現(xiàn)實名認證、內(nèi)部鎖定、掉電保護、備用電源接口等功能。 本文所設計開發(fā)的智能門鎖控制系統(tǒng)能夠保障用戶的安全,使用方便。所采用的虛位密碼技術能夠有效防止偷窺等行為,安全可靠性高;使用身份證代替IC卡作為房卡,能夠有效解決IC房卡易被復制等安全性問題;使用云平臺進行實名登記,能夠減少酒店的入住程序,并且在解決聯(lián)網(wǎng)問題的同時,能夠降低開發(fā)成本。經(jīng)過測試,證明本文所開發(fā)的門鎖控制系統(tǒng)穩(wěn)定可靠,具有很好的應用前景。4 結 語