RFID和微信双凭证的嵌入式智能储物柜设计
2018-12-15陈卫丽黄金雪
陈卫丽,黄金雪
(广州商学院信息技术与工程学院,广东广州511363)
储物柜给人们在公众场合需要临时存放物品带来了很大便利,目前常用的都是电子储物柜[1],由MCU控制驱动电路打开关闭的储物柜门,但是其储物过程需要打印密码凭条或者输入密码,用户万一丢失凭条或忘记密码,就会造成极大的不便和管理难度。基于此现状,文献[2-3]提出了基于校园卡的储物柜设计,通过刷卡开门方式对电子储物柜进行改进,但在无卡化[4]的时代趋势下,很多人只带手机出门,针对此问题,文中设计一种利用手机微信和RFID卡[5]均可作为开柜凭据的智能储物柜,能够检测储物柜的实时使用情况,刷卡开柜或者手机微信开柜,并能把所有存取记录存在云端及终端数据库,方便管理员管理和用户使用,并增加了租赁收费等功能,智能化程度非常高,有很广阔的应用前景。
1 智能储物柜设计方案
1.1 智能储物柜数据交互设计
分为3部分:嵌入式Linux智能储物柜终端系统,云服务器及云端数据库,手机微信端,见图1所示,各部分之间通过互联网进行数据交互。
1.2 智能储物柜总体设计
智能储物柜总体设计框图如图2所示。LCD触摸屏进行人机交互,RFID无线射频模块主要检测和读取RFID卡的输入,继电器模块进行储物柜上电控锁的开关控制及状态检测,Wi-Fi模块连接无线网络,与云服务器进行通信。嵌入式Linux储物柜终端系统接收到RFID刷卡数据后,进行本地数据库处理,LCD人机交互,继电器控制及云服务器通信。云服务器上建立MySQL数据库进行数据存储和处理,接口程序一方面与储物柜终端进行数据交互,一方面与微信服务器进行通信。微信服务器用于微信公众号和云端服务器通信。
图1 智能储物柜网络数据交互图
图2 智能储物柜总体设计框图
1.3 智能储物柜控制信息流设计
智能储物柜控制过程[6]如图3所示,用户在储物柜终端刷卡后,系统会对卡号进行数据库的匹配或者写入操作。用户在人机交互界面进行开箱等操作后,系统解析命令并查询本地数据库后发送控制指令,经译码器送给继电器控制电控锁进行开关操作。同时数据通过网络http请求传输给云端服务器。云服务器解析数据,同步更新云数据库。
用户扫描LCD屏幕上的二维码关注微信公众号进行开箱等操作时[7],微信公众号把开箱等控制指令经过微信服务器送给云服务器,云服务器查询用户及箱子状态并更新云端数据库,在智能终端的http请求中返回控制指令,使智能储物柜终端进行相应开箱操作,同时智能储物柜终端更新本地数据库,返回信息给云端服务器,云端服务器把开箱结果返回给微信公众号,微信公众号通过设置的自动回复内容把状态信息返回给微信。
2 嵌入式智能储物柜终端设计
2.1 智能储物柜终端硬件系统设计
系统硬件电路主要由ARM7主控电路、RFID读卡器接口电路[8]、继电器及密码锁驱动电路、WIFI接口电路、电源电路和LCD接口电路组成。
系统主控制器S3C2440自带64 M字节的SDRAM,配有512 M的NAND FLASH,用于存储系统程序、配置文件、系统正常运行时产生的用户程序和程序正常运行时临时数据的存储区[9]。系统稳定运行在405 MHz,完全满足系统要求,是ARM公司高性能低功耗的代表产品,价格便宜,易于产业化。RFID读写器模块采用NXP原装MFRC522芯片开发的13.56 MHz的智能IC卡读卡模块,不但支持Mifare卡的数据读写操作还支持CPU卡的读写操作,通过UART与主控板进行通信。wifi模块[10]选用SDIOWi-Fi连接无线网络,通过SD卡的IO口与主控制器实现双向通信,并能通过Wifi挂载到路由上去,连接外网。LCD触摸屏选用7寸TFT电容屏,可用于触摸控制,显示信息等。储物柜使用电控锁,由继电器控制。为了节省IO,尽可能控制多个储物柜电子锁,选用CD4514四——十六译码器进行译码之后连接继电器模块进行开关控制。
2.2 智能储物柜终端软件设计
智能终端软件设计主要包括Wi-Fi模块驱动设计、RFID读写驱动设计,Linux系统裁剪及移植和智能终端应用软件设计[11]。
图3 智能储物柜控制信息流
为了进行智能控制,方便数据库的使用,在嵌入式智能终端S3C2440A主控板上移植嵌入式Linux2.6.32系统和QT界面系统。在硬件电路中,wifi模块通过SD卡的IO口与主控制器进行通信,配置wifi模块驱动需要内核支持SDIO功能和marvell-8686,将 marvell-8686的 wifi模块固件 sd8686_helper.bin和sd8686.bin拷贝到内核目录下编译进内核模块,添加脚本自动连接无线网络。RFID读写器模块通过UART口与主控板进行通信,Linux内核已经支持串口读写。RFID读写程序主要完成检测天线范围内的卡和防碰撞,获取天线范围内的最大ID。
用QT编写智能储物柜终端应用软件,Mysql数据库存储各类用户及储物柜状态信息[12]。刷卡后,用户和管理员分别进入不同的功能界面。用户可进行储物柜租用开启等功能操作,管理员可进行用户管理、储物柜管理、数据库管理等功能。主要软件流程图如图4所示。
图4 智能储物柜终端软件流程图
为了与云端数据库数据保持一致,智能储物柜终端程序中开辟一个新的process进程,定时通过get方式发送http请求到云端服务器,进行数据交互。该进程把新注册卡号及箱门开关状态数据定时发给云服务器,并接收云服务器返回的对储物柜操作命令。
3 云服务器及云端数据库设计
为了实现终端数据和微信开箱数据的一致性,必须搭建一个中继的云服务器[13]。云服务器接口程序接收微信服务器转发的微信post操作请求,根据自定义的通信协议解析操作命令,进行云端数据库匹配后把操作命令通过智能储物柜终端的get请求返回给终端,终端接到云服务器返回的操作命令后进行开箱等操作。云服务器功能如图5所示。
图5 云服务器功能示意图
开发者可用微博账号注册新浪云服务器进行云端开发,新浪云(SAE)服务器[14]是一款分布式WEB应用/业务开发托管、运行平台,Web开发语言PHP作为首选的支持语言,Web开发者可以在Linux/Mac/Windows上通过SVN或者Web版在线代码编辑器进行开发、部署、调试,更好的支持微信公众号的操作。
为了数据的存储和处理,在新浪云服务器中建立共享型MySQL数据库。MySQL数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,增加了访问速度并提高了灵活性。配置好数据库后,在数据库中建立存储用户信息的相应数据表,并在云服务器将数据库与服务器相连接。本设计最重要的几张表存储内容及作用如表1所示。
表1 主要数据表存储内容
4 手机端功能设计-微信公众平台接口开发设计
4.1 微信公众号内容开发设计
手机端软件开发常用有手机APP 和微信公众平台等。市面上手机操作系统大部分分为IOS和安卓,开发手机APP需要分别支持安卓和IOS系统,工作量大且开发过程繁琐,开发周期长,并且需要用户下载相应应用,占用手机内存。微信是腾讯公司推出的一个为智能终端提供即时通讯服务的免费应用程序,微信已覆盖中国90%以上的智能手机。微信公众号是开发者或商家在微信公众平台上申请的应用账号,该帐号与微信账号互通,通过公众号,可在微信平台上实现和特定群体的文字、图片、语音、视频的全方位沟通与互动。微信在安卓和IOS上均有应用,项目依托微信公众平台接口进行开发,直接利用微信平台实现需要的功能,减少了开发工作量,更加方便用户操作。
当微信公众号开启开发者模式,并将之前建立的新浪云服务器域名和平台的URL(统一资源定位符)与微信服务器绑定后,微信公众平台将把用户发送至公众号的消息通过HTTP协议以XML的格式转发至该服务器。在云端服务器上部署的消息接口代码和解码消息按照定制的逻辑对消息做出响应,然后将响应以同样的格式发送至微信服务器,微信服务器再将消息转发至用户微信界面,完成一次完整的交互过程。
使用微信公众平台接口调试工具,填入微信access_token的值,在body中添加微信规定的数据格式,设计自定义菜单如图6所示。
图6 配置菜单界面
设计加入了计费功能,当用户点击计费查询时,服务器便根据用户绑定的账号在数据库中查询其租用的时间点,把时间点读取出来,和当前时间算差值。
为了防止用户不小心误点击,开箱和挂失刷卡使用了微信的关键字回复。当用户点击开箱和挂失刷卡时,询问是否发生该操作,并对用户回复的消息进行解析,产生相应的操作。微信开箱的具体软件设计流程如图7所示。
图7 微信开箱软件设计流程
4.2 微信端通信设计
当微信端有操作时,微信服务器通过https的Post请求与云服务器进行通信,并同时发送4个参数进行校验。参数表如表2所示。
表2 微信服务器GET请求参数表
云服务器通过检验signature签名对请求进行校验。若确认此次GET请求来自微信服务器,则原样返回echostr参数内容,并接入生效,否则接入失败。signature结合了开发者填写的Token参数和请求中的timestamp参数、nonce参数。云服务器加密/校验流程:
1)将 Token、Timestamp、Nonce 3个参数进行字典序排序。
2)将3个参数字符串拼接成一个字符串进行Sha1加密。
3)开发者获得加密后的字符串可与Signature对比,标识该请求来源于微信。
云服务器接口程序校验签名[15]后,解析出操作命令,标记云数据库后把操作指令送给智能储物柜终端,并返回响应数据给微信。
4.3 对公众号访问次数限制的改进
微信access_token值是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用,目前有效期为两个小时,需定时刷新,重复获取将导致上次获取的值失效。每天获取次数限定为2000次[16],为了方面大流量访问,对值的获取改进为如下图8方法所示,利用数据库来保存access_token的值,在第一次获取access_token值后,和当前获取时间一起存入数据库,以后每次需要使用该值时,先向数据库查询该值的获取时间进行对比,两个小时之内直接使用数据库中存储的值,超过两小时便重新获取access_token的值存入数据库,此方法解决了每天access_token值获取次数有限的问题。
图8 改进的access_token值获取方法
5 结 论
在实验室环境对系统各部分功能进行测试,系统上电运行后,用各类餐卡,超市会员卡等RFID卡进行刷卡开箱测试,系统平均在2秒内开箱成功并把结果显示在LCD屏幕上。用手机微信扫描LCD屏幕上的二维码关注微信公众号进行开箱测试,用时4秒左右。
本系统采用云服务器作为中继和接口服务器,实现了嵌入式智能终端和微信公众号平台的实时数据共享互通。利用数据库存储了用户使用数据,方面管理的同时还可以对用户数据进行大数据分析。RFID和微信双凭证的开箱方式,在便捷性、智能性、安全性、信息化程度和成本控制及维护性上都有了很大提升。