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

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

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

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

圖2 采集上傳程序
云平臺為物聯網應用提供便利,為合理利用平臺的流量資源通過平臺可以控制硬件,以不同的頻率調用不同的硬件上傳數據。物聯網的云上氣象站系統完成數據的自動采集,自動分析,實時顯示。物聯網技術將會在未來氣象、農業、工業生產中發揮巨大的作用。物聯網應用普遍分為硬件采集信號部分,硬件聯網上傳部分,網絡端數據流轉部分,應用分析部分。技術發展需要細化工作任務,云平臺正式基于這個背景下的產物,物聯網發展需要模塊化。

圖3 數據處理程序

圖4 溫濕度部分實時顯示(網頁端)