廖冠昌,羅回彬,崔浩鈞,楊坤,陳曉聰,潘詠聰
(北京理工大學(xué)珠海學(xué)院計算機學(xué)院,珠海519000)
隨著智能終端設(shè)備的普及和網(wǎng)絡(luò)技術(shù)的發(fā)展,設(shè)備的智能化在近幾年逐漸火熱起來。市面上也出現(xiàn)了眾多的智能產(chǎn)品,但目前市面上的智能產(chǎn)品售價普遍較高,這使得很大一部分還在使用傳統(tǒng)硬件系統(tǒng)的用戶望而卻步。為了解決現(xiàn)有非智能產(chǎn)品智能化的問題,筆者提出了一種基于微信小程序的硬件控制系統(tǒng),通過智能硬件系統(tǒng)的控制使得傳統(tǒng)硬件產(chǎn)品更具智能化。
此外,近年來隨著中國微信小程序的日新增活躍用戶數(shù)量一路猛增,用戶通過微信掃一掃即可直接打開指定微信小程序?qū)χ悄苡布O(shè)備進(jìn)行遠(yuǎn)程控制和環(huán)境狀態(tài)數(shù)據(jù)的實時監(jiān)測,實現(xiàn)了“觸手可及”的夢想,智能硬件設(shè)備可更好的滿足個性化、智能化的產(chǎn)業(yè)發(fā)展應(yīng)用需求。
根據(jù)本系統(tǒng)特點,筆者構(gòu)建了一個軟件系統(tǒng)架構(gòu)框架圖,如圖1 所示。其中,智能硬件設(shè)備可以通過與路由器進(jìn)行連接,訪問遠(yuǎn)程服務(wù)器,傳遞當(dāng)前智能硬件設(shè)備或監(jiān)控環(huán)境中的狀態(tài)響應(yīng)信息至遠(yuǎn)程服務(wù)器,并將其寫入數(shù)據(jù)庫遠(yuǎn)程服務(wù)器中,而數(shù)據(jù)處理中引入Re?dis 方式進(jìn)行數(shù)據(jù)緩存。從而,用戶即可通過手機登錄微信小程序直接訪問遠(yuǎn)程服務(wù)器平臺,讀取或更新遠(yuǎn)程數(shù)據(jù)庫中智能硬件設(shè)備的響應(yīng)信息,服務(wù)器通過轉(zhuǎn)發(fā)響應(yīng)消息給智能硬件設(shè)備,實現(xiàn)智能硬件設(shè)備的遠(yuǎn)程管理操作。
主要包括設(shè)備列表、設(shè)備地圖、個人中心等功能模塊。其中,設(shè)備列表可以進(jìn)行設(shè)備添加、設(shè)備刪除、設(shè)備查詢及綁定等功能;設(shè)備地圖可以根據(jù)設(shè)備坐標(biāo)顯示設(shè)備位置及狀態(tài)信息等,系統(tǒng)功能模塊圖如圖2所示。
圖2 系統(tǒng)功能模塊圖
用戶登錄時后臺讀取數(shù)據(jù)庫查看該用戶是否存在,若不存在則創(chuàng)建新用戶,若存在則登錄。然后開始獲取設(shè)備列表,初始列表為空。用戶可綁定添加或刪除設(shè)備,對在線或離線的設(shè)備進(jìn)行操作。其主要功能流程如圖3 所示。
圖3 主要功能模塊流程圖
本系統(tǒng)中智能硬件設(shè)備定位通過騰訊地圖以及微信小程序的API 位置服務(wù)實現(xiàn),具體可參考微信小程序開發(fā)文檔:當(dāng)前位置數(shù)據(jù)的返回需要用戶參數(shù)OPEN_ID 和SESSION_KEY。
(1)將res.code 傳遞到指定接口獲取到openId、ses?sionKey,如果請求響應(yīng)成功,則將OPEN_ID 和SES?SION_KEY 提交請求給服務(wù)器,并將自定義登錄狀態(tài)存入storage,key 值為loginState。
(2)獲取app.js 中存入的storage,然后調(diào)用de?vice_search 接口,根據(jù)服務(wù)端返回的數(shù)據(jù)進(jìn)行設(shè)備在線or 離線判斷、圖標(biāo)判斷,給設(shè)備列表中的設(shè)備分配對應(yīng)標(biāo)記點。
(3)返回可以用于wx.openLocation 的經(jīng)緯度,在地圖上顯示當(dāng)前智能硬件設(shè)備所在位置。
本系統(tǒng)中數(shù)據(jù)交互采用無連接、高效率的UDP 通信方式。智能硬件設(shè)備通過路由器接入網(wǎng)絡(luò)并鏈接到指定服務(wù)器,定時上報智能硬件設(shè)備的狀態(tài)至服務(wù)器并寫入數(shù)據(jù)庫。同時,用戶可通過微信小程序訪問服務(wù)器,下發(fā)對智能硬件設(shè)備的控制,當(dāng)有控制指令且控制指令不同于當(dāng)前智能硬件設(shè)備狀態(tài)值時,將con?trol_value 控制值返回給指定IP 地址客戶端,實現(xiàn)對智能硬件設(shè)備的遠(yuǎn)程操作。
為防止多用戶高并發(fā)訪問導(dǎo)致數(shù)據(jù)不一致,本系統(tǒng)除了部署一個存儲型數(shù)據(jù)庫外,還部署一個Redis 緩存型數(shù)據(jù)庫,當(dāng)通過service 層訪問數(shù)據(jù)庫進(jìn)行讀寫操作時,首先會查看Redis 是否有緩存,而不是直接對存儲型數(shù)據(jù)庫進(jìn)行訪問。此外,由于數(shù)據(jù)庫和緩存更新時,可能會出現(xiàn)Redis 緩存和MySQL 數(shù)據(jù)庫間的數(shù)據(jù)不一致問題,即無論是先對MySQL 數(shù)據(jù)庫進(jìn)行持久化操縱,再刪除Redis 緩存;還是先刪除緩存,然后持久化數(shù)據(jù)庫,都會導(dǎo)致數(shù)據(jù)不一致的問題出現(xiàn)。因此筆者采用了將熱數(shù)據(jù)基本放在Redis 中進(jìn)行讀操作,增刪改都是操作MySQL,更新數(shù)據(jù)時將從MySQL 讀出的不在緩存區(qū)的數(shù)據(jù)寫入緩存區(qū)Redis 中,具體Redis 緩存查詢業(yè)務(wù)如圖4 所示。
圖4 Redis緩存查詢業(yè)務(wù)
圖5 實現(xiàn)效果部分截圖
本文設(shè)計并實現(xiàn)了一種基于微信小程序的硬件系統(tǒng),通過智能硬件系統(tǒng)的控制使得傳統(tǒng)硬件產(chǎn)品更具智能化,實現(xiàn)效果如圖5 所示。本項目的特色在于行使用微信小程序進(jìn)行開發(fā),用戶掃一掃即可快速打開應(yīng)用,不僅克服了App 在手機上占用存儲空間大的問題,而且能給用戶帶來更好的體驗。因此,本設(shè)計在國內(nèi)具有非常廣闊的市場空間,也對今后的智能硬件的發(fā)展也有一定的指引和參考價值作用。