陈明忠,陈荣军
(1.汕头职业技术学院 机电工程系,广东 汕头 515078;2. 广东技术师范大学 计算机科学学院,广东 广州 510665)
锁具分为机械锁和智能门锁.机械锁使用金属钥匙开锁,存在两个弊端:一是金属钥匙需要随身携带容易丢失,二是金属钥匙容易复制、安全性差[1].随着人们对生活质量的追求,机械锁已不能满足人们对生活简便、高效、安全的需求,智能门锁应运而生.智能门锁主要使用射频、IC卡、指纹、数字密码等方式完成开锁动作[2],无需携带金属钥匙,广泛应用在短租房、酒店业和高档住宅中.
当现行的智能门锁应用到短租房以后,若租户初次看房,短租房房主必须亲自到达现场为租户开门,不能实现远程开锁;当现行的智能门锁应用到酒店业以后,若客人办理入住手续时,必须提供身份证给前台核查,增加了客人的等待时间.使用IC卡开锁还存在IC卡容易被非法复制等问题.本文设计了一款基于STM32和云平台的智能门锁系统,该系统允许房主或酒店服务员对智能门锁进行远程控制[3],允许客人凭身份证在门锁端验证个人信息,节省客人在前台办理入住手续时的等待时间.
为了实现短租房房主或酒店服务员远程控制门锁,就需要开发一个手机端程序,然后上传到云平台上.如果在门锁端与云平台之间选用Wi-Fi 连接方式,这就需要在门锁端加入Wi-Fi 模块,通过Wi-Fi模块连接房间里的路由器,然后再连接到云平台[4].通常,客人入住酒店、旅馆时都需要将身份证呈交前台核查,增加客人的等待时间.如果客人在网上订好房间,就要在门锁端刷身份证进入房间,这就需要在门锁端加入身份证识别模块.
综合上述分析,基于STM32和云平台的智能门锁系统包括三部分,即门锁端、云平台和手机端程序[5].门锁端以STM32微控制器为核心,外接Wi-Fi模块、身份证识别模块、数字键盘模块,主要实现身份验证和门锁的开关控制,并将门锁的开关信息上传到云平台(见图1).云平台使用专用于智能家居环境的京东微联,主要对Wi-Fi模块传输过来的数据加上时间戳,以便显示数据发生的时间,同时将用户在手机端的注册信息传输到门锁端.手机端程序采用Html5开发,以京东微联云为服务器.用户通过手机访问云平台,首先进行身份注册和房间预订,当登录云平台后,便可实现门锁的远程控制,并能查看门锁当前的开关状态、开关时间等.系统总体框架如图1所示,STM32与数字键盘模块的通信协议是IIC[6],与身份证识别模块的通信协议是USART,与Wi-Fi模块的通信协议是SPI;门锁端、云平台、手机端使用JoyLink协议通信.
STM32是意法半导体集团(ST)推出的一种高性能、低成本的基于ARM Cortex-M架构的微控制器(MCU),本系统选用STM32F103RBT6作为微控制器.该微控制器具有如下优势:
(1)运行速度快,工作频率高达72MHz;
(2)储存容量大,内部集成128KB FLASH和20KB的SRAM;
(3)低电压、低功耗,工作电压为2.0~3.6V,可设置待机、停止和睡眠三种低功耗模式;
(4)外设接口丰富,有51个IO口:PA0~PA15、PB0~PB15、PC0~PC15、PD0~PD2;
(5)拥有9个通信接口,分别是2个IIC接口、2 个SPI 接 口、3 个USART 串 口、1 个CAN、1个USB;
(6)程序调试方便,各功能模块在PC 端开发,然后编译、生成目标文件后,通过ARM仿真器就可烧写到STM32的存储器中[7].
身份证识别模块选用广州华大股份的MINI身份证阅读套件板,如图2所示.该套件是经公安机关批准备案的,专用于读取居民身份证芯片内所存储的压缩信息,采用非接触式IC 卡技术[8],通过USART 口与STM32 通信,套件的RX、TX 引脚分别与STM32 的PB10、PB11连接.
读卡时,STM32采用轮询法向身份证识别模块发送读取指令,身份证识别模块将身份压缩信息反馈给STM32,STM32将身份压缩信息还原出来,包括姓名、性别、身份证号、照片等,将对身份证号进行验证,判断该身份证的有效性,从而实现开锁动作.
数字键盘模块由一块12路电容式触摸传感芯片CP2532(如图3所示),外嵌4×3电容式按键组成[9].在12个按键中,除了数字0~9,还包括“*”和"#”分别代表“取消”和“确定”.
该模块利用CDC(电容数字转换)技术把按键时产生的电容变化量转换成数字信号,并通过IIC 接口传送给STM32[10].CP2532 芯片的INTN、SCL、SDA 引脚分别与STM32 的PB5、PB6、PB7 连接,IADJ引脚通过外接电阻来调节12路按键的灵敏度.当某个按键被按下时,中断状态寄存器ISR对应位自动置1,芯片的INTN引脚将由高电平变成低电平,并通过PB5传送给STM32,STM32检测到中断信号后,就知晓哪个按键被按下,从而实现密码开锁.
Wi-Fi 模块选用北京联盛德的WMSP06 模块.该模块内置32 位ARM CPU、416KB 存储空间,适应于二次开发;该模块支持IEEE802.11b/g/i 无线标准,支持高速的SPI 通信,速率最高达到50Mbps,满足Wi-Fi模块与STM32的通信需求.WMSP06模块还具有自动连接无线网络、灵敏度高、功耗低等优点.WiFi模块与STM32采用SPI协议通信,WiFi模块的SPI_CS、SPI_CLK、SPI_DO、SPI_DI引脚分别与STM32的PA4、PA5、PA6、PA7连接.
按软件的开发工具和运行环境,本系统的软件设计分为STM32程序设计、Wi-F模块设计和手机端程序设计三部分.STM32程序设计主要实现对板载资源的初始化、用户身份验证和智能门锁的开关控制,包括STM32芯片的逻辑控制的设计、身份证识别模块和数字键盘模块的设计,STM32程序的开发工具为Keil MDK,经编译后烧写到STM32芯片的Flash中.Wi-Fi模块的开发工具为Keil C51,经烧写后存入Wi-Fi模块的存储空间中.手机端程序的开发工具为Html5,开发后移殖到云平台中.
STM32 程序分为主程序模块、身份证识别模块、数字键盘模块[11].当STM32 上电之后,首先对系统资源初始化,包括系统时钟、LED、Key、以及USART、IIC、SPI通信端口初始化,然后对NVIC(嵌套中断向量控制器)初始化,紧接着,定时器开始计时,并检测USART、IIC、SPI通信端口是否有中断请求,若在设定的时间内检测到某个通信端口有中断请求,则执行相应的子模块后,定时器才重新计时.若在设定的时间内没有检测到任何中断请求,则定时器重新计时,开始新一轮中断请求的检测.程序流程图如图4所示.
3.1.1 身份证识别模块设计
STM32向串口发送寻证指令,当收到“检测到身份证”的反馈信息之后,再向串口发送读证指令[12].若读证成功,则从读到的身份证信息提取身份证号,再从数据库中寻找该身份证号,若找到,则开启门锁,并通过Wi-Fi模块上传门锁状态;否则,发出错误信息.程序流程图如图5所示.
图4 主程序流程图
图5 身份证识别模块流程图
3.1.2 数字键盘模块设计
首先定义一个数组用于存放数字密码.当STM32的PB5引脚有中断请求时,STM32就向IIC接口发送查询指令,读取传感芯片CP2532ISR(中断状态寄存器)置1 的位号,并将该位号转换成键值.若读取的键值为数字,则将键值存储到数组中;若读取的键值为“*”(取消键),则清空数组;若读取的键值为“#”(确定键),则将用户输入的密码与从Flash中读取的系统密码相比较,若系统密码包含在输入密码中,则开锁,否则,发出错误信息.程序流程图如图6所示.
图6 数字键盘模块流程图
Wi-Fi模块的代码存放在Wi-Fi模块的存储空间中.Wi-Fi模块上电后,首先检查内部是否有联网配置信息,如果没有,则让手机连接无线路由器,然后通过oneshot 软件配置Wi-Fi 的信息(包括ssid、password、加密方式),再通过广播方式向Wi-Fi 模块发送配置信息[13];如有,则尝试Wi-Fi 模块与无线路由器的连接.当联网成功后,Wi-Fi模块就充当STM32和云平台之间信息传递的媒介,一方面,Wi-Fi模块接收STM32 发来的门锁开关信息并转发给云平台;另一方面,Wi-Fi模块接收云平台发来的门锁远程控制命令并转发给STM32.程序流程图如图7所示.
3.3.1 云平台简介
京东微联官网提供了开发者平台,设备厂商可以通过云平台对自己的产品进行升级优化,云平台也为每个产品分配唯一的调试序列号(UUID)[14].只要在手机端指定UUID,就可以将手机端程序推送到云平台的相应产品中.京东微联云平台提供了JoyLink协议的SDK,只需要将SDK移植到Wi-Fi模块中,即可实现门锁端与手机端的交互,门锁端的数据包通过云平台时会自动加上时间戳.
3.3.2 手机端程序设计
手机端程序设计包括Html5界面设计和控制逻辑设计[15].
手机界面从上到下按导航区、功能控制区、状态显示区布局.功能控制区主要实现门锁的远程控制、用户的身份注册和房间预订,状态显示区主要显示门锁的开关状态.
Html5界面设计基于京东微联APP,通过京东微联的JDSMART控件,用户可以对不同智能设备进行远程控制.控制逻辑设计由JavaScript实现,采用vue控件搭建一种交互界面的渐进式框架,实现数据的双向绑定,从而快捷地实现事件触发和数据更新.当手机端加载页面时,系统会调用JDSMART.app.getNetworkType方法获取app的网络状态;调用JDSMART.ready方法对设备信息进行初始化.通过定时函数和JDSMART.io.getSnapshot方法获取设备快照,以及时获取设备的状态,并刷新页面的状态显示区.在页面的功能控制区,通过vue控件与click事件的绑定构造power按钮,当用户点击该按钮时,就调用JDSMART.io.controlDevice方法发送控制消息到设备端,并实时刷新页面.
针对现行的智能门锁控制系统的缺陷,设计了一款智能门锁控制系统.整个系统分为门锁端、云平台和手机端三部分,并对门锁端进行硬件选型与设计.根据软件的开发工具和运行环境,把本系统的软件分为STM32程序、Wi-Fi模块程序和手机端程序三个模块,并对每个模块进行功能设计.通过对该款智能门锁进行50次的身份证开锁、50次的数字密码开锁和50次的手机端远程开锁,其中合法身份证和非法身份证各25次,合法密码和非法密码各25次.测试表明,使用合法身份证和合法密码都能快速正常开锁,使用非法身份证和非法密码都无法开锁,通过手机端每次都能远程开锁,系统具有较好的稳定性.