胡乃平,賈浩杰,袁紹正
(青島科技大學(xué) 信息科學(xué)技術(shù)學(xué)院,山東 青島 266061)
智能鎖經(jīng)歷了電子鎖、單機(jī)智能鎖、無線智能鎖3個(gè)階段[1]。第一階段從20世紀(jì)末開始,這一階段的鎖不是真正意義上的智能鎖,只是取消了傳統(tǒng)意義上的機(jī)械式開鎖,改為NFC刷卡開鎖;第二階段從2010年開始,鎖具上配備了顯示屏,可用密碼、指紋和人臉開鎖;第三階段從2015年開始,將無線通信協(xié)議應(yīng)用于智能鎖上,實(shí)現(xiàn)了無線開鎖[2]。
目前,智能門鎖的無線通訊方案,大多數(shù)采用藍(lán)牙、ZigBee、WiFi等[2]。盛平等將WiFi應(yīng)用于智能鎖系統(tǒng)中[3],便于管理,并且可以實(shí)現(xiàn)視頻監(jiān)控,但是WiFi功耗較大,導(dǎo)致充電的頻率較高。應(yīng)時(shí)彥等設(shè)計(jì)了一種基于ZigBee的聯(lián)網(wǎng)型無線門鎖系統(tǒng)[4],ZigBee功耗較低,但是ZigBee傳輸距離較近。金志剛等研究了藍(lán)牙在物聯(lián)網(wǎng)智能鎖中的安全機(jī)制[5],藍(lán)牙安全性較高且功耗低,但是藍(lán)牙通信也存在傳輸距離較近的問題。沙濤等人將NB-IoT應(yīng)用于公租房背景下的智能鎖[6],NB-IoT功耗極低,傳輸距離遠(yuǎn),但是NB-IoT由運(yùn)行商運(yùn)營,使用NB-IoT成本較高。張錚等人將LoRa通信協(xié)議應(yīng)用到大面積漁業(yè)環(huán)境監(jiān)測[7],通信距離長、功耗低并且成本低。
現(xiàn)有智能鎖傳輸方案大多使用IPv4接入網(wǎng)絡(luò),IPv6與IPv4相比,安全性更高[8]且IP地址不會(huì)出現(xiàn)匱乏的局面[9]。本文將LoRa與IPv6結(jié)合,設(shè)計(jì)了一種基于LoRa和IPv6的智能鎖系統(tǒng),該系統(tǒng)具有功耗低、通信距離長、便于管理、安全性高、成本低等優(yōu)點(diǎn)。
系統(tǒng)設(shè)計(jì)采用自頂向下的模塊化思想,將系統(tǒng)分為4個(gè)部分:執(zhí)行層、網(wǎng)絡(luò)層、服務(wù)層和應(yīng)用層,圖1所示為系統(tǒng)總體架構(gòu)。執(zhí)行層是智能鎖的硬件部分,實(shí)現(xiàn)鎖的各種功能;網(wǎng)絡(luò)層是LoRa的網(wǎng)關(guān)設(shè)備,實(shí)現(xiàn)執(zhí)行層和服務(wù)層之間的數(shù)據(jù)通訊;服務(wù)層運(yùn)行在云服務(wù)器上,實(shí)現(xiàn)業(yè)務(wù)處理和設(shè)備管理;應(yīng)用層運(yùn)行在PC和手機(jī)終端,實(shí)現(xiàn)系統(tǒng)與用戶交互功能。
圖1 系統(tǒng)總體架構(gòu)
執(zhí)行層的設(shè)計(jì)分為硬件和軟件兩部分,硬件設(shè)計(jì)的關(guān)鍵是低功耗設(shè)計(jì),核心是控制器的通訊協(xié)議的選擇。本系統(tǒng)選用低功耗的STM32系列微控器和LoRa通訊協(xié)議。
2.2.1 硬件部分
執(zhí)行層硬件是基于嵌入式技術(shù)設(shè)計(jì)的門鎖節(jié)點(diǎn),由控制器、LoRa通訊模塊、鍵盤模塊、蜂鳴器模塊和直流電機(jī)模塊組成,如圖2所示。
圖2 硬件結(jié)構(gòu)圖
由于門鎖必須采用電池供電,因此低功耗設(shè)計(jì)是系統(tǒng)設(shè)計(jì)的基本要求,通訊是整個(gè)系統(tǒng)降低功耗的關(guān)鍵。目前低功耗通信協(xié)議主要有藍(lán)牙、WiFi、ZigBee、NB-IoT和LoRa等[10],對(duì)比情況如表1所示,LoRa與其他通信協(xié)議相比功耗低、傳播距離遠(yuǎn)、安全性高并且免費(fèi)[11],因此本系統(tǒng)選用LoRa通信協(xié)議。
表1 LoRa和與其他通信協(xié)議對(duì)比
執(zhí)行層控制器的選擇既要考慮低功耗還要考慮對(duì)LoRa協(xié)議的支持,選用了STM32L151CBU6微控器,該系列微控器功耗低、性價(jià)比高、可靠性高。LoRa射頻部分采用基于Semtech SX127x芯片的模塊。
2.2.2 軟件部分
執(zhí)行層軟件由uVision5進(jìn)行開發(fā),使用C語言編程。軟件設(shè)計(jì)必須考慮低功耗設(shè)計(jì),讓控制器大部分時(shí)間處于休眠狀態(tài)。軟件的設(shè)計(jì)思路是主程序完成系統(tǒng)初始化和設(shè)備注冊(cè)等功能后,打開中斷后轉(zhuǎn)入低功耗休眠狀態(tài),系統(tǒng)所有功能通過中斷在中斷服務(wù)程序中實(shí)現(xiàn)。
主程序流程如圖3所示,主要完成系統(tǒng)初始化、MAC初始化、設(shè)備入網(wǎng)和設(shè)備注冊(cè)后進(jìn)入到無限循環(huán),在無限循環(huán)中將系統(tǒng)設(shè)置為低功耗休眠狀態(tài)。這樣系統(tǒng)如果沒有中斷產(chǎn)生,就一直處于休眠低功耗狀態(tài),實(shí)現(xiàn)最大限度的節(jié)能,當(dāng)有中斷事件發(fā)生后,執(zhí)行中斷服務(wù)程序,中斷服務(wù)程序執(zhí)行完后,系統(tǒng)重新進(jìn)入低功耗狀態(tài)。
系統(tǒng)的子程序模塊,主要包括兩部分:指令執(zhí)行模塊和鍵盤密碼開鎖模塊。
1)執(zhí)行指令模塊:該模塊功能通過設(shè)置每隔0.5秒產(chǎn)生定時(shí)器中斷來實(shí)現(xiàn)。每隔0.5秒在定時(shí)器中斷中啟動(dòng)門鎖節(jié)點(diǎn)設(shè)備上的LoRa接收機(jī)進(jìn)行信道活動(dòng)檢測(CAD),檢測空中是否有呼叫信號(hào),LoRa接收機(jī)檢測完成后產(chǎn)生CADdetected中斷信號(hào)。該中斷信號(hào)接入微控器,產(chǎn)生外部中斷,在中斷服務(wù)程序中,實(shí)現(xiàn)執(zhí)行指令的功能。在CADdetected中斷中,首先要清除定時(shí)器中斷,然后將執(zhí)行層設(shè)置為接收數(shù)據(jù)狀態(tài),接收應(yīng)用層下發(fā)的指令,指令分為4種:”0”,”1”,”2”,或者是六位數(shù)字,分別對(duì)應(yīng)開鎖、關(guān)鎖、緊急關(guān)鎖(蜂鳴器響)和新密碼。開鎖功能執(zhí)行后,如果與按鍵相連的CPU引腳為輸出模式,則置為輸入模式,恢復(fù)鍵盤功能,系統(tǒng)的執(zhí)行結(jié)果發(fā)送給服務(wù)層后進(jìn)入低功耗狀態(tài)。
2)鍵盤密碼開鎖模塊:鍵盤的“*”鍵接入微控器的外部中斷,按下”*”鍵會(huì)觸發(fā)外部中斷,開啟10 s定時(shí)器,在10 s的時(shí)間內(nèi), “#”鍵被按下則密碼輸入結(jié)束,若輸入密碼正確,執(zhí)行開鎖并發(fā)送鎖狀態(tài)給服務(wù)層,關(guān)閉定時(shí)器,程序返回。若輸入密碼錯(cuò)誤,則蜂鳴器提示,定時(shí)器復(fù)位,用戶可重新輸入,如果錯(cuò)誤次數(shù)大于5次,則鍵盤鎖死(與按鍵相連的引腳改為輸出模式),用戶不能再使用密碼開鎖,只能使用APP開鎖。在10 s的時(shí)間內(nèi),“#”鍵未被按下,程序返回。
網(wǎng)關(guān)開發(fā)選用HT-M01,基于Semtech SX1301芯片。網(wǎng)關(guān)的功能是協(xié)議轉(zhuǎn)換,實(shí)現(xiàn)LoRa協(xié)議和以太網(wǎng)協(xié)議的轉(zhuǎn)換,用來連接門鎖節(jié)點(diǎn)和云服務(wù)器。網(wǎng)關(guān)結(jié)構(gòu)如圖3所示,網(wǎng)關(guān)將門鎖節(jié)點(diǎn)上傳的數(shù)據(jù)通過packet_forwarder服務(wù),使用UDP發(fā)送到網(wǎng)關(guān)本地的1 700端口上。LoRa-gateway-bridge服務(wù)使用UDP從網(wǎng)關(guān)本地的1 700端口接收packet_forwarder服務(wù)發(fā)送的數(shù)據(jù),并解析成有效數(shù)據(jù),將數(shù)據(jù)打包成json格式,打包完成之后,LoRa-gateway-bridge服務(wù)將打包數(shù)據(jù)使用MQTT協(xié)議[12]從網(wǎng)關(guān)通過IPv6地址發(fā)布到云服務(wù)器中的Mosquitto消息代理服務(wù)器,供服務(wù)層訂閱。
圖3 網(wǎng)關(guān)結(jié)構(gòu)圖
服務(wù)層一共包含兩部分:LoRa服務(wù)器和業(yè)務(wù)服務(wù)器。LoRa服務(wù)器負(fù)責(zé)管理和對(duì)接LoRa底層網(wǎng)絡(luò),業(yè)務(wù)服務(wù)器實(shí)現(xiàn)整個(gè)系統(tǒng)管理和控制功能。
2.3.1 業(yè)務(wù)服務(wù)器
用戶開鎖使用APP簡便快捷,而使用PC對(duì)人員信息進(jìn)行處理更加直觀,因此業(yè)務(wù)服務(wù)器使用混合架構(gòu),包含兩部分:一部分是管理端,基于B/S架構(gòu)實(shí)現(xiàn);前后端都部署在服務(wù)器。另一部分是用戶端,基于C/S架構(gòu)實(shí)現(xiàn),通過手機(jī)APP操作。
管理端使用IDEA進(jìn)行設(shè)計(jì)開發(fā),功能有權(quán)限設(shè)置、注冊(cè)人員信息修改、宿舍人員信息修改。管理端的后端使用MySQL數(shù)據(jù)庫存儲(chǔ)信息,并用MyBatis管理數(shù)據(jù)庫。UI界面使用Element UI進(jìn)行設(shè)計(jì),并使用Layout進(jìn)行布局,采用Icon、Buton、Form、Avatar、NavMenu、Dropdown、Dialog等組件用于展示數(shù)據(jù)并與用戶交互。
業(yè)務(wù)服務(wù)器的數(shù)據(jù)庫由device、device_user、record、user_info、user_password等數(shù)據(jù)表組成,device、device_user用來存儲(chǔ)設(shè)備、鍵盤鎖定狀態(tài)和設(shè)備所屬用戶的信息,record用來存儲(chǔ)設(shè)備開關(guān)鎖記錄的信息,user_info、user_password用來存儲(chǔ)注冊(cè)用戶的信息和密碼。
服務(wù)器運(yùn)行時(shí)監(jiān)聽是否有應(yīng)用層傳來的http請(qǐng)求,如果有的話,攔截器進(jìn)行攔截查看請(qǐng)求頭內(nèi)攜帶的token是否過期,沒有過期則進(jìn)行路由匹配,匹配成功之后處理業(yè)務(wù),處理完成之后將response(處理結(jié)果)返回給前端。業(yè)務(wù)服務(wù)器除了進(jìn)行邏輯處理之外,還開啟了MQTT協(xié)議,使用mqttv3架包,編寫MQTT客戶端與云服務(wù)器中的MQTT消息代理服務(wù)器Mosquitto連接,方便訂閱和發(fā)布消息。
2.3.2 LoRa服務(wù)器
LoRa服務(wù)器使用的是開源的物聯(lián)網(wǎng)服務(wù)器,包含網(wǎng)絡(luò)服務(wù)器和應(yīng)用服務(wù)器兩部分[13]。網(wǎng)絡(luò)服務(wù)器負(fù)責(zé)將訂閱的信息匯總并存儲(chǔ)在相應(yīng)的數(shù)據(jù)庫中,應(yīng)用服務(wù)器通過GRPC從網(wǎng)絡(luò)服務(wù)器中讀取數(shù)據(jù)[16],并對(duì)外提供http、MQTT之類的數(shù)據(jù)接口。MQTT是基于訂閱/分布模式[14]的一種輕量級(jí)物聯(lián)網(wǎng)通信協(xié)議[15]。部署LoRa服務(wù)器之前需要在云服務(wù)器上安裝Mosquitto(MQTT消息代理服務(wù)器)、PostgreSQL數(shù)據(jù)庫(存放長期數(shù)據(jù))和redis數(shù)據(jù)庫(存儲(chǔ)短期數(shù)據(jù)或者臨時(shí)數(shù)據(jù))。安裝完成之后在網(wǎng)絡(luò)服務(wù)器和應(yīng)用服務(wù)器的toml配置文件下修改數(shù)據(jù)庫地址和Mosquitto用戶名、密碼,即可完成LoRa服務(wù)器的安裝和配置[17]。
應(yīng)用層負(fù)責(zé)與用戶交互及數(shù)據(jù)的呈現(xiàn),通過圖片、文字等向用戶展示目前的狀態(tài)。應(yīng)用層包括管理端和用戶端兩部分。管理端采用B/S架構(gòu),所有軟件在服務(wù)端設(shè)計(jì),用戶只需瀏覽器即可使用。用戶端基于服務(wù)層實(shí)現(xiàn)了安卓APP。APP的主要功能有開關(guān)鎖、緊急關(guān)鎖、查詢記錄、修改密碼。為了刷新門鎖狀態(tài),APP會(huì)每隔1s向服務(wù)層發(fā)送指令,來獲取并更新當(dāng)前鎖的狀態(tài)。
APP和服務(wù)器之間采用C/S架構(gòu),采用http協(xié)議進(jìn)行通信。APP使用AndroidStudio進(jìn)行設(shè)計(jì)開發(fā),界面層和業(yè)務(wù)邏輯層分開設(shè)計(jì),屬于不同的線程,主線程負(fù)責(zé)頁面的描繪和切換,子線程負(fù)責(zé)HTTP通信和業(yè)務(wù)處理。APP登錄成功之后子線程連接服務(wù)器,通過HTTP協(xié)議向服務(wù)器發(fā)送指令,接收服務(wù)器傳來的門鎖數(shù)據(jù),將此數(shù)據(jù)發(fā)送給主線程,主線程根據(jù)此數(shù)據(jù)顯示當(dāng)前門鎖的狀態(tài)。
人機(jī)界面設(shè)計(jì)使用XML進(jìn)行UI設(shè)計(jì)。主頁面采用LinearLayout結(jié)合RelativeLayout進(jìn)行布局,并采用Button、TextView、ImageView、ListView等控件展示數(shù)據(jù)并與用戶進(jìn)行交互。除ListView外,其他控件的數(shù)據(jù)均通過靜態(tài)加載方式加載,數(shù)據(jù)存放在資源文件里。ListView用于顯示一周內(nèi)的開關(guān)鎖記錄,數(shù)據(jù)較多,采用動(dòng)態(tài)加載方式加載數(shù)據(jù),數(shù)據(jù)存放在數(shù)據(jù)庫中。
本節(jié)在真實(shí)環(huán)境下對(duì)系統(tǒng)進(jìn)行功能測試、丟包率測試和低功耗測試。
在節(jié)點(diǎn)上電時(shí),上發(fā)的數(shù)據(jù)是設(shè)備id等信息,下發(fā)數(shù)據(jù)為指令信息。在云服務(wù)器上,在命令行中輸入命令sudomosquitto -t "application/123/device/+/tx" -v -u loraroot -P 62374838,來查看Mosquitto數(shù)據(jù)的日志信息[18],tx指的是下行數(shù)據(jù),可換為rx來查看上行數(shù)據(jù)。并將”data”對(duì)應(yīng)的數(shù)據(jù)進(jìn)行Base64解密,查看數(shù)據(jù)是否正確。日志信息如圖4所示。將解析的指令與開關(guān)鎖狀態(tài)進(jìn)行對(duì)照,查看指令與動(dòng)作是否一致。并且當(dāng)解析出指令為”2”時(shí),能聽見蜂鳴器發(fā)出警報(bào)。
圖4 日志信息
用戶每一次開關(guān)鎖都會(huì)記錄在服務(wù)層數(shù)據(jù)庫。對(duì)門鎖進(jìn)行多次開關(guān)鎖操作,通過APP查看一周內(nèi)的開關(guān)鎖記錄,如圖5所示。
圖5 開關(guān)鎖記錄
每一種通信協(xié)議都會(huì)產(chǎn)生丟包的風(fēng)險(xiǎn),特別是長距離通信,環(huán)境、障礙物等都會(huì)影響通信的效果。本文設(shè)計(jì)的智能
鎖系統(tǒng),安裝在室內(nèi),因此實(shí)例測試的環(huán)境選取宿舍樓(11層),網(wǎng)關(guān)安裝在1層,分別對(duì)奇數(shù)樓層進(jìn)行了測試。在帶寬和傳輸速率一致的條件下,LoRa擴(kuò)頻因子使用SF12,一對(duì)多下發(fā)數(shù)據(jù)共測試10次,信號(hào)強(qiáng)度(RSSI)和丟包率計(jì)算公式如(1)和(2)所示:
RSSI= -164+16/15 *PacketRssi[19]
(1)
丟包率=1-接收字節(jié)數(shù)/發(fā)送字節(jié)數(shù)
(2)
其中:16/15為校正系數(shù),PacketRssi指單個(gè)包的信號(hào)強(qiáng)度,是收包這段時(shí)間內(nèi)的RSSI的平均值[20],PacketRssi的值可由串口打印獲得[21]。根據(jù)分析測試結(jié)果(表2)可知,為了平衡信號(hào)強(qiáng)度和丟包率,可在一棟11層高的宿舍樓的中間部分安裝網(wǎng)關(guān)來控制整棟樓的門鎖節(jié)點(diǎn)。
表2 丟包率測試結(jié)果
處于執(zhí)行端的智能鎖節(jié)點(diǎn),由于采用電池供電,因此能耗是關(guān)鍵的要素,按照一天正常開關(guān)鎖10次,緊急關(guān)鎖1次,密碼開鎖1次,0.5 s空中喚醒一次LoRa通訊,其余時(shí)間待機(jī),測試結(jié)果如表3所示。
表3 電池?fù)p耗測試結(jié)果(24小時(shí))
本文針對(duì)目前大多數(shù)智能鎖存在的問題進(jìn)行了分析,從實(shí)際應(yīng)用出發(fā),結(jié)合LoRa通信技術(shù)的優(yōu)勢和特點(diǎn),將LoRa通信技術(shù)應(yīng)用到智能門鎖上,設(shè)計(jì)了一種基于LoRa和IPv6的智能鎖系統(tǒng),將系統(tǒng)劃分為執(zhí)行層、網(wǎng)絡(luò)層、服務(wù)層、應(yīng)用層4個(gè)部分,對(duì)每一部分使用的關(guān)鍵技術(shù)和功能進(jìn)行了詳細(xì)的描述。本系統(tǒng)操作簡便、成本低還具備功耗低、通訊距離遠(yuǎn)等優(yōu)點(diǎn),使用IPv6,安全性更高而且避免出現(xiàn)IPv4地址匱乏的局面。一個(gè)網(wǎng)關(guān)可以覆蓋一棟樓的監(jiān)測區(qū)域,近200個(gè)門鎖節(jié)點(diǎn)的網(wǎng)絡(luò)規(guī)模,1 000 mAh電池可使用1.8年之久,滿足低功耗、低延遲和安全性高的需求。今后的研究工作會(huì)將LoRa結(jié)合IPv6的模式應(yīng)用到智慧城市、智慧校園等領(lǐng)域。