马雷,漆为民
(江汉大学人工智能学院,湖北武汉 430000)
现如今,机械门锁仍然占领着大半部分的市场,但它已经逐渐不能满足居民对于安全性、私密性的需求[1]。智能门锁自上世纪二十年代诞生,到如今的技术相对纯熟,经历了3 个阶段的发展。在发展初期,智能门锁主要应用于酒店等环境中,开门方式为磁卡和密码,不适合作为家庭使用推广[2]。发展中期加入了指纹、面容等生物特征比对,而由于当时技术原因,生物模块价格令人望而却步。在现阶段,各种新概念智能锁层出不穷,智能锁的发展也逐渐多功能化,技术的成熟也让智能锁的成本逐渐降低至为大众所能接受[3]。
1)虚位密码解锁开门:通过智能门锁上的电容按键输入开门密码,密码为6 位数字,用户随意输入10 位连续数字,系统识别到输入数字中有连续正确的密码即可开门。
2)指纹解锁开门:通过半导体指纹模块对指纹与已注册指纹进行比对,比对成功即可打开门锁,用户可通过管理员界面注册或删除指纹。
3)门卡解锁开门:通过RFID 读写模块比对门卡序列号是否已注册,若已注册则打开门锁,通过管理员界面注册或删除门卡。
4)云端交互:通过阿里云界面查看管理员密码、开门密码、开门情况、已注册信息。并可通过阿里云虚拟按钮打开和关闭门锁。
5)人机交互:通过输入管理员密码进入管理员界面,根据语音提示,可对已注册信息进行管理以及门锁、管理员密码的更改。
该系统以STM32F401RET6 为主控芯片,指纹模块采用ZY002-INT 模块,门禁卡模块采用RC522 模块,按键采用BS8116 电容模块,广域网采用ESP32蓝牙/WIFI 模块,语音播报采用MY1680 模块,上述模块与门锁电机配合使用完成系统设计,并搭配TFTLCD屏幕完成显示。硬件总体设计图如图1所示。
图1 硬件总体设计图
2.2.1 主控芯片
以Cortex-M4 为内核架构的STM32F401RET6比意法公司Cortex-M3 系列芯片拥有更强的DSP 能力[4],且其内置MPU 内存保护组件,功率效率方面也远远超过Cortex-M3 系列芯片,支持库函数开发,适用于对稳定性、安全性要求较高的智慧门锁系统。
2.2.2 BS8116电容按键
由合泰半导体公司生产的BS8116 电容按键提供了标准IIC 串行数据接口,该型号电容按键共12个按钮,具有集成度高以及准确性高的特点[5]。
2.2.3 ZY002-INT半导体指纹模块
由中山名光科技公司生产的ZY002-INT 半导体指纹识别模块以Cortex-M3 为内核,利用电容、电场、温度、压力等实现指纹图像采集,在硬件上具有耐磨、耐腐蚀、耐静电等优点[6-7]。该模块只识别活体指纹,可穿透皮肤,安全性更高。模块内置FLASH和SRAM,指纹的存储不需要占用主控内部存储空间,节约了内存。
2.2.4 RC522射频卡读写模块
RC522 射频卡模块自带NXP 公司生产的型号为MIFARE-S50的NFC卡,这类卡片内置线圈,通过固定频率的电磁波与读写器进行通信[8],通信距离为10 cm,每个卡片预置一个独一无二的序列号,亦可在卡片16个扇区的第三块写入卡密码[9]。在开发过程中,RC522读写器可使用NXP公司提供的库函数,高效方便。
2.2.5 ESP32蓝牙/WIFI模块
拥有双核处理器的ESP32 模块拥有更多的GPIO,支持蓝牙4.2 协议,操作性更强[10],处理性能和连接能力是常用的ESP8266WIFI 模块的两倍,适用于要求稳定性、安全性更高的环境中。
2.2.6 1.3寸TFTLCD液晶显示屏
TFT 型LCD 屏幕由薄膜晶体管构成,该类型屏幕支持标准IIC、SPI、8080 等多种接口,该模块应用ST7789VW 驱动芯片,响应速度快[11-12]。可在无外部操作时钟的情况下执行显示数据RAM 读/写操作,最大程度上降低了功耗。
2.2.7 MY1680语音模块
该设计采用千佰度电子科技公司生产的微集成MP3 模块实现语音播报功能,该模块需接入扬声器使用,支持MP3、WAV 格式双解码[13]。自带16 MB 内存,可将语音文件直接存储在其中,不占用主控内存空间,可通过文件目录对存储的音频文件进行操作,使用更方便[14]。
2.2.8 存储芯片
STM32F401RET6 内置W25Q64 芯片内存大小为512 kB,而显然不足以承担整个智慧门锁的运转,于是该设计添加了AT24C02 存储芯片[15]。两种存储芯片都是电擦除ROM,生产生活中,将按字节擦写的AT24C02 称为EEPROM,将按块擦写的W25Q64 称为FLASH。EEPROM 存储具有高可靠性,保存时间更长[16]。
为了提高系统的实时性和CPU利用率,此处引入UCOSII操作系统。程序软件设计流程图如图2所示。
图2 软件设计流程图
在用户输入密码时,很难保证周围无人偷窥,智慧门锁密码通常为6 位及以下,这样就有了密码泄露的风险,经常更换密码也并不方便。因此该设计引入了基于KMP 模式匹配算法的虚位密码设计,用户可在正确密码前后输入任意数字(内部承接转化为字符型),最大为10 位,只要整串数字中有完整且未拆分的正确密码,即可验证成功。
3.2.1 软件设计
当系统检测到有人输入任意位数密码并按下确定按键,或者输入的密码达到10 位,则使用一个字符串数组承接。通过KMP 算法进行比对,若其中包含门锁密码,则打开门锁,若包含管理员密码,则显示管理员界面。部分代码段如图3 所示。
图3 虚位密码部分代码段
3.2.2 KMP算法引入
在字符串比对过程中,可以通过使用指针的暴力匹配算法,而其时间复杂度为O(mn),会浪费大量CPU 资源。KMP 算法在此基础上进行改进,在匹配失败后,对已匹配的字符串的子串进行搜索,找出最长前缀与后缀,并使它们重叠,用于下次匹配,以此减少匹配方式。如图4 所示,在第一次匹配至字母c时,匹配失败,第二次字串直接从c 后开始进行匹配。该算法时间复杂度为O(m+n),真正做到了快速匹配,该设计大大提高了系统反应速度。
图4 KMP示意图
ZY002-INT 模块通过USART 串口与主控进行通信,在智慧门锁设备待机时,如检测到手指按下指纹模块,则脱离低功耗状态,对指纹特征进行比对,比对成功主控下发开锁指令即可打开门锁。该部分同时也完成了指纹的采集工作,在采集时先将指纹与数据库进行比对,若指纹不存在,则进行3 次指纹特征值采集,若存在,则结束,ZY002-INT 指纹模块最大存储指纹数量为100。指纹软件设计流程图如图5 所示。
RC522 模块通过标准SPI 通信接口与主控进行数据传输,刷卡开锁设定了防冲突机制,多张卡同时放置在RC522 读写模块时,模块会轮流对卡的信息进行读取。在用户使用门卡开锁时,RC522 模块通过对NFC 卡第三扇区卡密码进行比对,若已注册该门卡,则打开门锁。部分重要代码段如图6 所示。
图5 指纹软件设计流程图
图6 门卡软件设计代码段
在进行云端交互设计时,为用户预留了一个WIFI 接口,在用户第一次使用该设备时,可通过一键配网微信小程序为智慧门锁连接WIFI,WIFI 连接成功自动连接阿里云,用户亦可以选择离线模式登录门锁系统。
主机与阿里云通过MQTT 通信协议进行连接与通信,通信过程中数据格式为json 格式,在阿里云界面可以查看用户设置的用户密码、管理员密码、已注册门禁卡、指纹信息以及今日开门次数、总开门次数。当家中无人,又有客人或者家政服务上门时,用户可以通过虚拟开关,远程打开门锁。阿里云界面如图7 所示。
图7 阿里云交互界面
鉴于设备的安保性能,在主屏幕不做开门提示。在智慧门锁系统检测到门卡、指纹时,自动进行比对、开锁。密码可输入10 位及以下任意数字,等于10 位,则直接进入密码判断,执行对应开锁、切换界面功能,此处引入防冲突机制,若密码恰巧同时包含门锁密码与管理员密码,则在门锁打开后进入管理员界面。若不足10 位,可按#号确认,按下按键有嘟声,为防止密码外泄,密码返回到屏幕上为*号。主屏幕界面如图8 所示。
图8 主屏幕界面
当解析密码为管理员时进入管理员界面,在该页面,每执行一步操作MY1680 语音模块都会有对应的提示,管理员可在此处对密码进行更改,注册和删除指纹、门卡信息,调整MP3 播放器音量,同时也可对设备进行恢复出厂设置操作(需再次确认管理员密码),管理员界面如图9 所示。
图9 管理员界面
联网模式下,人机交互功能与云端交互配合使用,每次打开门锁以及注册、修改信息会上传至云端界面。
该文介绍了一种以STM32 为主控的智慧语音交互门锁。在开发过程中,该设计应用了较为创新的云端交互及虚位密码设计。为提高密码识别速率,该文引入了KMP 模式匹配算法。同时,该设计也存在一些不足,不同于门禁卡注册时写入了卡密码,指纹在数据库中只有生物信息,若要删除指定指纹,需重新进行生物特征扫描,如此操作有些麻烦,这也是该设计的后续改进之处。