APP下载

基于IPv6和LoRa的智能门锁系统设计

2022-03-30胡乃平贾浩杰袁绍正

计算机测量与控制 2022年2期
关键词:门锁网关低功耗

胡乃平,贾浩杰,袁绍正

(青岛科技大学 信息科学技术学院,山东 青岛 266061)

0 引言

智能锁经历了电子锁、单机智能锁、无线智能锁3个阶段[1]。第一阶段从20世纪末开始,这一阶段的锁不是真正意义上的智能锁,只是取消了传统意义上的机械式开锁,改为NFC刷卡开锁;第二阶段从2010年开始,锁具上配备了显示屏,可用密码、指纹和人脸开锁;第三阶段从2015年开始,将无线通信协议应用于智能锁上,实现了无线开锁[2]。

目前,智能门锁的无线通讯方案,大多数采用蓝牙、ZigBee、WiFi等[2]。盛平等将WiFi应用于智能锁系统中[3],便于管理,并且可以实现视频监控,但是WiFi功耗较大,导致充电的频率较高。应时彦等设计了一种基于ZigBee的联网型无线门锁系统[4],ZigBee功耗较低,但是ZigBee传输距离较近。金志刚等研究了蓝牙在物联网智能锁中的安全机制[5],蓝牙安全性较高且功耗低,但是蓝牙通信也存在传输距离较近的问题。沙涛等人将NB-IoT应用于公租房背景下的智能锁[6],NB-IoT功耗极低,传输距离远,但是NB-IoT由运行商运营,使用NB-IoT成本较高。张铮等人将LoRa通信协议应用到大面积渔业环境监测[7],通信距离长、功耗低并且成本低。

现有智能锁传输方案大多使用IPv4接入网络,IPv6与IPv4相比,安全性更高[8]且IP地址不会出现匮乏的局面[9]。本文将LoRa与IPv6结合,设计了一种基于LoRa和IPv6的智能锁系统,该系统具有功耗低、通信距离长、便于管理、安全性高、成本低等优点。

1 系统架构

系统设计采用自顶向下的模块化思想,将系统分为4个部分:执行层、网络层、服务层和应用层,图1所示为系统总体架构。执行层是智能锁的硬件部分,实现锁的各种功能;网络层是LoRa的网关设备,实现执行层和服务层之间的数据通讯;服务层运行在云服务器上,实现业务处理和设备管理;应用层运行在PC和手机终端,实现系统与用户交互功能。

图1 系统总体架构

2 系统设计

2.1 执行层

执行层的设计分为硬件和软件两部分,硬件设计的关键是低功耗设计,核心是控制器的通讯协议的选择。本系统选用低功耗的STM32系列微控器和LoRa通讯协议。

2.2.1 硬件部分

执行层硬件是基于嵌入式技术设计的门锁节点,由控制器、LoRa通讯模块、键盘模块、蜂鸣器模块和直流电机模块组成,如图2所示。

图2 硬件结构图

由于门锁必须采用电池供电,因此低功耗设计是系统设计的基本要求,通讯是整个系统降低功耗的关键。目前低功耗通信协议主要有蓝牙、WiFi、ZigBee、NB-IoT和LoRa等[10],对比情况如表1所示,LoRa与其他通信协议相比功耗低、传播距离远、安全性高并且免费[11],因此本系统选用LoRa通信协议。

表1 LoRa和与其他通信协议对比

执行层控制器的选择既要考虑低功耗还要考虑对LoRa协议的支持,选用了STM32L151CBU6微控器,该系列微控器功耗低、性价比高、可靠性高。LoRa射频部分采用基于Semtech SX127x芯片的模块。

2.2.2 软件部分

执行层软件由uVision5进行开发,使用C语言编程。软件设计必须考虑低功耗设计,让控制器大部分时间处于休眠状态。软件的设计思路是主程序完成系统初始化和设备注册等功能后,打开中断后转入低功耗休眠状态,系统所有功能通过中断在中断服务程序中实现。

主程序流程如图3所示,主要完成系统初始化、MAC初始化、设备入网和设备注册后进入到无限循环,在无限循环中将系统设置为低功耗休眠状态。这样系统如果没有中断产生,就一直处于休眠低功耗状态,实现最大限度的节能,当有中断事件发生后,执行中断服务程序,中断服务程序执行完后,系统重新进入低功耗状态。

系统的子程序模块,主要包括两部分:指令执行模块和键盘密码开锁模块。

1)执行指令模块:该模块功能通过设置每隔0.5秒产生定时器中断来实现。每隔0.5秒在定时器中断中启动门锁节点设备上的LoRa接收机进行信道活动检测(CAD),检测空中是否有呼叫信号,LoRa接收机检测完成后产生CADdetected中断信号。该中断信号接入微控器,产生外部中断,在中断服务程序中,实现执行指令的功能。在CADdetected中断中,首先要清除定时器中断,然后将执行层设置为接收数据状态,接收应用层下发的指令,指令分为4种:”0”,”1”,”2”,或者是六位数字,分别对应开锁、关锁、紧急关锁(蜂鸣器响)和新密码。开锁功能执行后,如果与按键相连的CPU引脚为输出模式,则置为输入模式,恢复键盘功能,系统的执行结果发送给服务层后进入低功耗状态。

2)键盘密码开锁模块:键盘的“*”键接入微控器的外部中断,按下”*”键会触发外部中断,开启10 s定时器,在10 s的时间内, “#”键被按下则密码输入结束,若输入密码正确,执行开锁并发送锁状态给服务层,关闭定时器,程序返回。若输入密码错误,则蜂鸣器提示,定时器复位,用户可重新输入,如果错误次数大于5次,则键盘锁死(与按键相连的引脚改为输出模式),用户不能再使用密码开锁,只能使用APP开锁。在10 s的时间内,“#”键未被按下,程序返回。

2.2 网络层

网关开发选用HT-M01,基于Semtech SX1301芯片。网关的功能是协议转换,实现LoRa协议和以太网协议的转换,用来连接门锁节点和云服务器。网关结构如图3所示,网关将门锁节点上传的数据通过packet_forwarder服务,使用UDP发送到网关本地的1 700端口上。LoRa-gateway-bridge服务使用UDP从网关本地的1 700端口接收packet_forwarder服务发送的数据,并解析成有效数据,将数据打包成json格式,打包完成之后,LoRa-gateway-bridge服务将打包数据使用MQTT协议[12]从网关通过IPv6地址发布到云服务器中的Mosquitto消息代理服务器,供服务层订阅。

图3 网关结构图

2.3 服务层

服务层一共包含两部分:LoRa服务器和业务服务器。LoRa服务器负责管理和对接LoRa底层网络,业务服务器实现整个系统管理和控制功能。

2.3.1 业务服务器

用户开锁使用APP简便快捷,而使用PC对人员信息进行处理更加直观,因此业务服务器使用混合架构,包含两部分:一部分是管理端,基于B/S架构实现;前后端都部署在服务器。另一部分是用户端,基于C/S架构实现,通过手机APP操作。

管理端使用IDEA进行设计开发,功能有权限设置、注册人员信息修改、宿舍人员信息修改。管理端的后端使用MySQL数据库存储信息,并用MyBatis管理数据库。UI界面使用Element UI进行设计,并使用Layout进行布局,采用Icon、Buton、Form、Avatar、NavMenu、Dropdown、Dialog等组件用于展示数据并与用户交互。

业务服务器的数据库由device、device_user、record、user_info、user_password等数据表组成,device、device_user用来存储设备、键盘锁定状态和设备所属用户的信息,record用来存储设备开关锁记录的信息,user_info、user_password用来存储注册用户的信息和密码。

服务器运行时监听是否有应用层传来的http请求,如果有的话,拦截器进行拦截查看请求头内携带的token是否过期,没有过期则进行路由匹配,匹配成功之后处理业务,处理完成之后将response(处理结果)返回给前端。业务服务器除了进行逻辑处理之外,还开启了MQTT协议,使用mqttv3架包,编写MQTT客户端与云服务器中的MQTT消息代理服务器Mosquitto连接,方便订阅和发布消息。

2.3.2 LoRa服务器

LoRa服务器使用的是开源的物联网服务器,包含网络服务器和应用服务器两部分[13]。网络服务器负责将订阅的信息汇总并存储在相应的数据库中,应用服务器通过GRPC从网络服务器中读取数据[16],并对外提供http、MQTT之类的数据接口。MQTT是基于订阅/分布模式[14]的一种轻量级物联网通信协议[15]。部署LoRa服务器之前需要在云服务器上安装Mosquitto(MQTT消息代理服务器)、PostgreSQL数据库(存放长期数据)和redis数据库(存储短期数据或者临时数据)。安装完成之后在网络服务器和应用服务器的toml配置文件下修改数据库地址和Mosquitto用户名、密码,即可完成LoRa服务器的安装和配置[17]。

2.4 应用层

应用层负责与用户交互及数据的呈现,通过图片、文字等向用户展示目前的状态。应用层包括管理端和用户端两部分。管理端采用B/S架构,所有软件在服务端设计,用户只需浏览器即可使用。用户端基于服务层实现了安卓APP。APP的主要功能有开关锁、紧急关锁、查询记录、修改密码。为了刷新门锁状态,APP会每隔1s向服务层发送指令,来获取并更新当前锁的状态。

APP和服务器之间采用C/S架构,采用http协议进行通信。APP使用AndroidStudio进行设计开发,界面层和业务逻辑层分开设计,属于不同的线程,主线程负责页面的描绘和切换,子线程负责HTTP通信和业务处理。APP登录成功之后子线程连接服务器,通过HTTP协议向服务器发送指令,接收服务器传来的门锁数据,将此数据发送给主线程,主线程根据此数据显示当前门锁的状态。

人机界面设计使用XML进行UI设计。主页面采用LinearLayout结合RelativeLayout进行布局,并采用Button、TextView、ImageView、ListView等控件展示数据并与用户进行交互。除ListView外,其他控件的数据均通过静态加载方式加载,数据存放在资源文件里。ListView用于显示一周内的开关锁记录,数据较多,采用动态加载方式加载数据,数据存放在数据库中。

3 系统测试

本节在真实环境下对系统进行功能测试、丢包率测试和低功耗测试。

3.1 功能测试

在节点上电时,上发的数据是设备id等信息,下发数据为指令信息。在云服务器上,在命令行中输入命令sudomosquitto -t "application/123/device/+/tx" -v -u loraroot -P 62374838,来查看Mosquitto数据的日志信息[18],tx指的是下行数据,可换为rx来查看上行数据。并将”data”对应的数据进行Base64解密,查看数据是否正确。日志信息如图4所示。将解析的指令与开关锁状态进行对照,查看指令与动作是否一致。并且当解析出指令为”2”时,能听见蜂鸣器发出警报。

图4 日志信息

用户每一次开关锁都会记录在服务层数据库。对门锁进行多次开关锁操作,通过APP查看一周内的开关锁记录,如图5所示。

图5 开关锁记录

3.2 丢包率测试

每一种通信协议都会产生丢包的风险,特别是长距离通信,环境、障碍物等都会影响通信的效果。本文设计的智能

锁系统,安装在室内,因此实例测试的环境选取宿舍楼(11层),网关安装在1层,分别对奇数楼层进行了测试。在带宽和传输速率一致的条件下,LoRa扩频因子使用SF12,一对多下发数据共测试10次,信号强度(RSSI)和丢包率计算公式如(1)和(2)所示:

RSSI= -164+16/15 *PacketRssi[19]

(1)

丢包率=1-接收字节数/发送字节数

(2)

其中:16/15为校正系数,PacketRssi指单个包的信号强度,是收包这段时间内的RSSI的平均值[20],PacketRssi的值可由串口打印获得[21]。根据分析测试结果(表2)可知,为了平衡信号强度和丢包率,可在一栋11层高的宿舍楼的中间部分安装网关来控制整栋楼的门锁节点。

表2 丢包率测试结果

3.3 低功耗测试

处于执行端的智能锁节点,由于采用电池供电,因此能耗是关键的要素,按照一天正常开关锁10次,紧急关锁1次,密码开锁1次,0.5 s空中唤醒一次LoRa通讯,其余时间待机,测试结果如表3所示。

表3 电池损耗测试结果(24小时)

4 结束语

本文针对目前大多数智能锁存在的问题进行了分析,从实际应用出发,结合LoRa通信技术的优势和特点,将LoRa通信技术应用到智能门锁上,设计了一种基于LoRa和IPv6的智能锁系统,将系统划分为执行层、网络层、服务层、应用层4个部分,对每一部分使用的关键技术和功能进行了详细的描述。本系统操作简便、成本低还具备功耗低、通讯距离远等优点,使用IPv6,安全性更高而且避免出现IPv4地址匮乏的局面。一个网关可以覆盖一栋楼的监测区域,近200个门锁节点的网络规模,1 000 mAh电池可使用1.8年之久,满足低功耗、低延迟和安全性高的需求。今后的研究工作会将LoRa结合IPv6的模式应用到智慧城市、智慧校园等领域。

猜你喜欢

门锁网关低功耗
智能燃气表物联网运行体系网关技术研究
基于FPGA的工业TSN融合网关设计
基于ARM架构的工业物联网网关研究与实现
咔嚓咔嚓,门锁别玩
核芯互联发布高性能ADC模数转换器
旋转门锁
莱迪思发布全新低功耗FPGA技术平台
理由
物联网产业离不开低功耗蓝牙通信技术
和各色骗术斗智,是个技术活