廖冠昌,羅回彬,崔浩鈞,楊坤,陳曉聰,潘詠聰
(北京理工大學珠海學院計算機學院,珠海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 在手機上占用存儲空間大的問題,而且能給用戶帶來更好的體驗。因此,本設計在國內具有非常廣闊的市場空間,也對今后的智能硬件的發展也有一定的指引和參考價值作用。