林志舟, 任 凱, 葉傲斌
1(南京大學金陵學院 信息科學與工程學院, 南京 210089)
2(華東師范大學 計算機科學與軟件工程學院, 上海 200062)
隨著我國經濟的迅速發展, 人們的養寵意愿增強,寵物經濟成為城市經濟重要的組成部分[1,2].根據《2010-2015 年中國寵物市場調研及行業發展分析研究報告》[3],全國寵物數量已超過1 億只, 由寵物經濟興盛帶來的龐大寵物基數, 使得寵物丟失時有發生.在此背景下,設計一款以寵物追蹤為基礎功能的應用系統尤為重要.一方面, 系統的使用可在一定程度上解決由于寵物丟失帶來的社會問題; 另一方面, 系統在經濟方面的投資回報相對可觀, 可促進該類產品的進一步研發.
依托嵌入式設備和Android 平臺, 本文構建了基于消息隊列遙測傳輸(Message Queuing Telemetry Transport, MQTT)協議的智能寵物追蹤系統.該系統具有規劃尋寵路徑、語音導航、預估尋找時間、路況預測等多種功能.系統采用的MQTT 傳輸協議具有簡潔、小巧、可擴展性強、省流量、低功耗等特點, 可確保MQTT 客戶端的持久耐用[4].
系統整體架構按照物聯網3 層模型可分為: 應用層、網絡層、感知層, 如圖1 所示.

圖1 系統整體架構圖
應用層包括Web 服務器、Android 客戶端應用程序(以下簡稱Android 端)和導航服務器3 部分.Web服務包含應用服務器、數據庫服務器兩部分.應用服務器主要負責處理Android 端發送來的各種請求, 并對每個請求給出響應.數據庫服務器負責用戶數據的存儲, 它與應用服務器部署在同一個硬件設備中,Android 端根據嵌入式設備的所在位置為用戶提供導航功能, 利用該特點實現寵物追蹤.導航服務器由高德地圖提供, 在具體實現時, 只需調用高德地圖為Android 端提供的服務接口, 不關心其內部實現.
網絡層主要依靠MQTT 協議進行消息的發布和訂閱.MQTT 服務器由蘇州煜瑛微電子科技有限公司提供, 該服務器主要負責寵物信息的發布與訂閱, 將寵物位置信息發送至Android 端.MQTT 服務器與Web服務器安裝在不同的硬件設備中.即使Web 服務器暫時不可用, 只要用戶在Android 端沒有退出登陸,Android 端的導航功能仍舊能夠正常使用.
感知層主要由嵌入式設備實現, 為了實現寵物追蹤功能, 寵物必須攜帶并完成設備綁定才能完成定位和追蹤功能.
實現寵物追蹤需對寵物設備和Android 端應用程序進行綁定.綁定關系為一對多, 即每只寵物只屬于1 個用戶, 1 個用戶可擁有多只寵物.通過用戶的手機號碼來標識用戶, 通過設備的SN 號(設備序列號)來標識寵物.設備被封裝成項圈佩戴在寵物頸部, 可隨時通過本應用程序獲取設備的位置信息, 即寵物的位置信息.
綁定設備只需要用戶通過掃描SN 號即可完成.主要過程分為兩步: 首先, 依靠Android 平臺提供的Bitmap 接口, 將SN 號編碼為JSON 格式字符串, 再將字符串轉為黑白點陣, 最后轉化為二維碼圖片, 如圖2所示.其次, 在識別二維碼時, 通過攝像頭捕獲, 然后判斷編碼類型, 再根據已有信息進行解碼, 即可從開始的二維碼中獲取SN 號[5,6], 如圖3 所示.設備綁定完成后通過Android 端應用程序即可進行定位、導航等操作.

圖2 設備SN 號轉為二維碼

圖3 二維碼轉換設備SN 號
寵物綁定之后, 進行寵物追蹤還需要寵物的位置信息與Android 端的位置信息.寵物的位置信息通過MQTT 服務端獲取, 由于與MQTT 服務器建立的是長連接, 在用戶訂閱消息后, 可獲取MQTT 服務器發布的寵物位置信息.用戶位置信息的獲取需要依靠Android 平臺查找手機所有可用的位置提供器.在找到位置提供器后動態請求權限, 經用戶同意后獲取.在獲取雙方位置信息后, 調用高德地圖的API 即可開始導航.在低版本的SDK 中, 要實現語音播報需要語音在線合成平臺的SDK, 在取得導航播報信息后, 將播報信息轉換成語音.高版本SDK 對語音功能支持更好, 只需要集成導航公司提供的包含了語音功能的jar 包與so 包, 做好相關配置即可.
Android 端與導航服務器的通信由高德提供SDK 內部實現, 只需調用相關接口即可.Android 端和Web 服務器的交互通過HTTP 協議進行.在Android端采用了Okhttp 框架進行, 該框架可支持GZIP 格式,達到減少數據流量使用的目的.在編寫底層通信代碼時, 高版本Android SDK 不允許主線程進行通信操作,因為主線程需要進行界面元素的監聽, 若主線程負責通信, 則會使界面在通信時失去響應, 造成不友好的用戶體驗.所以在進行通信時, 應啟動子線程, 由子線程負責監聽, 并通過Handler 進行必要的界面更新等操作.在OkHttp 框架中, 也是基于該原理進行了封裝.
在與MQTT 服務端交互時, Android 端和嵌入式設備都可以看作MQTT 客戶端, 導入在MQTT 官網下載的jar 包之后, 在Android 端通過MQTT 協議提供的接口進行通訊, 整體過程如圖4 所示[7].

圖4 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 簡化后的發布訂閱模式示意圖
Web 服務端以Spring Boot 框架為基礎, 集成Hibernate 中間件進行數據持久化, 依靠Maven 進行代碼管理.Web 服務端對Android 端的響應利用了Spring MVC 的設計模式[9], 為Android 端提供服務的視圖層在服務端是不可見的.當用戶發起請求時, 根據用戶請求的URL, 控制器會為其映射到對應的處理方法中, 該方法會根據用戶需求進行業務處理, 并將結果以JSON 格式返回給Android 端進行解析.絕大多數業務都是對數據進行處理, 對于需要訪問數據庫的業務邏輯, 服務器端將關系數據利用Hibernate 映射到實體類中, 即MVC 框架中的模型層, 該業務只需通過操作實體類即可完成對數據庫的事務操作.依靠數據庫連接池、Hibernate 的Transaction 事務處理接口、加鎖等操作, 可以在一定程度上依靠代碼處理好并發.
由于Android 平臺開源的特性, 促進了眾多基于Android 平臺的硬件設備的出現, 這些硬件產品存在著不兼容的可能性.為確保系統穩定, 需要對Android 端進行兼容性測試.傳統測試每次只能在一個硬件上對測試用例串行執行, 云測試可以合理的動態調用各類資源, 通過一個共享可用的自動化測試環境提供高效的便捷服務[10].通過云平臺以較低成本覆蓋測試更多的設備, 盡可能發現系統的潛在兼容性問題.本系統Android 端借助百度移動云測試中心進行測試, 已通過MTC 認證并在百度應用市場發布.
用戶首次進入該系統, 需要先注冊, 注冊時會收到云平臺發送的短信驗證碼, 通過驗證登陸.登陸后用戶掃描二維碼綁定設備, 綁定成功后用戶即可查看寵物位置信息.當寵物丟失時, 用戶可以通過位置信息發現寵物, 并選擇導航方式進行寵物追蹤.核心業務流程如圖8 所示.

圖8 核心業務流程圖
用戶在注冊并登陸后, 可進入如圖9 所示的主界面, 在該主界面下用戶可以綁定設備、查看設備信息,完成綁定后, 點擊主界面下方導航即可進入如圖10 所示的導航界面預覽, 界面已將用戶與寵物的經緯度信息可視化, 用戶在該界面可確認寵物位置并確定是否要開始導航.當用戶決定導航尋寵時, 單擊地圖下方的圖形按鈕即可開始導航, 如圖11 所示.
本文設計并實現了基于MQTT 協議的智能寵物追蹤系統.通過掃描二維碼的形式錄入、識別綁定寵物攜帶的硬件設備SN 號.以SN 號設置訂閱主題, 實現用戶與設備間一對多的關系.綁定完成后通過MQTT協議獲取寵物的位置, 通過高德地圖繪制從用戶到寵物的路徑, 并可實現導航功能.除核心模塊外, 系統還為用戶提供了許多其他功能, 如疫苗規劃、科普、物聯網卡充值等.系統在設計過程中融入軟件工程復用思想, 為系統預留了拓展接口.依靠這些拓展接口, 可漸增集成開發老人防走失, 汽車防盜等模塊.采用該協議實現的追蹤功能具有低功耗、長連接、低流量等優點, 為開發同類產品提供了一種新思路.

圖9 Android 端主界面圖

圖10 導航預覽界面圖

圖11 導航界面圖