梁澤東,吳祖賢,張海強(qiáng)
(1.北方民族大學(xué)電氣信息工程學(xué)院,銀川750021;2.北方民族大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院,銀川750021;3.北方民族大學(xué)電氣信息工程學(xué)院,銀川750021)
當(dāng)代智慧農(nóng)業(yè)、化工廠及人們的生活出行對(duì)氣象數(shù)據(jù)的要求越來(lái)越高,小型氣象站更加受到人們的重視。物聯(lián)網(wǎng)技術(shù)發(fā)展使得小型氣象站的信息傳遞和存儲(chǔ)變得十分便捷。為了有效提高物聯(lián)網(wǎng)產(chǎn)品開(kāi)發(fā)的效率出現(xiàn)了物聯(lián)網(wǎng)平臺(tái),這個(gè)氣象站建立在阿里云物聯(lián)網(wǎng)平臺(tái)上,利用平臺(tái)的接口完成App制作和網(wǎng)頁(yè)的構(gòu)建,同時(shí)還可以完成大屏展示和遠(yuǎn)程控制。相比NBIoT這個(gè)氣象站連接校園網(wǎng)即可快速進(jìn)行數(shù)據(jù)交換,又無(wú)需另外購(gòu)買(mǎi)NB卡及套餐。氣象站用AMQP協(xié)議傳輸數(shù)據(jù)到數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)可以實(shí)時(shí)接收數(shù)據(jù)并完成分析,比以往的Tomcat部署Web應(yīng)用速度更快操作更加簡(jiǎn)單。
氣象站可以分為硬件采集上傳部分、云平臺(tái)流轉(zhuǎn)數(shù)據(jù)和顯示與控制部分、ECS數(shù)據(jù)存儲(chǔ)分析部分、流通協(xié)議部分。硬件采集數(shù)據(jù)后用輕量級(jí)消息傳輸協(xié)議MQTT[1]連接云平臺(tái),用JSON數(shù)據(jù)交換格式完成硬件與平臺(tái)的信息翻譯。云平臺(tái)和ECS主機(jī)之間用高級(jí)消息隊(duì)列協(xié)議AMQP完成平臺(tái)和ECS主機(jī)之間大量的信息交流。云平臺(tái)是數(shù)據(jù)的中樞,接收硬件數(shù)據(jù)也可以控制硬件。平臺(tái)數(shù)據(jù)流向App和網(wǎng)頁(yè)顯示,也流向建立在云主機(jī)上的數(shù)據(jù)庫(kù)進(jìn)行分析。基于平臺(tái)的App和網(wǎng)頁(yè)實(shí)時(shí)顯示采集數(shù)據(jù)和分析數(shù)據(jù)。

圖1 氣象站系統(tǒng)原理圖
主控:采用NodeMCU作為主控部分,它是ESP8266 SOC上燒錄了NodeMCU固件,可以用Lua語(yǔ)言開(kāi)發(fā)。如果熟悉Arduino可以用Arduino IDE直接開(kāi)發(fā),相當(dāng)于直接操作固件調(diào)用芯片內(nèi)部資源。ESP8266內(nèi)置超低功耗Tensilica L106 32-bit RISC處理器,CPU時(shí)鐘速度最高可達(dá)160MHz,支持完整的TCP/IP協(xié)議棧。NodeMCU連入校園網(wǎng),使用阿里云提供的SDK實(shí)現(xiàn)MQTT協(xié)議連接物聯(lián)網(wǎng)平臺(tái),發(fā)布和訂閱的數(shù)據(jù)都用JSON格式解析。NodeMCU利用校園內(nèi)便利的校園網(wǎng)資源,連接校園Wi-Fi發(fā)送溫濕度、風(fēng)力大小等天氣數(shù)據(jù),接收平臺(tái)傳來(lái)的控制信息,根據(jù)季節(jié)情況改變選擇使用的傳感器種類(lèi),合理調(diào)整上傳頻率節(jié)約平臺(tái)流量。
溫濕度檢測(cè):DHT11是數(shù)字溫濕度傳感器,內(nèi)部自帶處理芯片進(jìn)行AD轉(zhuǎn)化。主控模塊采集的是數(shù)字信號(hào),減輕主控芯片的數(shù)據(jù)處理壓力,增加氣象站系統(tǒng)硬件反應(yīng)速度。模塊內(nèi)部含一個(gè)電阻式感濕元件和一個(gè)NTC測(cè)溫元件,測(cè)量范圍是濕度20~90%RH,溫度0~50℃。檢測(cè)溫濕度對(duì)采集速度沒(méi)有過(guò)高要求,所以傳感器選擇中心在于準(zhǔn)確度[2]。DHT11不能檢測(cè)零下溫度,考慮到氣象信息的實(shí)際情況,氣象站需要進(jìn)行硬件調(diào)整。云平臺(tái)可以控制硬件的活動(dòng),在溫度低時(shí)啟用DS18B20溫度傳感器。
風(fēng)力檢測(cè):三杯風(fēng)速傳感器采用優(yōu)質(zhì)鋁合金型材,表面經(jīng)電鍍噴塑處理,內(nèi)部經(jīng)過(guò)防水處理。小型直流有刷電機(jī)連接三杯旋轉(zhuǎn)軸,產(chǎn)生的電壓近似與風(fēng)速成正比。電壓采集采用歸一化處理之后代入公式計(jì)算風(fēng)力。在氣象站中風(fēng)力傳感器應(yīng)該置于高處,所以采用RS-485遠(yuǎn)距離通訊減少誤差。
輸出電壓與風(fēng)速的關(guān)系:

風(fēng)速 S(m/s),電壓 V(mv)。
雨量監(jiān)測(cè):雨量傳感器由一個(gè)雨滴接收板和一個(gè)電壓比較電路組成,接收板連接在比較器的電阻上,雨水降落在擋板上改變電阻阻值從而改變電壓。接收板面積加大,擺放時(shí)與水平面盡量平行來(lái)減小誤差。雨量檢測(cè)經(jīng)過(guò)測(cè)試得出表1。

表1 雨量與傳感器采集值關(guān)系表
PM2.5檢測(cè):采用激光PM2.5檢測(cè)系統(tǒng),由于激光的高方向性和高相干性,激光技術(shù)在測(cè)量及傳感領(lǐng)域有很大的應(yīng)用前景[3]。氣象站的激光發(fā)生端安裝風(fēng)扇提供穩(wěn)定的氣流,摻雜各種微粒的氣流經(jīng)過(guò)時(shí)發(fā)生散射,接收端進(jìn)行光電轉(zhuǎn)化并放大電信號(hào),經(jīng)過(guò)AD處理輸出數(shù)字信號(hào)。NodeMCU采集到數(shù)字信號(hào)后上傳平臺(tái),平臺(tái)時(shí)刻展示PM2.5數(shù)據(jù)數(shù),數(shù)據(jù)分析對(duì)比之后發(fā)送信息給平臺(tái)提示人們出門(mén)佩戴口罩的情況。
物聯(lián)網(wǎng)平臺(tái)作為數(shù)據(jù)流轉(zhuǎn)中間環(huán)節(jié),可以把實(shí)時(shí)數(shù)據(jù)流轉(zhuǎn)到App、網(wǎng)頁(yè)、數(shù)據(jù)庫(kù)。硬件、平臺(tái)、顯示、數(shù)據(jù)庫(kù)存儲(chǔ)的基礎(chǔ)是MQTT協(xié)議的topic[4]即數(shù)據(jù)流通的屬性名。在物聯(lián)網(wǎng)平臺(tái)設(shè)計(jì)網(wǎng)頁(yè)和App應(yīng)用并鏈接到自己的網(wǎng)址下,App和網(wǎng)頁(yè)的制作是簡(jiǎn)單的圖形拼接,用不同的模塊組合完成數(shù)據(jù)顯示清洗功能,不涉及復(fù)雜的編程,這樣在滿足需求的前提下大大提高了效率。App和網(wǎng)頁(yè)設(shè)計(jì)時(shí)都可以添加硬件控制組件,當(dāng)季節(jié)變化時(shí)合理控制硬件上傳頻率和溫度傳感器的配合情況。氣象站利用平臺(tái)的接口把需要實(shí)時(shí)顯示的數(shù)據(jù)在網(wǎng)頁(yè)和App上顯示,同時(shí)平臺(tái)接收ECS數(shù)據(jù)庫(kù)分析結(jié)果的信息也可以顯示。人們看到信息實(shí)時(shí)變化的同時(shí),還能看到穿衣指數(shù)、是否需戴口罩等提示。
為了對(duì)采集的氣象數(shù)據(jù)做全面的分析并能夠存到本地的存儲(chǔ)設(shè)備中,氣象站把數(shù)據(jù)流轉(zhuǎn)到自己的數(shù)據(jù)庫(kù)中,ECS云主機(jī)上建立SQL Server數(shù)據(jù)庫(kù),配置管理權(quán)限和登錄信息。基于數(shù)據(jù)庫(kù)的分析程序可以隨時(shí)接收、分析、發(fā)布消息,云上數(shù)據(jù)庫(kù)操作和普通的數(shù)據(jù)庫(kù)一樣。在云主機(jī)上安裝IntelliJ IDEA配置JDK1.8環(huán)境。運(yùn)行Apache Qpid JMS客戶端,用標(biāo)準(zhǔn)化的消息中間件AMQP協(xié)議完成平臺(tái)和ECS的大量數(shù)據(jù)交換。數(shù)據(jù)存儲(chǔ)于數(shù)據(jù)庫(kù)中,使用Java持久層框架MyBatis進(jìn)行數(shù)據(jù)操作,建立數(shù)學(xué)模型結(jié)合大量的數(shù)據(jù)統(tǒng)計(jì)出當(dāng)天及以后幾天的數(shù)據(jù)走勢(shì)。ECS發(fā)送信息給平臺(tái)在App和網(wǎng)頁(yè)顯示完成預(yù)報(bào)。PM2.5檢測(cè)到的測(cè)量值較大并持續(xù)增加時(shí),ECS發(fā)送信息給物聯(lián)網(wǎng)平臺(tái)在顯示界面提示戴口罩。數(shù)據(jù)把空間存滿時(shí),把數(shù)據(jù)備份到本地并刪除云端數(shù)據(jù)。
交流就需要媒介,軟件在網(wǎng)上交流擺脫了時(shí)間空間限制,用標(biāo)準(zhǔn)化的協(xié)議統(tǒng)一各方語(yǔ)言。JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,為機(jī)器解析和生成提供便利,并有效地提升網(wǎng)絡(luò)傳輸效率。NodeMC上傳數(shù)據(jù)時(shí)把字符串轉(zhuǎn)換為平臺(tái)的數(shù)據(jù)格式。平臺(tái)操縱硬件時(shí),
JSON可以將JavaScript對(duì)象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串,在硬件程序中傳遞字符串[5]。MQTT是一種發(fā)布/訂閱輕量級(jí)的消息傳輸協(xié)議,為網(wǎng)絡(luò)受限設(shè)備傳輸數(shù)據(jù)提供有力保障。AMQP高級(jí)消息隊(duì)列協(xié)議,是一個(gè)標(biāo)準(zhǔn)化的消息中間件協(xié)議。MQTT完成硬件和平臺(tái)的信息交流,AMQP完成平臺(tái)和ECS數(shù)據(jù)庫(kù)信息交流。他們連接的兩端都互為生產(chǎn)者和消費(fèi)者,進(jìn)行相互之間的交流。單片機(jī)的處理能力較差選擇輕量級(jí)的MQTT協(xié)議,平臺(tái)和數(shù)據(jù)庫(kù)間信息交換量巨大傳輸速度快,選擇性能較強(qiáng)的AMQP協(xié)議。
氣象站的軟件有本地的Arduino IDE和云服務(wù)器上的IntelliJ IDEA及SQL Server。Arduino語(yǔ)言基于Wiring語(yǔ)言開(kāi)發(fā),簡(jiǎn)單易學(xué)[6]。硬件部分的程序包括數(shù)據(jù)采集、連接Wi-Fi、數(shù)據(jù)發(fā)布和訂閱、JSON解析。風(fēng)力檢測(cè)、雨滴傳感器用Arduino模擬量讀取進(jìn)行AD轉(zhuǎn)化,DHT11、DS18B20和PM2.5傳感器發(fā)送數(shù)字信號(hào),NodeMCU用數(shù)字量讀取。程序完成其他功能有相應(yīng)的SDK,例如MQTT協(xié)議使用aliyun_mqtt.h實(shí)現(xiàn)。云主機(jī)上安裝JDK1.8環(huán)境,打開(kāi)IntelliJ IDEA創(chuàng)建Maven項(xiàng)目,添加Apache Qpid JMS客戶端和其他依賴,進(jìn)行數(shù)據(jù)流轉(zhuǎn)。通過(guò)數(shù)學(xué)期望模型處理數(shù)據(jù)庫(kù)數(shù)據(jù),將未來(lái)天氣狀況進(jìn)行評(píng)估。

圖2 采集上傳程序
云平臺(tái)為物聯(lián)網(wǎng)應(yīng)用提供便利,為合理利用平臺(tái)的流量資源通過(guò)平臺(tái)可以控制硬件,以不同的頻率調(diào)用不同的硬件上傳數(shù)據(jù)。物聯(lián)網(wǎng)的云上氣象站系統(tǒng)完成數(shù)據(jù)的自動(dòng)采集,自動(dòng)分析,實(shí)時(shí)顯示。物聯(lián)網(wǎng)技術(shù)將會(huì)在未來(lái)氣象、農(nóng)業(yè)、工業(yè)生產(chǎn)中發(fā)揮巨大的作用。物聯(lián)網(wǎng)應(yīng)用普遍分為硬件采集信號(hào)部分,硬件聯(lián)網(wǎng)上傳部分,網(wǎng)絡(luò)端數(shù)據(jù)流轉(zhuǎn)部分,應(yīng)用分析部分。技術(shù)發(fā)展需要細(xì)化工作任務(wù),云平臺(tái)正式基于這個(gè)背景下的產(chǎn)物,物聯(lián)網(wǎng)發(fā)展需要模塊化。

圖3 數(shù)據(jù)處理程序

圖4 溫濕度部分實(shí)時(shí)顯示(網(wǎng)頁(yè)端)