俞 聰,范 恩,俞哲彤,邱云明,胡珂立
(1.紹興文理學(xué)院,浙江 紹興 312000;2.深圳大學(xué) 物理與光電工程學(xué)院,廣東 深圳 518060)
利用物聯(lián)網(wǎng)技術(shù)對(duì)監(jiān)視環(huán)境中的物理量精確感知,并對(duì)數(shù)據(jù)進(jìn)行智能處理和可靠傳輸已成為一種重要的監(jiān)測(cè)手段[1-4]。在硬件方面,傳感器技術(shù)能夠?yàn)槲锫?lián)網(wǎng)提供便利的數(shù)據(jù)采集條件[5]。在軟件方面,Android技術(shù)和Web技術(shù)能夠?yàn)槲锫?lián)網(wǎng)提供便捷的編程方式、良好的用戶交互界面以及豐富的數(shù)據(jù)展現(xiàn)方式[6]。因此,物聯(lián)網(wǎng)系統(tǒng)被廣泛應(yīng)用于不同領(lǐng)域。目前,大多數(shù)物聯(lián)網(wǎng)系統(tǒng)搭建成本較高,擴(kuò)展性有待提高,且主要面向大平臺(tái)。面向小用戶、低成本的物聯(lián)網(wǎng)平臺(tái)技術(shù)仍十分缺乏[7]。
在實(shí)際環(huán)境監(jiān)測(cè)中,對(duì)溫濕度的實(shí)時(shí)測(cè)量和調(diào)控非常重要[8-10]。然而,應(yīng)用場(chǎng)景種類多、測(cè)量范圍廣、數(shù)據(jù)采集量大、實(shí)時(shí)性要求高,為傳統(tǒng)的人工監(jiān)測(cè)帶來(lái)一定困難。傳統(tǒng)人工測(cè)量主要利用傳感器采集數(shù)據(jù),采用人工分析,導(dǎo)致人力成本居高不下,同時(shí),人工分析具有明顯的滯后性,無(wú)法滿足實(shí)時(shí)性要求較高的監(jiān)測(cè)領(lǐng)域。雖然大型應(yīng)用系統(tǒng)會(huì)采用物聯(lián)網(wǎng)技術(shù)實(shí)現(xiàn)數(shù)據(jù)的采集、分析與監(jiān)測(cè),但搭建成本較高,使其應(yīng)用范圍受到很大約束。考慮到CC2530單片機(jī)在搭建傳感網(wǎng)絡(luò)方面的優(yōu)勢(shì)以及傳感器模塊成本低、數(shù)據(jù)采集方便等優(yōu)點(diǎn),選擇利用傳感器模塊和CC2530單片機(jī)搭建物聯(lián)網(wǎng)監(jiān)測(cè)平臺(tái)[11]。此外,考慮到Android智能手機(jī)的便攜性、可編程性及良好的用戶界面,以及Web程序的低成本、可操作性強(qiáng)等特點(diǎn),因此借助Android端、Web端實(shí)現(xiàn)監(jiān)測(cè)數(shù)據(jù)在無(wú)線平臺(tái)和有線平臺(tái)的可視化監(jiān)測(cè)[12-14]。
本文開(kāi)發(fā)了一套基于Android和Web平臺(tái)的溫濕度云端監(jiān)測(cè)系統(tǒng)。該系統(tǒng)首先利用搭載DHT11模塊的CC2530單片機(jī)實(shí)時(shí)采集溫濕度數(shù)據(jù),同時(shí)通過(guò)串口將監(jiān)測(cè)數(shù)據(jù)發(fā)送至PC主機(jī);然后在PC端編寫串口接收函數(shù)解析數(shù)據(jù),并上傳至云端MySQL數(shù)據(jù)庫(kù);最后,利用所開(kāi)發(fā)的Android程序和Web程序通過(guò)請(qǐng)求本地Apache服務(wù)器獲取云數(shù)據(jù)庫(kù)溫濕度數(shù)據(jù),分別在Android端和Web端繪制曲線。通過(guò)實(shí)測(cè)實(shí)驗(yàn),本系統(tǒng)能夠?qū)崿F(xiàn)監(jiān)測(cè)環(huán)境溫濕度數(shù)據(jù)的實(shí)時(shí)采集以及多樣化動(dòng)態(tài)圖表顯示,同時(shí)能夠?qū)崿F(xiàn)在不同時(shí)段對(duì)圖表的主動(dòng)或被動(dòng)更新,提高數(shù)據(jù)采集和分析效率。
為了降低溫濕度測(cè)量成本,減輕測(cè)量人員的監(jiān)測(cè)負(fù)擔(dān),系統(tǒng)將自動(dòng)完成監(jiān)測(cè)環(huán)境的溫濕度測(cè)量與數(shù)據(jù)傳輸,并通過(guò)Android平臺(tái)與Web瀏覽器實(shí)現(xiàn)無(wú)線環(huán)境和有線環(huán)境的溫濕度實(shí)時(shí)監(jiān)測(cè)。本系統(tǒng)主要包括以下功能:
(1)利用DHT11溫濕度傳感器實(shí)時(shí)采集溫濕度數(shù)據(jù),并通過(guò)串口發(fā)送至PC主機(jī);
(2)通過(guò)Java程序編寫串口數(shù)據(jù)接收窗體,同時(shí)將溫濕度數(shù)據(jù)上傳至云端MySQL數(shù)據(jù)庫(kù);
(3)本地上傳的數(shù)據(jù)由云端MySQL數(shù)據(jù)庫(kù)存儲(chǔ);
(4)Android APP程序通過(guò)請(qǐng)求本地的Apache服務(wù)器獲取云數(shù)據(jù)庫(kù)中的溫濕度數(shù)據(jù),通過(guò)動(dòng)態(tài)曲線實(shí)時(shí)顯示溫濕度變化情況;
(5)Web瀏覽器通過(guò)請(qǐng)求本地Apache服務(wù)器獲取云端數(shù)據(jù)后,在瀏覽器中以動(dòng)態(tài)曲線的形式實(shí)時(shí)顯示溫濕度變化情況。
如圖1所示,系統(tǒng)的搭建主要由6部分組成。

圖1 系統(tǒng)功能架構(gòu)
(1)搭載傳感器模塊的CC2530單片機(jī):該單片機(jī)采用C語(yǔ)言編程,使用IAR Systems公司開(kāi)發(fā)的IAR作為嵌入式開(kāi)發(fā)的編輯器,具有開(kāi)發(fā)套件齊全且調(diào)試方便等優(yōu)勢(shì)。
(2)PC串口接收窗體程序:使用Java語(yǔ)言編寫,采用IntelliJ IDEA作為代碼編輯器。
(3)騰訊云平臺(tái)MySQL數(shù)據(jù)庫(kù):配合Navicat作為數(shù)據(jù)管理工具,成本低廉且管理方便。
(4)Apache本地服務(wù)器:作為中間代理,部署方便,后臺(tái)使用PHP編程,編譯器為Visual Studio Code,負(fù)責(zé)編寫API數(shù)據(jù)調(diào)用接口。
(5)Android端APP:采用Android Studio作為開(kāi)發(fā)工具,以Java作為開(kāi)發(fā)語(yǔ)言。
(6)Web端程序:采用HTML+JS+CSS的形式,使用Visual Studio Code開(kāi)發(fā)。
為提高監(jiān)測(cè)平臺(tái)的擴(kuò)展性,數(shù)據(jù)表除了設(shè)計(jì)溫濕度字段外,還預(yù)留了空氣質(zhì)量字段,如圖2所示。此外,還可以根據(jù)實(shí)際需求添加一些需要輔助測(cè)量的數(shù)據(jù)字段,配合相關(guān)傳感器。通過(guò)數(shù)據(jù)庫(kù)能夠?qū)崿F(xiàn)采集數(shù)據(jù)的實(shí)時(shí)存儲(chǔ)與管理,滿足平臺(tái)后期的擴(kuò)展需求。

圖2 系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)
2.3.1 數(shù)據(jù)采集
考慮到CC2530單片機(jī)成本低、擴(kuò)展性好,故采用單片機(jī)搭建測(cè)量平臺(tái)。該平臺(tái)利用DHT11采集溫濕度數(shù)據(jù),傳感器配合CC2530單片機(jī)每5 s測(cè)量1次。然后,測(cè)量的溫濕度數(shù)據(jù)通過(guò)串口發(fā)送至PC端。
2.3.2 串口接收
在傳感器獲取數(shù)據(jù)后,通過(guò)串口將數(shù)據(jù)發(fā)送至PC端,在PC端使用Java編寫的串口接收窗體函數(shù)接收數(shù)據(jù)。當(dāng)窗體程序接收到數(shù)據(jù)時(shí),窗體函數(shù)可以實(shí)時(shí)顯示溫濕度數(shù)據(jù),同時(shí),窗體程序能夠在后臺(tái)對(duì)接收的數(shù)據(jù)采用正則表達(dá)式進(jìn)行清理和選取,并上傳至騰訊云端MySQL數(shù)據(jù)庫(kù),實(shí)現(xiàn)實(shí)時(shí)存儲(chǔ)。此外,該程序還預(yù)留了接口,可以連接本地?cái)?shù)據(jù)庫(kù),并將數(shù)據(jù)存儲(chǔ)在本地MySQL中。
2.3.3 本地服務(wù)器
由于Apache服務(wù)器部署方便、運(yùn)行穩(wěn)定,系統(tǒng)的本地服務(wù)器以其為基礎(chǔ)進(jìn)行布署。為了便于開(kāi)發(fā),選擇XAMPP集成開(kāi)發(fā)環(huán)境。圖3為服務(wù)器8080端口開(kāi)啟狀態(tài)。服務(wù)器端程序采用PHP開(kāi)發(fā),主要負(fù)責(zé)從云端MySQL數(shù)據(jù)庫(kù)獲取溫濕度數(shù)據(jù),再將其封裝成JSON格式的數(shù)據(jù),編寫API接口,方便Web瀏覽器或者Android客戶端通過(guò)訪問(wèn)獲取數(shù)據(jù)。

圖3 服務(wù)器端口開(kāi)啟狀態(tài)
2.3.4 Android端溫濕度實(shí)時(shí)監(jiān)控
Android客戶端通過(guò)第三方網(wǎng)絡(luò)通信框架Okhttp在局域網(wǎng)內(nèi)請(qǐng)求本地Apache服務(wù)器的API接口,并從接口中獲取JSON格式的數(shù)據(jù);成功獲取數(shù)據(jù)后,在后臺(tái)完成解析和匹配,并通過(guò)Android第三方圖表庫(kù)MPAndroidChart繪制溫濕度折線圖。圖4所示為APP的初始化狀態(tài)。

圖4 Android溫濕度監(jiān)控初始化
2.3.5 Web端溫濕度實(shí)時(shí)監(jiān)控
Web端程序采用HTML+CSS+JS實(shí)現(xiàn)頁(yè)面設(shè)計(jì),JS使用JQuery庫(kù)編寫Ajax,請(qǐng)求本地Apache服務(wù)器上的JSON數(shù)據(jù)。訪問(wèn)機(jī)制與Android端相似,數(shù)據(jù)來(lái)源于云端數(shù)據(jù)庫(kù)。采用JS圖表繪制庫(kù)HighCharts繪制折線圖,折線圖每秒自動(dòng)刷新一次。Web端程序的初始狀態(tài)如圖5所示。

圖5 Web溫濕度監(jiān)控初始化
完成物聯(lián)網(wǎng)平臺(tái)搭建后,將單片機(jī)控制程序燒錄至節(jié)點(diǎn)板;接通電源后,溫濕度采集節(jié)點(diǎn)開(kāi)始采集數(shù)據(jù),并向PC端程序發(fā)送采集的實(shí)時(shí)溫濕度數(shù)據(jù);同時(shí),在PC端運(yùn)行Java串口接收窗體程序,在窗體中可以顯示發(fā)送的溫濕度數(shù)據(jù),如圖6所示;最后,通過(guò)該程序后臺(tái)將數(shù)據(jù)上傳至云端MySQL數(shù)據(jù)庫(kù)。

圖6 串口數(shù)據(jù)接收測(cè)試結(jié)果
Android端APP是本系統(tǒng)的數(shù)據(jù)可視化模塊之一。在手機(jī)安裝該程序,與本地服務(wù)器處于同一局域網(wǎng)內(nèi),打開(kāi)APP后就可以向本地Apache服務(wù)器請(qǐng)求溫濕度數(shù)據(jù),并完成解析,同時(shí)將相關(guān)圖表呈現(xiàn)在屏幕上。如圖7所示,用戶點(diǎn)擊屏幕就可以刷新當(dāng)前數(shù)據(jù),數(shù)據(jù)自動(dòng)更新設(shè)定周期為5 s/次。

圖7 APP數(shù)據(jù)獲取結(jié)果
Web端監(jiān)控程序是本系統(tǒng)數(shù)據(jù)可視化模塊的另一部分。在同一局域網(wǎng)內(nèi),瀏覽器向服務(wù)器發(fā)起Ajax請(qǐng)求獲取數(shù)據(jù);完成數(shù)據(jù)解析后,在瀏覽器中以動(dòng)態(tài)折線圖的形式顯示。數(shù)據(jù)自動(dòng)更新周期設(shè)定為1 s/次。網(wǎng)頁(yè)端監(jiān)控只需運(yùn)行HTML頁(yè)面即可實(shí)現(xiàn)實(shí)時(shí)監(jiān)控。服務(wù)器返回?cái)?shù)據(jù)結(jié)果如圖8所示,Web數(shù)據(jù)獲取結(jié)果如圖9所示。

圖8 服務(wù)器返回?cái)?shù)據(jù)結(jié)果

圖9 Web數(shù)據(jù)獲取結(jié)果
溫濕度數(shù)據(jù)是環(huán)境監(jiān)測(cè)應(yīng)用中的重要參數(shù)。考慮到傳統(tǒng)人工監(jiān)測(cè)方式難以做到環(huán)境的實(shí)時(shí)監(jiān)測(cè)和數(shù)據(jù)的可視化,使得數(shù)據(jù)分析存在一定的滯后性;且隨著數(shù)據(jù)量的增大,數(shù)據(jù)管理十分困難。為此,本系統(tǒng)根據(jù)實(shí)際需求,開(kāi)發(fā)了一套基于多平臺(tái)的溫濕度云端監(jiān)測(cè)系統(tǒng)。該系統(tǒng)利用硬件實(shí)現(xiàn)對(duì)溫濕度的實(shí)時(shí)采集,利用軟件實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)和可視化。硬件部分采用搭載DHT11溫濕度傳感器的CC2530單片機(jī)采集溫濕度數(shù)據(jù),通過(guò)串口發(fā)送至PC主機(jī)監(jiān)測(cè)程序,監(jiān)測(cè)程序接收數(shù)據(jù)后上傳至云端MySQL數(shù)據(jù)庫(kù)。對(duì)于云端數(shù)據(jù),可以分別通過(guò)Android APP與Web程序訪問(wèn)本地Apache服務(wù)器,從而實(shí)現(xiàn)Android端、Web端的數(shù)據(jù)實(shí)時(shí)訪問(wèn),并通過(guò)折線圖動(dòng)態(tài)顯示,以方便用戶對(duì)數(shù)據(jù)進(jìn)行分析。因此,本文開(kāi)發(fā)的溫濕度監(jiān)測(cè)系統(tǒng)在環(huán)境監(jiān)測(cè)中具有一定的應(yīng)用價(jià)值和借鑒意義。同時(shí),由于CC2530單片機(jī)良好的網(wǎng)絡(luò)搭建能力以及MySQL數(shù)據(jù)庫(kù)友好的操作方式,使得該系統(tǒng)具有良好的可拓展性。