倪志平,覃曉飛
(1.柳州工學(xué)院 信息科學(xué)與工程學(xué)院,廣西 柳州 545000;2.柳州工學(xué)院 保衛(wèi)部,廣西 柳州 545000)
為了提高環(huán)境監(jiān)控信息數(shù)據(jù)的準(zhǔn)確性、真實(shí)性、實(shí)時(shí)性,促進(jìn)信息管理的智能化、精細(xì)化、網(wǎng)絡(luò)化,為我國(guó)的環(huán)境保護(hù)事業(yè)長(zhǎng)遠(yuǎn)、合理、科學(xué)地發(fā)展提供不竭的動(dòng)力和創(chuàng)新思想,應(yīng)順應(yīng)科學(xué)技術(shù)發(fā)展趨勢(shì),根據(jù)現(xiàn)有環(huán)境、現(xiàn)有資源采取有效措施,對(duì)我國(guó)環(huán)境監(jiān)測(cè)技術(shù)進(jìn)行創(chuàng)新升級(jí),將環(huán)境監(jiān)控與物聯(lián)網(wǎng)技術(shù)進(jìn)行有機(jī)整合,使終端系統(tǒng)與線上系統(tǒng)結(jié)合,讓終端硬件系統(tǒng)聯(lián)網(wǎng),將數(shù)據(jù)送上云。通過終端系統(tǒng)采集數(shù)據(jù)后聯(lián)網(wǎng)發(fā)送到云端進(jìn)行處理,然后保存至云端數(shù)據(jù)庫中,并通過前后端分離的后臺(tái)管理系統(tǒng)進(jìn)行展示和處理,從而實(shí)現(xiàn)人、機(jī)、物的泛在連接,提供信息感知、數(shù)據(jù)傳輸、數(shù)據(jù)處理等服務(wù),以此促進(jìn)我國(guó)環(huán)境保護(hù)事業(yè)的進(jìn)步與發(fā)展[1-4]。
本文設(shè)計(jì)的基于阿里云IoT Studio 的環(huán)境監(jiān)控系統(tǒng)的整體結(jié)構(gòu)[1]如圖1 所示。終端硬件系統(tǒng)的傳感器檢測(cè)到數(shù)據(jù)后封裝成阿里云IoT 支持的數(shù)據(jù)格式并發(fā)送至阿里云物聯(lián)網(wǎng)平臺(tái);數(shù)據(jù)到達(dá)阿里云后,管理員可通過阿里云IoT 提供的網(wǎng)頁端(IoT Studio)實(shí)時(shí)查看和顯示終端硬件系統(tǒng)傳來的溫濕度數(shù)據(jù);阿里云IoT 會(huì)將接收到的數(shù)據(jù)通過AQMP 協(xié)議轉(zhuǎn)發(fā)至已準(zhǔn)備好的服務(wù)器中,并由部署在服務(wù)器中的后臺(tái)管理系統(tǒng)對(duì)數(shù)據(jù)進(jìn)行接收和處理,同時(shí)在后臺(tái)界面展示和處理數(shù)據(jù)。管理員能在任何地方聯(lián)網(wǎng),通過后臺(tái)管理系統(tǒng)查看和處理從環(huán)境現(xiàn)場(chǎng)的終端硬件系統(tǒng)采集到的所有環(huán)境數(shù)據(jù),從而實(shí)現(xiàn)環(huán)境監(jiān)測(cè)系統(tǒng)的智能化、精細(xì)化、網(wǎng)絡(luò)化[5]。
圖1 系統(tǒng)整體結(jié)構(gòu)
(1)NodeMCU 數(shù)據(jù)采集主控芯片
根據(jù)整體模塊設(shè)計(jì)可知,NodeMCU 的整個(gè)工作流程包括溫濕度傳感器的數(shù)據(jù)采集、主控模塊的數(shù)據(jù)處理、OLED屏顯示數(shù)值以及通過WiFi 將數(shù)據(jù)上傳云端等步驟。如圖2 所示是本系統(tǒng)下位機(jī)進(jìn)行單次數(shù)據(jù)采集顯示并上云的工作流程。
圖2 終端溫濕度采集流程
(2)DHT22 溫濕度傳感器設(shè)計(jì)
DHT22 的驅(qū)動(dòng)程序設(shè)計(jì)部分需要引入DHT 庫文件,使用DHT dht(對(duì)應(yīng)引腳,模式)語句實(shí)例初始化DHT22 對(duì)應(yīng)的引腳和模式后即可讀取溫濕度,dht.readHumidity()為讀取濕度值,dht.readTemperature()為讀取溫度值;同時(shí)需要配合DHT22 的采樣周期(2 s),因此在讀取溫濕度值之前要設(shè)置延遲2 s。DHT22 單次數(shù)據(jù)采集工作流程如圖3 所示,當(dāng)讀取溫濕度數(shù)值失敗時(shí)將直接終止程序運(yùn)行。
圖3 DHT22 溫濕度傳感器的工作流程
(3)OLED 顯示模塊設(shè)計(jì)
圖4 為本系統(tǒng)OLED 刷新一次顯示內(nèi)容的程序流程。OLED 的驅(qū)動(dòng)程序非常簡(jiǎn)單,本系統(tǒng)使用的驅(qū)動(dòng)庫為u8g2庫,OLED 的初始化和一系列操作只需調(diào)用相關(guān)庫方法即可。OLED 每次顯示新內(nèi)容都需要清屏,然后寫入所顯示的字體類型以及顯示位置,最后寫入要顯示的數(shù)據(jù)。到此,OLED顯示內(nèi)容的工作就完成了。其中所設(shè)置的坐標(biāo)是否合適非常重要,這決定最終顯示的效果,同時(shí)還需要根據(jù)顯示屏大小控制所顯示數(shù)據(jù)的平面大小。
圖4 OLED 驅(qū)動(dòng)程序流程
硬件設(shè)備接入阿里云IoT 需要使用MQTT 協(xié)議[6],同時(shí)阿里云IoT 對(duì)于設(shè)備接入也已為我們?cè)贏rduino 庫中加入了相關(guān)的SDK—AliyunIoTSDK。AliyunIoTSDK 是基于PubSubClient 底層庫開發(fā),兼容列表與PubSubClient 相同,而PubSubClient 是對(duì)MQTT 進(jìn)行了封裝以簡(jiǎn)化開發(fā)的第三方庫。設(shè)備接入如圖5 所示。
圖5 硬件接入云
設(shè)備接入云所上傳的數(shù)據(jù)格式還需要根據(jù)阿里云IoT 的設(shè)備接入上傳數(shù)據(jù)的格式進(jìn)行設(shè)計(jì),需要上傳設(shè)備的產(chǎn)品密鑰、設(shè)備名稱、設(shè)備密鑰和所在的IoT Studio 區(qū)域,這些數(shù)據(jù)在阿里云物聯(lián)網(wǎng)平臺(tái)實(shí)例的設(shè)備管理中可以獲取。
圖6 為單次數(shù)據(jù)上傳阿里云的流程。設(shè)備接入云需要在Arduino 中引入兩個(gè)庫,一是AliyunIoTSDK 庫,另一個(gè)是PubSubClient 庫。在開發(fā)前需要在阿里云IoT 平臺(tái)的實(shí)例中新建產(chǎn)品和添加設(shè)備。新建產(chǎn)品步驟如圖7 所示,添加設(shè)備在產(chǎn)品菜單項(xiàng)第二項(xiàng)中添加即可,新建產(chǎn)品和添加設(shè)備的具體過程還需要根據(jù)實(shí)際應(yīng)用而改變。有了產(chǎn)品和設(shè)備后可查看設(shè)備信息,設(shè)備證書如圖8 所示。根據(jù)設(shè)備信息調(diào)用AliyunIoTSDK 庫函數(shù)創(chuàng)建一個(gè)實(shí)例IoT,在每次讀取到溫濕度值時(shí)通過實(shí)例IoT 調(diào)用發(fā)送函數(shù)即可將數(shù)據(jù)上傳至阿里云。
圖6 數(shù)據(jù)上云流程
圖7 阿里云IoT 創(chuàng)建產(chǎn)品
圖8 設(shè)備證書
數(shù)據(jù)轉(zhuǎn)發(fā)流程如圖9 所示。阿里云IoT 轉(zhuǎn)發(fā)數(shù)據(jù)可在規(guī)則引擎中設(shè)置[7],如圖10 所示。本系統(tǒng)使用服務(wù)端訂閱進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā),服務(wù)端訂閱有兩種方式:(1)AMQP 服務(wù)端訂閱消息;(2)MNS 服務(wù)端訂閱消息。本系統(tǒng)使用AMQP 服務(wù)端訂閱消息。AMQP(Advanced Message Queuing Protocol)為高級(jí)消息隊(duì)列協(xié)議,利用此協(xié)議可實(shí)現(xiàn)客戶端與消息中間件之間的信息交互,而且不受客戶端和中間件的不同產(chǎn)品、不同開發(fā)語言等條件的限制。
圖9 數(shù)據(jù)轉(zhuǎn)發(fā)流程
圖10 規(guī)則引擎
在阿里云物聯(lián)網(wǎng)平臺(tái)配置AMQP 服務(wù)端訂閱后,當(dāng)對(duì)應(yīng)終端硬件開始正常運(yùn)行并將數(shù)據(jù)上云時(shí),所配置的訂閱會(huì)將收到的數(shù)據(jù)通過AMQP 通道推送至已準(zhǔn)備好的服務(wù)器[8]。而在服務(wù)器中,還需要編寫相應(yīng)的AMQP 客戶端接口及業(yè)務(wù)邏輯用于接收和回應(yīng)AMQP 服務(wù)端所發(fā)送的數(shù)據(jù)。
在AMQP 客戶端的應(yīng)用實(shí)現(xiàn)方面,阿里云IoT 已經(jīng)為我們提供了AMQP SDK 接入示例,我們可根據(jù)自己的需求更改[6]。
1.5.1 功能結(jié)構(gòu)
后臺(tái)管理系統(tǒng)的功能結(jié)構(gòu)如圖11 所示,擁有基礎(chǔ)的登錄退出功能以及登錄超時(shí)自動(dòng)退出功能,并提供了一些對(duì)溫濕度數(shù)據(jù)進(jìn)行基礎(chǔ)操作的功能,如歷史數(shù)據(jù)查詢、數(shù)據(jù)導(dǎo)出、數(shù)據(jù)刪除等[7]。
圖11 功能結(jié)構(gòu)
1.5.2 架構(gòu)設(shè)計(jì)
用戶后臺(tái)管理系統(tǒng)為前后端分離架構(gòu),前后端分離是為了實(shí)現(xiàn)前后端解耦[9],將前端和后端的工作界限分清,前端專門負(fù)責(zé)頁面跳轉(zhuǎn)、數(shù)據(jù)的展示與人機(jī)交互;后端則負(fù)責(zé)為前端提供數(shù)據(jù)接口,返回JSON 數(shù)據(jù),為前端處理和存儲(chǔ)數(shù)據(jù)。應(yīng)用分層如圖12 所示,明確了前后端分工,使兩者各司其職、互不干涉;同時(shí),后端業(yè)務(wù)分層采用控制層、業(yè)務(wù)層、數(shù)據(jù)訪問層(數(shù)據(jù)持久層、通用處理層)三層架構(gòu),以實(shí)現(xiàn)系統(tǒng)的高內(nèi)聚、低耦合。
圖12 架構(gòu)設(shè)計(jì)
1.5.3 數(shù)據(jù)庫設(shè)計(jì)
本系統(tǒng)需要新建3 張數(shù)據(jù)庫表,分別是用戶表、存儲(chǔ)溫濕度數(shù)據(jù)的環(huán)境數(shù)據(jù)表、設(shè)置預(yù)警值及判斷每一刻溫濕度狀態(tài)的預(yù)警閾值表,數(shù)據(jù)庫ER 圖如圖13 所示。數(shù)據(jù)庫字段可根據(jù)需求自定義,即根據(jù)實(shí)際業(yè)務(wù)需求逐漸豐富和完善。由于本系統(tǒng)僅作為一個(gè)環(huán)境監(jiān)測(cè)系統(tǒng)開發(fā)樣例,因此只需要較少字段即可達(dá)到展示效果。
圖13 數(shù)據(jù)庫ER 圖
給下位機(jī)上電啟動(dòng)后,系統(tǒng)正常監(jiān)測(cè)到了溫濕度值并顯示在OLED 屏幕上,如圖14 所示;并且每當(dāng)溫度超過預(yù)警值時(shí),蜂鳴器將會(huì)報(bào)警。
圖14 設(shè)備終端的實(shí)現(xiàn)
阿里云IoT 平臺(tái)為我們提供了設(shè)備模擬器,能夠模擬終端設(shè)備與云端建立MQTT 連接、上報(bào)數(shù)據(jù)、接收云端控制指令以及物模型通信等完整過程。
成功啟動(dòng)AMQP 客戶端后,客戶端程序會(huì)另開啟一個(gè)進(jìn)程監(jiān)聽10 min(為了節(jié)省資源,筆者設(shè)置為10 min),10 min 后客戶端沒有監(jiān)聽到任何數(shù)據(jù)將會(huì)結(jié)束進(jìn)程。如圖15所示,調(diào)試設(shè)備后啟動(dòng)設(shè)備模擬器,選擇屬性上傳,填入對(duì)應(yīng)屬性后點(diǎn)擊發(fā)送指令就完成了一次完整的服務(wù)流程。發(fā)送指令后可以看到右側(cè)日志打印的信息,成功模擬了終端設(shè)備將環(huán)境數(shù)據(jù)發(fā)送至阿里云IoT,阿里云IoT 也成功將數(shù)據(jù)轉(zhuǎn)發(fā)至AMQP 客戶端。
圖15 啟動(dòng)AMQP 客戶端
IoT Studio 網(wǎng)頁數(shù)據(jù)的展示如圖16 所示,可以在網(wǎng)頁端實(shí)時(shí)查看溫濕度數(shù)據(jù)。
圖16 IoT Studio 網(wǎng)頁數(shù)據(jù)的展示
首先我們?cè)诒镜貑?dòng)環(huán)境數(shù)據(jù)后臺(tái)管理系統(tǒng),打開后臺(tái)界面進(jìn)入登錄頁面,如圖17 所示;輸入賬號(hào)和密碼后進(jìn)入首頁,在導(dǎo)航欄菜單項(xiàng)選擇進(jìn)入數(shù)據(jù)監(jiān)控頁,如圖18 所示。點(diǎn)擊圖中開關(guān)開始接收數(shù)據(jù)并進(jìn)行監(jiān)控,溫濕度的數(shù)據(jù)能夠正常顯示,并且顯示的顏色會(huì)隨著頁面下方的閾值范圍而變化;同時(shí)下方的表格也會(huì)記錄接收到的數(shù)據(jù)。改變溫濕度適宜范圍時(shí),系統(tǒng)可以將數(shù)據(jù)同步至數(shù)據(jù)庫并提示同步成功,如圖19、圖20 所示。
圖17 登錄頁面
圖18 數(shù)據(jù)監(jiān)控頁
圖19 開始監(jiān)控界面
圖20 更新并同步溫濕度適宜范圍
在導(dǎo)航欄選擇進(jìn)入數(shù)據(jù)觀測(cè)頁,首先看到的是默認(rèn)加載每頁五條數(shù)據(jù),并用不同顏色的標(biāo)簽組件標(biāo)識(shí)了每條數(shù)據(jù)的不同狀態(tài),比如正常狀態(tài)為綠色,異常狀態(tài)為黃色,如圖21所示。同時(shí),可通過表格上方的檢索框檢索出想要的數(shù)據(jù),如圖22 所示,檢索出狀態(tài)正常、溫度為25℃、濕度為81%的所有數(shù)據(jù);也可以通過時(shí)間段檢索出指定時(shí)間段的數(shù)據(jù),如圖23 所示。
圖21 數(shù)據(jù)觀測(cè)頁
圖22 狀態(tài)和數(shù)值檢索
圖23 時(shí)間段檢索
本系統(tǒng)是對(duì)個(gè)別環(huán)境監(jiān)測(cè)對(duì)象(溫濕度)進(jìn)行監(jiān)測(cè)并將數(shù)據(jù)接入阿里云IoT,阿里云IoT 將數(shù)據(jù)轉(zhuǎn)發(fā)至服務(wù)器后臺(tái)管理系統(tǒng)的工作流程及解決方案的開發(fā)案例,重點(diǎn)介紹和分析了下位機(jī)以及后臺(tái)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)方式,如下位機(jī)各功能模塊如何使用Arduino IDE 進(jìn)行開發(fā),后臺(tái)管理系統(tǒng)頁面跳轉(zhuǎn)、異步數(shù)據(jù)請(qǐng)求和界面UI 的設(shè)計(jì)與實(shí)現(xiàn)等。
本系統(tǒng)后臺(tái)管理系統(tǒng)所使用的的技術(shù)棧皆為目前主流技術(shù),在行業(yè)內(nèi)被大量應(yīng)用于實(shí)際項(xiàng)目的開發(fā)。本系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)為環(huán)境監(jiān)測(cè)及物聯(lián)網(wǎng)應(yīng)用提供了一個(gè)可行且技術(shù)棧為目前主流技術(shù)的解決方案及項(xiàng)目實(shí)施過程[10],進(jìn)一步推進(jìn)我國(guó)環(huán)境監(jiān)測(cè)系統(tǒng)的發(fā)展,增加物聯(lián)網(wǎng)應(yīng)用場(chǎng)景案例。