APP下载

基于MQTT 的智能宠物追踪系统①

2020-03-23林志舟叶傲斌

计算机系统应用 2020年2期
关键词:开发板服务端界面

林志舟, 任 凯, 叶傲斌

1(南京大学金陵学院 信息科学与工程学院, 南京 210089)

2(华东师范大学 计算机科学与软件工程学院, 上海 200062)

随着我国经济的迅速发展, 人们的养宠意愿增强,宠物经济成为城市经济重要的组成部分[1,2].根据《2010-2015 年中国宠物市场调研及行业发展分析研究报告》[3],全国宠物数量已超过1 亿只, 由宠物经济兴盛带来的庞大宠物基数, 使得宠物丢失时有发生.在此背景下,设计一款以宠物追踪为基础功能的应用系统尤为重要.一方面, 系统的使用可在一定程度上解决由于宠物丢失带来的社会问题; 另一方面, 系统在经济方面的投资回报相对可观, 可促进该类产品的进一步研发.

依托嵌入式设备和Android 平台, 本文构建了基于消息队列遥测传输(Message Queuing Telemetry Transport, MQTT)协议的智能宠物追踪系统.该系统具有规划寻宠路径、语音导航、预估寻找时间、路况预测等多种功能.系统采用的MQTT 传输协议具有简洁、小巧、可扩展性强、省流量、低功耗等特点, 可确保MQTT 客户端的持久耐用[4].

1 整体架构

系统整体架构按照物联网3 层模型可分为: 应用层、网络层、感知层, 如图1 所示.

图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 设备SN 号转为二维码

图3 二维码转换设备SN 号

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].

图4 MQTT 服务器交互方式示意图

3 嵌入式设备与MQTT 服务端的实现

嵌入式设备为集成MTK2503 芯片组的WZ-203CS开发板.开发板的底层是一个实时操作系统.图5 为开发板的实物图, 中间方形芯片为开发板的核心模块.该核心模块集成了GNSS、GPRS、蓝牙等功能模块, 分别由相应的接口对外提供服务, 其实现的内部结构框图如图6 所示.在核心模块外部的开发板上嵌入了物联网卡, 能够满足定位与追踪需求.同时, 核心模块还对外提供了SD、AUDIO 等接口, 通过外接SD 卡可存储音频等信息, 使得依托该开发板的系统拥有较好的可拓展性.对于集成了该开发板的设备, 开发商提供了一套较为齐全的服务.若不采用该服务, 可以在云平台搭建属于单个系统的私有云服务器, 整体设计思路相近, 系统容量会更加可观.

图5 WZ-203CS 开发板实物图

图6 开发板核心模块结构框图

嵌入式设备需要能够维持与MQTT 服务器端的长连接.传统智能家居设备与Android 端进行交互需要先进行配网再控制设备, 它们的连接由WiFi 模块发送心跳包维持[8].与智能家居设备不同的是, 当用户有宠物追踪需求时, 宠物往往已不在家中, 此时再通过WiFi 模块配网将使系统可用性大大降低, 故此时的连接交由开发板上内嵌的物联网卡进行, 由GPRS 模块负责连接的维持, 主动向MQTT 服务器上报设备状态.在整个过程中, 为了保证每个用户都能够订阅到自己设备的信息, 系统以设备SN 号为标识设置订阅主题.简化后的过程如图7 所示.当用户订阅了主题之后, 就可以接收到来自设备的推送信息.1 个用户可以订阅以多个SN 号为标识的主题, 适用于1 个用户拥有多只宠物的情形.为了避免订阅主题在人工输入环节出错, 采用了二维码扫描输入的方法, 确保系统的易用性.

图7 简化后的发布订阅模式示意图

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 所示.

图8 核心业务流程图

5.3 部分系统界面展示

用户在注册并登陆后, 可进入如图9 所示的主界面, 在该主界面下用户可以绑定设备、查看设备信息,完成绑定后, 点击主界面下方导航即可进入如图10 所示的导航界面预览, 界面已将用户与宠物的经纬度信息可视化, 用户在该界面可确认宠物位置并确定是否要开始导航.当用户决定导航寻宠时, 单击地图下方的图形按钮即可开始导航, 如图11 所示.

6 结语

本文设计并实现了基于MQTT 协议的智能宠物追踪系统.通过扫描二维码的形式录入、识别绑定宠物携带的硬件设备SN 号.以SN 号设置订阅主题, 实现用户与设备间一对多的关系.绑定完成后通过MQTT协议获取宠物的位置, 通过高德地图绘制从用户到宠物的路径, 并可实现导航功能.除核心模块外, 系统还为用户提供了许多其他功能, 如疫苗规划、科普、物联网卡充值等.系统在设计过程中融入软件工程复用思想, 为系统预留了拓展接口.依靠这些拓展接口, 可渐增集成开发老人防走失, 汽车防盗等模块.采用该协议实现的追踪功能具有低功耗、长连接、低流量等优点, 为开发同类产品提供了一种新思路.

图9 Android 端主界面图

图10 导航预览界面图

图11 导航界面图

猜你喜欢

开发板服务端界面
不同截面类型钢管RPC界面粘结性能对比研究
微重力下两相控温型储液器内气液界面仿真分析
国企党委前置研究的“四个界面”
基于STM32H7的FDCAN通信系统设计与实现∗
多人联机对战游戏的设计与实现
基于三层结构下机房管理系统的实现分析
基于三层结构下机房管理系统的实现分析
开发板在单片机原理及接口技术课程教学中的应用
ARM宣布mbed Enabled Freescale FRDM—K64F开发板通过微软认证
MiniGUI在基于OMAP5912开发板上的移植