王永順 玉士蒙
(北京建筑大學電氣與信息工程學院 北京 100044)(建筑大數據智能處理方法研究北京市重點實驗室 北京 100044)
隨著共享經濟概念的流行,在線短租行業越來越被人們接受。信息技術的進步、社會信用體系的不斷完善、人們多樣化的住宿需求以及大量閑置房源,這些都推動了在線短租的發展[1]。但是現有短租房門鎖存在聯網困難、不能實名登記、IC房卡易被復制等安全性問題。雖然有部分門鎖能夠通過云平臺進行管理,但是成本高昂[2]。與此同時,酒店管理存在入住程序繁瑣,用戶等待時間長等問題[3]。
本文設計開發了一款基于云平臺的智能門鎖系統,該智能門鎖系統包括三部分,即門鎖端、云平臺和手機端APP。門鎖端嵌入Wi-Fi模塊實現了與京東微聯云平臺的互聯,解決了傳統門鎖不能聯網的問題。門鎖端嵌入身份證讀取模塊,可讀取用戶身份信息并進行注冊登記,也可通過云平臺在手機端APP注冊,從而能夠縮減酒店入住程序,同時使用身份證作為房卡,降低了房卡被復制的風險。除身份證識別外,門鎖端還可利用密碼鍵盤作為輔助開鎖手段,密碼輸入設置了虛位密碼功能,能夠有效降低用戶的安全風險。云平臺將手機端和門鎖端發送的數據包加上時間戳,用以顯示操作時間。手機端能夠對用戶和門鎖進行注冊和控制,顯示門鎖當前及過去狀態信息。本文中的門鎖端利用STM32F103RCT6單片機作為主控芯片,單片機通過無線通信技術上傳用戶操作信息,保證了用戶數據的可查看性。目前常用的無線通信技術主要有Bluetooth、IEEE802.11a、UWB等[4-5],其中基于IEEE802.11a協議的Wi-Fi通信具有覆蓋范圍廣(Wi-Fi組網)、傳輸速度快、節省開發成本等優點[6-7],因此本文在技術上采用Wi-Fi通信。
智能門鎖系統主要由門鎖端、云平臺和手機端APP三部分組成。門鎖端主要包括STM32F103RCT6主控單片機、數字鍵盤模塊、身份證讀取模塊和Wi-Fi通信模塊,用于進行身份認證和開/關鎖控制。云平臺使用京東微聯,實現手機端與門鎖端的通信。用戶在手機端操作APP,用于注冊和對門鎖端進行遠程控制。系統總體結構圖如圖1所示。

圖1 系統及協議結構圖
在門鎖端主要實現虛位數字密碼開鎖、身份證認證及開鎖、雙重認證開鎖等功能,并可將開鎖相關信息通過Wi-Fi模塊上傳到京東微聯。數字鍵盤融合虛位密碼技術,使用KMP算法實現虛位密碼輸入,以防被偷窺,同時具有密碼設置、修改、刪除等功能。云平臺主要對Wi-Fi模塊傳輸來的數據加上時間戳,然后將數據傳到手機端,為用戶提供門鎖實時數據,同時可將用戶在手機端的注冊信息傳輸到門鎖端。在手機端主要實現對門鎖端的遠程控制、注冊,并可以顯示門鎖的操作信息,主要包括身份證號錄入實現實名注冊、對門鎖的遠程開關控制、顯示當前門鎖的開關狀態、開關時間以及相應開鎖人身份等。此外,門鎖端的控制電路還具有待機、喚醒等功能,使電路在低功耗下運行。
京東微聯作為云服務器,在門鎖聯網過程中將Wi-Fi模塊按照JoyLink協議傳送來的json格式的數據進行登記并保存,主要包括身份證號、輸入密碼和開鎖密碼以及用戶的操作方式等信息。同時京東微聯將門鎖狀態等信息通過網絡按照JoyLink協議發送到用戶手機APP中。
門鎖端單片機與數字鍵盤模塊使用IIC協議通信,與身份證讀取模塊使用USART進行通信,與Wi-Fi模塊使用SPI總線進行通信。門鎖系統的協議結構圖如圖1所示。
系統注冊使用手機端注冊和門鎖端注冊兩種方法。用戶在APP中輸入身份證號,通過云平臺將數據傳輸到門鎖端進行注冊,同時用戶也能在門鎖端輸入身份證號進行注冊。用戶可通過注冊過的身份證進行開鎖密碼的設置,并選擇開鎖認證方式。用戶自行注冊的方式簡化了短租房和酒店的管理程序,保證了房卡的唯一性。門鎖的注冊/使用流程如圖2所示。

圖2 注冊/使用流程圖
京東微聯作為云平臺,為用戶提供遠程控制、雙向通信,對數據進行登記和存儲[8],對門鎖狀態及相關信息進行傳輸,并在數據包中加入時間戳為用戶提供時間信息。
京東微聯在系統中承擔兩項工作:接收Wi-Fi模塊發送的門鎖信息數據,對其進行解析、保存,并將其發送到手機端,H5交互界面提供信息數據的展示;將手機端發送的控制命令、身份證和注冊等信息通過網絡發送給門鎖端。
京東微聯官網提供開發者平臺,首先需要在平臺上創建產品,并對產品信息進行完善。之后云平臺會給設備匹配專用的調試序列號(UUID),將UUID寫入到Wi-Fi程序中即可實現虛擬設備調試。在虛擬設備調試中可對多種功能參數進行設置,并對手機端進行消息推送的設置。
京東微聯云平臺與門鎖及手機均使用JoyLink協議通信,且提供了JoyLink協議的SDK和相關的技術文檔及開發流程,將SDK移植到Wi-Fi模塊中即可實現與門鎖端的交互。平臺會在每次的協議包中加上時間戳用以時間顯示。
手機端主要提供HTML5交互界面,供用戶查看門鎖狀態及開鎖記錄,能夠對門鎖狀態進行控制,并可對身份證號進行注冊登記。
2.2.1 JoyLink2.0協議
JoyLink2.0協議是京東微聯開放平臺提供的標準接入協議,主要功能包括設備發現、feedid、accesskey、localkey寫入、獲取設備快照,控制設備等[9]。JoyLink協議中定義的數據格式如表1所示。協議包頭結構體packet包含的信息如表2所示。

表1 JoyLink數據格式

表2 協議包頭結構體
2.2.2 JoyLink協議通信
APP從JoyLink SDK協議中讀取設備對應的feedID是否在線,若設備在線就將控制請求提交給SDK,SDK通過UDP協議透傳給門鎖,門鎖執行相應動作后原路返回通知APP,同時異步告知云端。設備上電后會向云端發送認證請求,云端在驗證設備合法性后,會隨機生成一個設備與云端生成的對話密鑰,用于云端與門鎖的通信。門鎖認證成功后與云端建立長連接,之后控制、數據上報等數據包體進行AES加解密[9]。
2.2.3 HTML5界面開發
手機APP前端開發選用HTML5在京東微聯APP中生成信息及控制界面,主要實現注冊登記、門鎖開關控制以及開關記錄功能。手機端及云平臺的開發主要是對手機端H5界面和控制邏輯的開發,主要包括HTML5、CSS、JavaScript和vue.js技術的開發。界面設計以iPhone5為主要設計尺寸(640×1 136),左右各留8 px的間距,運用柵格原理進行設計的規范樣式,每列柵格均按照52 px×52 px為單位的基礎柵格尺寸進行。整體布局規范從上至下依次為:頂部導航欄、狀態顯示區、功能控制區、底部輔助信息區。
狀態顯示區主要呈現設備當前的運行狀態(不可控參數),可以讓用戶直觀地獲取到設備運行信息。功能控制區用于放置設備的控制功能,主要用于身份證號登記以及門鎖控制,功能控制區采用卡片方式進行布局。
為解決前端界面適配的問題,首先在JavaScript中獲取當前設備的寬度,對于Internet Explorer、Chrome、Firefox、Opera和Safari等瀏覽器來說,獲取設備寬度方法為window.innerWidth,但是對于Internet Explorer 5~8瀏覽器獲取設備的寬度方法為document.documentElement.clientWidth,所以為了兼容所有瀏覽器,選擇用var clientWidth=document.documentElement.clientWidth‖window.innerWidth來兼容所有的瀏覽器,以獲得瀏覽器寬度來適配設備。然后根據設置的baseWidth和baseFontSize的值,通過rem=Math.floor(clientWidth/baseWidth×baseFontSize)計算出設備的rem值。最后根據獲得的rem值來重置頁面中的控件、字體等大小,以保證頁面在任意設備中都能正確顯示。H5開發的界面如圖3所示。

圖3 H5主界面
頁面body部分通過v-show與vue對象中的pages.index綁定,當pages.index為真時,界面顯示正常,當pages.index為假時,頁面顯示空白。頁面由三個div部分組成,最上面的是設備狀態顯示區,由一個image標簽組成,圖片像素為640 px×280 px,設備狀態顯示部分顯示門鎖的開合狀態,當鎖為閉合狀態時,鎖的顏色為藍色,否則為紅色。中間的控制部分由左右兩部分組成,在HTML中用兩個div區分開,而樣式主要在css中定義。左側是設備狀態文字顯示區,由vue對象中的變量控制,右側是vue控件,綁定了命令下發函數。在手機端點擊控件時,根據手機界面顯示的狀態,調用JDSMART.io.controlDevice方法,下發與現在狀態相反的命令,同時也會根據返回數據來進一步更新頁面。最下側的div部分是日志查詢部分,在此div標簽中添加了click事件,點擊該按鈕會調用JDSMART.app.openUrl 方法打開使用記錄查詢頁面,調用JDSMART.io.getWifiHistory方法查詢開門的記錄情況,根據返回的數據將開鎖記錄顯示在新打開的頁面上。
前端的邏輯控制是由JavaScript部分來完成的。首先頁面加載后JDSMART.ready方法會對設備信息進行初始化,查詢設備的狀態、獲取設備快照,根據得到的信息更新界面。然后設置4秒的定時函數,定時獲取設備快照,以獲取設備的狀態。在設備控制區域的組件power通過vue綁定了click事件,當用戶在手機端點擊時,可以實時地發送消息到設備端,返回值為執行的結果,JavaScript根據返回的結果調用函數及時地刷新頁面。
硬件電路部分使用DXP進行PCB設計,通過接插件與接在鎖芯上的接插件相連進行控制。門鎖端可由兩種方式供電:干電池供電和外置USB接口供電。控制主板主要包括聲光人機交互以及電機驅動部分。
3.1.1 控制單元及Wi-Fi通信模塊
門鎖端控制單元的核心選擇STM32F103RCT6單片機。STM32F103RCT6具有13個多種類型的通信接口,51個I/O口能夠滿足門鎖控制系統對外圍設備的控制需求[10]。Wi-Fi通信模塊采用LHW100A模塊,模塊內嵌TCP/IP協議,能夠與網絡服務器進行實時通信,并且支持高速SPI接口,能夠適應Wi-Fi通信模塊與單片機之間通信的數據量。模塊能夠自動連接無線網絡,以防在網絡斷開之后門鎖部分功能失效。
3.1.2 電源模塊及其接口
干電池供電采用4節干電池通過變壓降到3.3 V,為單片機以及Wi-Fi通信模塊供電。穩壓芯片采用的是AMS1117-5.0和AMS1117-3.3芯片,將4節電池的6 V電壓分別轉換成5 V和3.3 V。穩壓電路通過電容濾波,芯片穩壓,再接濾波電容,從而得到穩定的輸出電壓。6 V轉5 V和3.3 V穩壓電路如圖4、圖5所示。

圖4 6 V轉5 V穩壓電路

圖5 6 V轉3.3 V穩壓電路
本款門鎖在電源模塊加入了USB接口,通過該接口用戶可使用充電寶等供電設備給門鎖供電,以防止門鎖電量耗盡,導致門鎖不能正常打開。USB供電穩壓電路如圖6所示。

圖6 USB供電穩壓電路
3.1.3 數字鍵盤模塊
數字鍵盤模塊使用IIC接口與單片機進行通信,單片機采用中斷方式讀取中斷狀態寄存器,檢查是哪個按鍵產生中斷。數字鍵盤采用4× 3數字鍵盤,數字鍵盤模塊如圖7所示。圖中‘*’和‘#’分別作為“取消”和“確定”使用;鍵盤主要用于密碼輸入、密碼修改、菜單選擇、系統設置等,是人機交互的關鍵組成部分[11]。

圖7 數字鍵盤模塊
3.1.4 身份證讀取模塊
身份證讀取模塊采用公安部統一認證的身份信息讀取模塊。本設計只利用身份證號來核對并登記身份信息,門鎖會將用戶的身份證號傳輸到云平臺進行登記注冊,進而對相關信息進行采集,包括身份證號、開鎖方式、注冊時間以及注冊有效時長等信息。STM32通過串口采用輪詢法來對身份證讀取模塊進行信息采集,模塊收到單片機的查詢信息會對該查詢進行回應并將身份證號傳輸給單片機,單片機對身份證號進行驗證,判斷該身份證的有效性。身份證讀取模塊如圖8所示。

圖8 身份證讀取模塊
3.1.5 控制主板
控制主板上的功能模塊主要包括功能指示燈、蜂鳴器、輸入按鍵、電機驅動等模塊。在每個輸入輸出引腳連接光電耦合器進行光電隔離,以提高系統的抗干擾能力。電機驅動電路采用直流電機驅動芯片MX08,該芯片給鎖芯內部的電機提供驅動,電機驅動電路圖如圖9所示。在接收到開鎖/關鎖信號后,電機正轉/反轉并帶動鎖舌移動。鎖舌一端有限位開關,當鎖舌移動到指定位置后會觸發限位開關,電機停止轉動。蜂鳴器采用無源蜂鳴器,當輸入端有輸入時會觸發蜂鳴器,單片機使用PWM方波控制無源蜂鳴器發出聲音,蜂鳴器驅動電路如圖10所示。掉電保護電路采用法拉電容串接電阻的方法,放電時間足夠單片機執行緊急存儲的時間。

圖9 電機驅動電路

圖10 蜂鳴器驅動電路
單片機程序開發是在keil的編程環境下完成的,包括身份證識別模塊控制程序、數字鍵盤控制程序、KMP算法、SPI通信程序以及休眠喚醒、掉電存儲等附屬功能的程序編寫。
3.2.1 身份證識別模塊
單片機在上電后對系統以及各通信模塊接口進行初始化并進入循環操作,單片機通過串口持續發出尋卡指令,當收到尋卡成功指令后,發出讀取身份信息指令,身份證識別模塊將采集到的身份信息統一通過串口傳給單片機。控制單元在接收到身份信息后對身份證號數據進行篩選,之后進行保存并對比。身份證識別模塊的信息傳遞工作流程圖如圖11所示。
3.2.2 數字鍵盤模塊程序開發
KMP算法是字符串匹配中是最常用的算法之一,同時也是效率較高的算法[12]。KMP算法的基本思想是當一次匹配過程中出現失配時,無需追溯主串指針,而是充分利用已經得到的“部分匹配”的結果將模式向右滑動盡可能遠的一段距離后繼續比較,從而提高了模式匹配的效率[13]。
數字鍵盤模塊在上電之后執行復位并進行初始化,軟件配置使能觸摸中斷功能,按鍵狀態發生變化時中斷引腳產生中斷信號,此時單片機發送查詢指令查詢中斷狀態寄存器,判斷按鍵動作情況。
門鎖的有效密碼設置為6位數字,在按下按鍵后控制單元會通過數組將讀取到的按鍵值進行保存,當讀取到“#”按鍵觸發時,會與系統中存儲的密碼進行比對。系統使用了虛位密碼技術,使用KMP算法將用戶輸入的大于等于6位的用戶密碼與系統密碼進行逐字符匹配。若系統密碼包含在用戶密碼中,即字符串a包含字符串b,則系統返回匹配結果為真,驅動電機開鎖,并通過Wi-Fi模塊上傳門鎖狀態,否則系統會發出錯誤信號,電機無動作。
數字鍵盤模塊與控制單元的通信數據采用IIC時序,數據類型是12位的按鍵狀態寄存器的數據。數字鍵盤模塊工作流程如圖12所示。

圖12 數字鍵盤模塊工作流程圖
3.2.3 掉電信息存儲
在門鎖使用過程中,電池電量耗盡或其他原因而導致系統掉電復位進而導致門鎖不能正常開啟。本文將單片機的FLASH模擬EEPROM配合掉電保護電路來進行密碼信息以及身份信息的存儲。在門鎖掉電之后掉電保護電路放電以提供單片機進行緊急存儲的所需電源,在重新上電后系統會讀取FLASH,將讀取的密碼信息分別重新存儲到相應的數組中。使用單片機自身的FLASH代替EEPROM能夠降低系統功耗,同時節約成本。
3.3.1 Wi-Fi模塊工作流程
Wi-Fi模塊在上電后進行系統初始化,包括系統時鐘初始化、SPI初始化以及JoyLink2.0協議中各種參數的配置等。然后監察系統的網絡配置,如果有配置網絡連接的信息,則按照之前的配置嘗試連接到Wi-Fi,如果沒有則等待配置oneshot。oneshot配置的過程:手機連接路由器,打開oneshot軟件,配置已連接Wi-Fi的信息,然后向Wi-Fi模塊廣播網絡配置的信息,包括ssid、password以及加密方式,Wi-Fi模塊按照手機端發來的配置信息連接路由器。聯網成功后,Wi-Fi模塊一方面接收STM32通過SPI總線發來的數據,另一方面接收云平臺發來的數據命令。
3.3.2 JoyLink通信
Wi-Fi模塊與京東微聯云平臺使用京東提供的JoyLink2.0協議進行通信。Wi-Fi模塊網絡配置成功后,會向云平臺發送認證請求,門鎖認證成功后會與云平臺建立長連接,并發送設備快照,之后即可進行數據傳輸,控制請求及回應等操作。Wi-Fi模塊每隔一定時間會發送心跳請求,以確保門鎖在線。Wi-Fi模塊開發流程圖如圖13所示。

圖13 Wi-Fi模塊開發流程圖
3.3.3 SPI通信
STM32與Wi-Fi通信模塊使用高速SPI接口進行通信。當STM32向Wi-Fi模塊傳輸數據時首先發出片選信號,Wi-Fi通信模塊進入接收模式等待單片機數據的傳入。之后利用透傳功能將數據傳輸到云端進行處理并將處理結果下發至Wi-Fi通信模塊和手機用戶APP,提醒用戶采取相應的措施。單片機通過SPI通信向Wi-Fi模塊讀數據的程序如下:
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模塊發送讀數據指令,之后向Wi-Fi模塊發送無效數據以得到有效數據,關閉片選并將SPI有關位進行置位。寫數據與讀數據類似。單片機向Wi-Fi模塊寫數據的程序如下: GPIO_ResetBits(GPIOA, GPIO_Pin_4); SPI1_ReadWriteByte(0x90); //寫數據命令 for(i=0; i { SPI1_ReadWriteByte(*(TXBuf+i)); } GPIO_SetBits(GPIOA, GPIO_Pin_4); 本文設計開發的智能門鎖控制系統主要包括門鎖端、云平臺和手機端APP三部分。使用Wi-Fi模塊通過互聯網實現云平臺和手機端對門鎖端控制與信息采集。門鎖端使用身份證代替IC卡作為房卡,并且數字鍵盤結合KMP算法設置虛位密碼功能,分別實現身份證、數字密碼以及手機端控制三種開鎖方式進行開鎖操作。同時能夠實現實名認證、內部鎖定、掉電保護、備用電源接口等功能。 本文所設計開發的智能門鎖控制系統能夠保障用戶的安全,使用方便。所采用的虛位密碼技術能夠有效防止偷窺等行為,安全可靠性高;使用身份證代替IC卡作為房卡,能夠有效解決IC房卡易被復制等安全性問題;使用云平臺進行實名登記,能夠減少酒店的入住程序,并且在解決聯網問題的同時,能夠降低開發成本。經過測試,證明本文所開發的門鎖控制系統穩定可靠,具有很好的應用前景。4 結 語