廖冠昌,罗回彬,崔浩钧,杨坤,陈晓聪,潘咏聪
(北京理工大学珠海学院计算机学院,珠海519000)
随着智能终端设备的普及和网络技术的发展,设备的智能化在近几年逐渐火热起来。市面上也出现了众多的智能产品,但目前市面上的智能产品售价普遍较高,这使得很大一部分还在使用传统硬件系统的用户望而却步。为了解决现有非智能产品智能化的问题,笔者提出了一种基于微信小程序的硬件控制系统,通过智能硬件系统的控制使得传统硬件产品更具智能化。
此外,近年来随着中国微信小程序的日新增活跃用户数量一路猛增,用户通过微信扫一扫即可直接打开指定微信小程序对智能硬件设备进行远程控制和环境状态数据的实时监测,实现了“触手可及”的梦想,智能硬件设备可更好的满足个性化、智能化的产业发展应用需求。
根据本系统特点,笔者构建了一个软件系统架构框架图,如图1 所示。其中,智能硬件设备可以通过与路由器进行连接,访问远程服务器,传递当前智能硬件设备或监控环境中的状态响应信息至远程服务器,并将其写入数据库远程服务器中,而数据处理中引入Re⁃dis 方式进行数据缓存。从而,用户即可通过手机登录微信小程序直接访问远程服务器平台,读取或更新远程数据库中智能硬件设备的响应信息,服务器通过转发响应消息给智能硬件设备,实现智能硬件设备的远程管理操作。
主要包括设备列表、设备地图、个人中心等功能模块。其中,设备列表可以进行设备添加、设备删除、设备查询及绑定等功能;设备地图可以根据设备坐标显示设备位置及状态信息等,系统功能模块图如图2所示。
图2 系统功能模块图
用户登录时后台读取数据库查看该用户是否存在,若不存在则创建新用户,若存在则登录。然后开始获取设备列表,初始列表为空。用户可绑定添加或删除设备,对在线或离线的设备进行操作。其主要功能流程如图3 所示。
图3 主要功能模块流程图
本系统中智能硬件设备定位通过腾讯地图以及微信小程序的API 位置服务实现,具体可参考微信小程序开发文档:当前位置数据的返回需要用户参数OPEN_ID 和SESSION_KEY。
(1)将res.code 传递到指定接口获取到openId、ses⁃sionKey,如果请求响应成功,则将OPEN_ID 和SES⁃SION_KEY 提交请求给服务器,并将自定义登录状态存入storage,key 值为loginState。
(2)获取app.js 中存入的storage,然后调用de⁃vice_search 接口,根据服务端返回的数据进行设备在线or 离线判断、图标判断,给设备列表中的设备分配对应标记点。
(3)返回可以用于wx.openLocation 的经纬度,在地图上显示当前智能硬件设备所在位置。
本系统中数据交互采用无连接、高效率的UDP 通信方式。智能硬件设备通过路由器接入网络并链接到指定服务器,定时上报智能硬件设备的状态至服务器并写入数据库。同时,用户可通过微信小程序访问服务器,下发对智能硬件设备的控制,当有控制指令且控制指令不同于当前智能硬件设备状态值时,将con⁃trol_value 控制值返回给指定IP 地址客户端,实现对智能硬件设备的远程操作。
为防止多用户高并发访问导致数据不一致,本系统除了部署一个存储型数据库外,还部署一个Redis 缓存型数据库,当通过service 层访问数据库进行读写操作时,首先会查看Redis 是否有缓存,而不是直接对存储型数据库进行访问。此外,由于数据库和缓存更新时,可能会出现Redis 缓存和MySQL 数据库间的数据不一致问题,即无论是先对MySQL 数据库进行持久化操纵,再删除Redis 缓存;还是先删除缓存,然后持久化数据库,都会导致数据不一致的问题出现。因此笔者采用了将热数据基本放在Redis 中进行读操作,增删改都是操作MySQL,更新数据时将从MySQL 读出的不在缓存区的数据写入缓存区Redis 中,具体Redis 缓存查询业务如图4 所示。
图4 Redis缓存查询业务
图5 实现效果部分截图
本文设计并实现了一种基于微信小程序的硬件系统,通过智能硬件系统的控制使得传统硬件产品更具智能化,实现效果如图5 所示。本项目的特色在于行使用微信小程序进行开发,用户扫一扫即可快速打开应用,不仅克服了App 在手机上占用存储空间大的问题,而且能给用户带来更好的体验。因此,本设计在国内具有非常广阔的市场空间,也对今后的智能硬件的发展也有一定的指引和参考价值作用。