2. 华东师范大学 计算机科学与软件工程学院, 上海 200062
2. School of Computer Science and Software Engineering, East China Normal University, Shanghai 200062, China
随着我国经济的迅速发展, 人们的养宠意愿增强, 宠物经济成为城市经济重要的组成部分[1,2]. 根据《2010-2015年中国宠物市场调研及行业发展分析研究报告》[3], 全国宠物数量已超过1亿只, 由宠物经济兴盛带来的庞大宠物基数, 使得宠物丢失时有发生. 在此背景下, 设计一款以宠物追踪为基础功能的应用系统尤为重要. 一方面, 系统的使用可在一定程度上解决由于宠物丢失带来的社会问题; 另一方面, 系统在经济方面的投资回报相对可观, 可促进该类产品的进一步研发.
依托嵌入式设备和Android平台, 本文构建了基于消息队列遥测传输(Message Queuing Telemetry Transport, MQTT)协议的智能宠物追踪系统. 该系统具有规划寻宠路径、语音导航、预估寻找时间、路况预测等多种功能. 系统采用的MQTT传输协议具有简洁、小巧、可扩展性强、省流量、低功耗等特点, 可确保MQTT客户端的持久耐用[4].
1 整体架构系统整体架构按照物联网3层模型可分为: 应用层、网络层、感知层, 如图1所示.
应用层包括Web服务器、Android客户端应用程序(以下简称Android端)和导航服务器3部分. Web服务包含应用服务器、数据库服务器两部分. 应用服务器主要负责处理Android端发送来的各种请求, 并对每个请求给出响应. 数据库服务器负责用户数据的存储, 它与应用服务器部署在同一个硬件设备中, Android端根据嵌入式设备的所在位置为用户提供导航功能, 利用该特点实现宠物追踪. 导航服务器由高德地图提供, 在具体实现时, 只需调用高德地图为Android端提供的服务接口, 不关心其内部实现.
网络层主要依靠MQTT协议进行消息的发布和订阅. MQTT服务器由苏州煜瑛微电子科技有限公司提供, 该服务器主要负责宠物信息的发布与订阅, 将宠物位置信息发送至Android端. MQTT服务器与Web服务器安装在不同的硬件设备中. 即使Web服务器暂时不可用, 只要用户在Android端没有退出登陆, Android端的导航功能仍旧能够正常使用.
感知层主要由嵌入式设备实现, 为了实现宠物追踪功能, 宠物必须携带并完成设备绑定才能完成定位和追踪功能.
2 Android端的设计与实现 2.1 设备绑定实现宠物追踪需对宠物设备和Android端应用程序进行绑定. 绑定关系为一对多, 即每只宠物只属于1个用户, 1个用户可拥有多只宠物. 通过用户的手机号码来标识用户, 通过设备的SN号(设备序列号)来标识宠物. 设备被封装成项圈佩戴在宠物颈部, 可随时通过本应用程序获取设备的位置信息, 即宠物的位置信息.
绑定设备只需要用户通过扫描SN号即可完成. 主要过程分为两步: 首先, 依靠Android平台提供的Bitmap接口, 将SN号编码为JSON格式字符串, 再将字符串转为黑白点阵, 最后转化为二维码图片, 如图2所示. 其次, 在识别二维码时, 通过摄像头捕获, 然后判断编码类型, 再根据已有信息进行解码, 即可从开始的二维码中获取SN号[5,6], 如图3所示. 设备绑定完成后通过Android端应用程序即可进行定位、导航等操作.
2.2 宠物导航
宠物绑定之后, 进行宠物追踪还需要宠物的位置信息与Android端的位置信息. 宠物的位置信息通过MQTT服务端获取, 由于与MQTT服务器建立的是长连接, 在用户订阅消息后, 可获取MQTT服务器发布的宠物位置信息. 用户位置信息的获取需要依靠Android平台查找手机所有可用的位置提供器. 在找到位置提供器后动态请求权限, 经用户同意后获取. 在获取双方位置信息后, 调用高德地图的API即可开始导航. 在低版本的SDK中, 要实现语音播报需要语音在线合成平台的SDK, 在取得导航播报信息后, 将播报信息转换成语音. 高版本SDK对语音功能支持更好, 只需要集成导航公司提供的包含了语音功能的jar包与so包, 做好相关配置即可.
2.3 实现与服务端的交互Android端与导航服务器的通信由高德提供SDK内部实现, 只需调用相关接口即可. Android端和Web服务器的交互通过HTTP协议进行. 在Android端采用了Okhttp框架进行, 该框架可支持GZIP格式, 达到减少数据流量使用的目的. 在编写底层通信代码时, 高版本Android SDK不允许主线程进行通信操作, 因为主线程需要进行界面元素的监听, 若主线程负责通信, 则会使界面在通信时失去响应, 造成不友好的用户体验. 所以在进行通信时, 应启动子线程, 由子线程负责监听, 并通过Handler进行必要的界面更新等操作. 在OkHttp框架中, 也是基于该原理进行了封装.
在与MQTT服务端交互时, Android端和嵌入式设备都可以看作MQTT客户端, 导入在MQTT官网下载的jar包之后, 在Android端通过MQTT协议提供的接口进行通讯, 整体过程如图4所示[7].
3 嵌入式设备与MQTT服务端的实现
嵌入式设备为集成MTK2503芯片组的WZ-203CS开发板. 开发板的底层是一个实时操作系统. 图5为开发板的实物图, 中间方形芯片为开发板的核心模块. 该核心模块集成了GNSS、GPRS、蓝牙等功能模块, 分别由相应的接口对外提供服务, 其实现的内部结构框图如图6所示. 在核心模块外部的开发板上嵌入了物联网卡, 能够满足定位与追踪需求. 同时, 核心模块还对外提供了SD、AUDIO等接口, 通过外接SD卡可存储音频等信息, 使得依托该开发板的系统拥有较好的可拓展性. 对于集成了该开发板的设备, 开发商提供了一套较为齐全的服务. 若不采用该服务, 可以在云平台搭建属于单个系统的私有云服务器, 整体设计思路相近, 系统容量会更加可观.
嵌入式设备需要能够维持与MQTT服务器端的长连接. 传统智能家居设备与Android端进行交互需要先进行配网再控制设备, 它们的连接由WiFi模块发送心跳包维持[8]. 与智能家居设备不同的是, 当用户有宠物追踪需求时, 宠物往往已不在家中, 此时再通过WiFi模块配网将使系统可用性大大降低, 故此时的连接交由开发板上内嵌的物联网卡进行, 由GPRS模块负责连接的维持, 主动向MQTT服务器上报设备状态. 在整个过程中, 为了保证每个用户都能够订阅到自己设备的信息, 系统以设备SN号为标识设置订阅主题. 简化后的过程如图7所示. 当用户订阅了主题之后, 就可以接收到来自设备的推送信息. 1个用户可以订阅以多个SN号为标识的主题, 适用于1个用户拥有多只宠物的情形. 为了避免订阅主题在人工输入环节出错, 采用了二维码扫描输入的方法, 确保系统的易用性.
4 Web服务端的实现
Web服务端以Spring Boot框架为基础, 集成Hibernate中间件进行数据持久化, 依靠Maven进行代码管理. Web服务端对Android端的响应利用了Spring MVC的设计模式[9], 为Android端提供服务的视图层在服务端是不可见的. 当用户发起请求时, 根据用户请求的URL, 控制器会为其映射到对应的处理方法中, 该方法会根据用户需求进行业务处理, 并将结果以JSON格式返回给Android端进行解析. 绝大多数业务都是对数据进行处理, 对于需要访问数据库的业务逻辑, 服务器端将关系数据利用Hibernate映射到实体类中, 即MVC框架中的模型层, 该业务只需通过操作实体类即可完成对数据库的事务操作. 依靠数据库连接池、Hibernate的Transaction事务处理接口、加锁等操作, 可以在一定程度上依靠代码处理好并发.
5 系统测试与部分系统界面展示 5.1 Android端的测试由于Android平台开源的特性, 促进了众多基于Android平台的硬件设备的出现, 这些硬件产品存在着不兼容的可能性. 为确保系统稳定, 需要对Android端进行兼容性测试. 传统测试每次只能在一个硬件上对测试用例串行执行, 云测试可以合理的动态调用各类资源, 通过一个共享可用的自动化测试环境提供高效的便捷服务[10]. 通过云平台以较低成本覆盖测试更多的设备, 尽可能发现系统的潜在兼容性问题. 本系统Android端借助百度移动云测试中心进行测试, 已通过MTC认证并在百度应用市场发布.
5.2 业务流程用户首次进入该系统, 需要先注册, 注册时会收到云平台发送的短信验证码, 通过验证登陆. 登陆后用户扫描二维码绑定设备, 绑定成功后用户即可查看宠物位置信息. 当宠物丢失时, 用户可以通过位置信息发现宠物, 并选择导航方式进行宠物追踪. 核心业务流程如图8所示.
5.3 部分系统界面展示
用户在注册并登陆后, 可进入如图9所示的主界面, 在该主界面下用户可以绑定设备、查看设备信息, 完成绑定后, 点击主界面下方导航即可进入如图10所示的导航界面预览, 界面已将用户与宠物的经纬度信息可视化, 用户在该界面可确认宠物位置并确定是否要开始导航. 当用户决定导航寻宠时, 单击地图下方的图形按钮即可开始导航, 如图11所示.
6 结语本文设计并实现了基于MQTT协议的智能宠物追踪系统. 通过扫描二维码的形式录入、识别绑定宠物携带的硬件设备SN号. 以SN号设置订阅主题, 实现用户与设备间一对多的关系. 绑定完成后通过MQTT协议获取宠物的位置, 通过高德地图绘制从用户到宠物的路径, 并可实现导航功能. 除核心模块外, 系统还为用户提供了许多其他功能, 如疫苗规划、科普、物联网卡充值等. 系统在设计过程中融入软件工程复用思想, 为系统预留了拓展接口. 依靠这些拓展接口, 可渐增集成开发老人防走失, 汽车防盗等模块. 采用该协议实现的追踪功能具有低功耗、长连接、低流量等优点, 为开发同类产品提供了一种新思路.
[1] |
陈思含. 浅谈新时代背景下的宠物经济发展. 知识经济, 2019(1): 79-81. DOI:10.3969/j.issn.1007-3825.2019.01.042 |
[2] |
陈雪梅, 王昱丁, 孙海涛, 等. 中国宠物文化发展及其对宠物经济的影响. 当代畜牧, 2018(21): 55-58. |
[3] |
邬胜利. 让宠物有个幸福晚年. 中国工作犬业, 2015(4): 63. DOI:10.3969/j.issn.1673-0135.2015.04.021 |
[4] |
张冲, 刘涌, 杨海波, 等. 移动社交网络实时通信机制的研究. 计算机系统应用, 2014, 23(2): 205-208. DOI:10.3969/j.issn.1003-3254.2014.02.037 |
[5] |
徐玲, 蒋欣志, 张杰. 手机二维码识别系统的设计与实现. 计算机应用, 2012, 32(5): 1474-1476. |
[6] |
魏天骐, 罗庆生, 王勇, 等. 基于安卓的智能储物柜控制平台设计. 机械与电子, 2013(3): 28-31. DOI:10.3969/j.issn.1001-2257.2013.03.008 |
[7] |
关庆余, 李鸿彬, 于波. MQTT协议在Android平台上的研究与应用. 计算机系统应用, 2014, 23(4): 196-200, 196. DOI:10.3969/j.issn.1003-3254.2014.04.040 |
[8] |
卢于辉, 秦会斌. 基于MQTT的智能家居系统的设计与实现. 智能物联技术, 2019, 51(2): 42-47. |
[9] |
Zhang F, Wang SJ. Design and implementation of a logistics report management system based on spring MVC. Proceedings of the 2015 International Conference on Electrical, Automation and Mechanical Engineering. Phuket, Thailand. 2015. 817–820.
|
[10] |
周玲妤. 云测试系统. 电子技术与软件工程, 2018(11): 46. |