趙江武+高濤+陳教料+王彪
doi:10.15889/j.issn.1002-1302.2017.13.052[HT9.]
摘要:針對溫室遠程監(jiān)控的需要,提出一種以Android平臺智能設備為終端的溫室監(jiān)控系統(tǒng)設計方案。系統(tǒng)由基于控制器局域網(wǎng)絡(controller area network,CAN)總線的嵌入式子系統(tǒng)、溫室本地服務器和Android客戶端等3部分組成。基于CAN總線的嵌入式系統(tǒng)用于環(huán)境數(shù)據(jù)的采集和設備控制;溫室本地服務器采用Java開發(fā)的監(jiān)控主程序來處理、傳輸溫室采集的數(shù)據(jù),實現(xiàn)溫室的本地監(jiān)控;Android客戶端采用基于Java開發(fā)的監(jiān)控終端程序實現(xiàn)對溫室的遠程移動監(jiān)控。結果表明,基于Android平臺的溫室監(jiān)控系統(tǒng)能可靠地實現(xiàn)對溫室內環(huán)境的監(jiān)控。溫室作業(yè)人員能夠通過本系統(tǒng)實現(xiàn)對溫室高效、優(yōu)質調控。
關鍵詞:溫室;智能監(jiān)控;Android;遠程移動
中圖分類號: TP277.2;S126文獻標志碼: A[HK]
文章編號:1002-1302(2017)13-0189-04[HS)][HT9.SS]
收稿日期:2016-04-05
基金項目:國家自然科學基金(編號:61374094)。
作者簡介:趙江武(1990—),男,浙江溫州人,碩士研究生,主要從事農業(yè)工程研究。E-mail:zhaogghg@126.com。
通信作者:陳教料,博士,副教授,主要從事農業(yè)工程研究。E-mail:jlchen@zjut.edu.cn。
[ZK)]
當前,隨著國內溫室大棚的迅速增多,為提高農作物生產效率,增加經(jīng)濟收入,溫室大棚的自動化測量、自動化控制成為實現(xiàn)溫室優(yōu)質、高產的發(fā)展方向。為實現(xiàn)低耗、高產、優(yōu)質的現(xiàn)代溫室生產形式,研究對溫室內環(huán)境的高效調控是非常必要的,這對溫室控制技術和理論都提出了更高的要求。
隨著傳感器技術、計算機控制、網(wǎng)絡通信以及嵌入式系統(tǒng)等技術的快速發(fā)展,融合上述高新技術的溫室監(jiān)控系統(tǒng)逐漸被應用到溫室監(jiān)控領域[1-3]。馬增煒等設計了基于Wi-Fi網(wǎng)絡的溫室環(huán)境遠程監(jiān)控系統(tǒng)[4]。溫室環(huán)境監(jiān)控系統(tǒng)是提高溫室作物產量、降低溫室能耗、減少勞動力成本的關鍵技術,代表了溫室生產的核心競爭力。隨著移動互聯(lián)網(wǎng)技術和通信技術的發(fā)展,Android平臺已經(jīng)成為智能手機中用戶量最多的操作系統(tǒng),且能提供良好的人機界面[5]。已有一些研究者將Android系統(tǒng)應用到溫室環(huán)境的監(jiān)控中,如陳美鎮(zhèn)等利用異構網(wǎng)絡來監(jiān)控溫室網(wǎng)關數(shù)據(jù)[6]及陳大鵬等基于Android平臺設計的溫室環(huán)境遠程監(jiān)控系統(tǒng)[7]等。
本研究設計一種基于Android平臺的溫室監(jiān)控系統(tǒng),該系統(tǒng)能實現(xiàn)溫室環(huán)境參數(shù)的自動采集、實時顯示及溫室現(xiàn)場設備的控制,并結合Android平臺的移動便攜性優(yōu)勢,實現(xiàn)溫室的遠程移動監(jiān)控。
1溫室監(jiān)控系統(tǒng)方案
本研究的溫室監(jiān)控系統(tǒng)總體上可分為3部分,即基于CAN總線的嵌入式系統(tǒng)、溫室本地服務器和Android客戶端(圖1)。各部分子系統(tǒng)相對獨立,溫室本地服務器作為系統(tǒng)的中間部分分別與處在系統(tǒng)兩端的嵌入式系統(tǒng)和Android客戶端交互,依賴聚合性較低,具有良好的可擴展性。
基于CAN總線的嵌入式系統(tǒng)主要負責溫室數(shù)據(jù)(如溫度、濕度、風速、光照、土壤水分等溫室信息)的采集,并對溫室環(huán)境各子系統(tǒng)的繼電器進行控制,繼電器的相應動作控制著溫室環(huán)境調控設備(風機、天窗、加熱器、濕簾等)的啟停。嵌入式系統(tǒng)分為4層:(1)各個溫室的傳感器和控制執(zhí)行器的設備層,負責溫室數(shù)據(jù)、作物數(shù)據(jù)的采集和溫室的機構控制;(2)設備層節(jié)點的CAN接口模塊與嵌入式系統(tǒng)連接的CAN總線層,負責將分散在溫室各處的傳感器和環(huán)境控制執(zhí)行器與嵌入式系統(tǒng)進行通信;(3)嵌入式系統(tǒng)的現(xiàn)場監(jiān)控層;(4)溫室本地服務器的中央監(jiān)控層。嵌入式系統(tǒng)通過局域網(wǎng)實現(xiàn)與溫室群中央服務器的TCP/IP協(xié)議通信。溫室環(huán)境由現(xiàn)場監(jiān)控層嵌入式系統(tǒng)進行控制,也可以由溫室中央監(jiān)控主機進行跨級監(jiān)控。
[FK(W16][TPZJW1.tif][FK)]
溫室本地服務器主要負責數(shù)據(jù)的傳輸和處理。基于CAN總線的嵌入式系統(tǒng)向溫室本地服務器發(fā)送采集的數(shù)據(jù)并接受服務器的控制指令。本地服務器將采集的溫室數(shù)據(jù)進行存儲并通過網(wǎng)絡服務器發(fā)送至Android客戶端。Android客戶端通過移動網(wǎng)絡與服務器通信,溫室作業(yè)人員即可在溫室監(jiān)控系統(tǒng)的Android客戶端上實現(xiàn)對溫室的遠程信息采集、數(shù)據(jù)查詢、設備控制等功能。
[WTHZ]2Android客戶端的設計與實現(xiàn)
Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要用于移動設備,如智能手機和平板電腦。Android系統(tǒng)支持觸屏、音頻、視頻等功能,在眾多嵌入式系統(tǒng)領域被廣泛應用,如采用Android手機作為機器人操作控制器、飛行器攝像的顯示端、智能家居的控制端等[8]。考慮到Android平臺的普及性和Android應用人性化的人機交互界面等優(yōu)點,采用具有Android平臺的手機和智能平板電腦作為溫室監(jiān)控系統(tǒng)的遠程終端,以實現(xiàn)對溫室的遠程移動監(jiān)控。
2.1客戶端設計
采用C/S模式設計溫室監(jiān)控系統(tǒng)Android客戶端,通過移動網(wǎng)絡與服務器建立連接,以實現(xiàn)對溫室本地服務器數(shù)據(jù)庫的實時讀取和遠程控制模塊的訪問。圖2顯示了Android客戶端登錄模塊、主界面模塊、溫室環(huán)境數(shù)據(jù)模塊、溫室控制模塊的主要程序流程。[FL)]
[FK(W25][TPZJW2.tif][FK)]
[FL(2K2]Android客戶端的設計邏輯如圖3所示。主要分為4個層面。
2.1.1人機交互表層人機交互表層主要負責向用戶輸出溫室狀態(tài)信息并接受用戶輸入的控制信息。主要包括:(1)如用戶登錄、溫室監(jiān)控數(shù)據(jù)顯示、視頻監(jiān)控等的Activity類。(2)Actitity加載的XML布局文件,按鈕對應的ButtonView和文本對應的TextView等。(3)自定義控件和重寫控件包括列表ListView、彈出窗口Popwindow、自定義適配器Adapter等。endprint
2.1.2邏輯業(yè)務層邏輯業(yè)務層主要處理輸入和輸出的信息,處在人機交互表層和數(shù)據(jù)交換層之間,在數(shù)據(jù)交換和處理中起承上啟下的作用。主要包括:(1)在后臺運行的系統(tǒng)服務Service,主要負責收到網(wǎng)絡通信時的事件處理。(2)負責在Activity和Service之間發(fā)送廣播和通知的Broadcast。(3)對人機交互層輸入控件的監(jiān)聽,如當用戶按下按鈕時,監(jiān)聽到輸入控制信息并采取相應的邏輯操作。
2.1.3數(shù)據(jù)訪問層主要負責處理用戶本身操作產生的控制數(shù)據(jù)和從服務器獲取的遠程數(shù)據(jù),這些數(shù)據(jù)需要在Android設備本地存儲,數(shù)據(jù)量大,數(shù)據(jù)類目多。數(shù)據(jù)訪問層采用關系型數(shù)據(jù)庫MySQL,支持多線程,優(yōu)化SQL查詢方法,有效地提高查詢速度。實現(xiàn)用戶查找數(shù)據(jù)表的選擇、插入、更新和刪除的操作。
2.1.4通信層負責Android客戶端與服務器之間的通信,主要包括:(1)Socket套接字通信方式。(2)傳輸控制協(xié)議(transmission control protocol,TCP)與服務器進行長連接指令操作,通過服務器和客戶端之間一問一答的形式實現(xiàn)數(shù)據(jù)交換。(3)無連接的用戶數(shù)據(jù)報協(xié)議(user datagram protocol,UDP)用于處理視頻、語音等數(shù)據(jù)包。相較于TCP協(xié)議,UDP負載比較小,可以避免流量堵塞。
2.2服務器程序設計
溫室本地服務器根據(jù)采集到的環(huán)境信息和植物的生長需求對環(huán)境進行調控,具有對溫室數(shù)據(jù)存儲、傳輸和調控管理功能。
服務器軟件采用C/S架構,基于Java和結構化查詢語言(structured query language,SQL)開發(fā),適用于Windows XP、Windows 7等操作系統(tǒng)。監(jiān)控數(shù)據(jù)和控制指令等數(shù)據(jù)通過本地SQL Server數(shù)據(jù)庫進行存儲,經(jīng)服務器一同傳送至Android客戶端。當溫室監(jiān)控系統(tǒng)使用Android作為監(jiān)測控制端時,Android客戶端實時接收來自服務器的溫室信息數(shù)據(jù),刷新客戶端顯示。當接收到用戶的控制操作時,Android客戶端把控制指令和數(shù)據(jù)通過服務器發(fā)送給溫室現(xiàn)場設備層,進行具體的溫室環(huán)境控制,以實現(xiàn)Android端對溫室的遠程控制。
2.3服務器通信
Android客戶端需要顯示如溫室內外溫度、濕度等的溫室狀態(tài),另外需要向溫室服務器發(fā)送控制指令,這些功能的實現(xiàn)需要客戶端與服務器之間的遠程通信。本研究設計的服務器與Android客戶端采用Socket通信機制。Socket的主要特點是數(shù)據(jù)丟失率低、使用簡單且易于移植。在雙方建立起連接后可以直接進行數(shù)據(jù)傳輸,在連接時可實現(xiàn)信息的主動推送,而不需要每次由客戶端向服務器發(fā)送請求[9]。網(wǎng)絡由下往上分為物理層、數(shù)據(jù)鏈路層、網(wǎng)絡層、傳輸層、會話層、表示層和應用層。IP協(xié)議對應于網(wǎng)絡層,TCP協(xié)議對應于傳輸層(圖4)。而Socket則是對TCP/IP協(xié)議的封裝和應用,本身并不是協(xié)議,而是一個調用接口(API)。服務器程序通過調用Socket把數(shù)據(jù)通過TCP的面向連接與客戶端進行數(shù)據(jù)交互。
[FK(W8][TPZJW4.tif][FK)]
客戶端進程與服務器進程之間通信的Socket的連接過程可以分為4個步驟(圖5)。
服務監(jiān)聽:服務器端Socket()并不連接具體的客戶端Socket(),而是處于等待連接、實時監(jiān)控連接端口的狀態(tài)。服務器在創(chuàng)建Socket()后,要指派監(jiān)聽的端口等待客戶端請求,因此需要綁定端口號的操作Bind()。綁定之后,服務器處于監(jiān)聽狀態(tài),設置1個監(jiān)聽程序Listen(),等待客戶機連接綁定的端口。Accept()方法用于接收客戶端的數(shù)據(jù)。在沒有數(shù)據(jù)進行接收時處于堵塞狀態(tài),一旦接收到客戶端的連接請求Connect()后,即成功建立通信。
客戶端請求:由客戶端的套接字提出連接請求Connect(),要連接的目標是服務器端的Socket()。為此,客戶端的Socket()必須先描述它要連接服務器的Socket(),指定服務器端Socket()的IP地址和端口地址,然后向服務器端套接字提出連接請求Connect()。
連接確認:當服務器端監(jiān)聽到或者接收到客戶端的連接請求Connect時,響應客戶端的請求執(zhí)行Listen(),建立一個新的線程,把服務器端Socket()的描述發(fā)給客戶端。一旦客戶端確認描述,連接即建立完成。而服務器端Socket()繼續(xù)處于監(jiān)聽狀態(tài),以接收其他客戶端套接字的連接請求。
在成功建立通信后,可以通過Read()和Write()進行收發(fā)數(shù)據(jù)的讀寫。在服務器Read()后,進行相應的處理,把處理結果Write()給客戶端,客戶端Read()到服務器發(fā)送的應答數(shù)據(jù),客戶端與服務器之間即完成一次通信。繼續(xù)通信則執(zhí)行Write()和Read()即可,通信結束則執(zhí)行Close()斷開連接。
[FK(W16][TPZJW5.tif][FK)]
[WTHZ]3Android客戶端開發(fā)與調試
在Windows系統(tǒng)下利用Eclipse+SDK(Software development kit)+ADT(Android development tools)進行溫室監(jiān)控系統(tǒng)Android客戶端的開發(fā),將開發(fā)完成生成的APK(Android package)安裝到Android手機或平板電腦中。
打開應用,在登錄界面(圖6-a)輸入用戶賬號、密碼和服務器對應的IP地址和端口后,登錄成功則界面跳轉到圖6-b所示的溫室監(jiān)控系統(tǒng)主界面。點擊主界面下列的按鈕跳轉到相應的功能界面,主要的功能有溫室環(huán)境監(jiān)控數(shù)據(jù)的查看、溫室遠程控制、作物生態(tài)信息的實時查看、歷史信息回顧和用戶個人信息設置等功能。圖6-c所示的溫室狀態(tài)信息為溫室本地設備層各CAN節(jié)點傳感器所采集的實時數(shù)據(jù),包括室內溫度、濕度、CO2濃度、室外溫度、風速和光照度等。通過選擇勾選節(jié)點,客戶端會每隔5 min實時刷新該界面或者用戶點擊刷新按鈕手動刷新數(shù)據(jù)。選中對應的狀態(tài)數(shù)據(jù)再點擊詳情按鈕,即會彈出各觀測點的詳細數(shù)據(jù)。程序接收到刷新任務,向服務器發(fā)送TCP請求,并設置新的等待進程和監(jiān)聽任務。當程序接受到服務的TCP應答返回時,將返回數(shù)據(jù)進行解析并存儲,然后刷新對應的溫室環(huán)境信息。[FL)]endprint
[FK(W17][TPZJW6.tif;S+2mm][FK)]
[FL(2K2]圖6-d所示的是用戶實現(xiàn)遠程控制的溫室遠程控制界面,通過選擇各CAN節(jié)點的開啟關閉狀態(tài),進行是否遠程控制的選擇。詳細的控制操作通過點擊控制按鈕跳轉到相應的控制子系統(tǒng),如灌溉系統(tǒng)、通風系統(tǒng)、光照系統(tǒng)、加熱系統(tǒng)、補光系統(tǒng)等。點擊查看以往數(shù)據(jù)按鈕,則會跳出歷史溫室內環(huán)境數(shù)據(jù)等信息。通過歷史溫室觀察數(shù)據(jù),用戶可以更好地制定溫室控制策略,以達到相應的生產指標和經(jīng)濟效應。
4結論
本研究搭建的基于Android平臺的溫室監(jiān)控系統(tǒng),實現(xiàn)了對溫室內環(huán)境的本地以及遠程監(jiān)控,利用Android移動設備的可移動性和實時數(shù)據(jù)傳輸優(yōu)勢,避免了人工管理溫室無法實時監(jiān)控溫室的問題。根據(jù)監(jiān)控數(shù)據(jù)制定相應的溫室控制策略,可以實現(xiàn)溫室的優(yōu)質高效調控。
[HS2]參考文獻:
[1][ZK(#]韓華峰,杜克明,孫忠富,等. 基于ZigBee網(wǎng)絡的溫室環(huán)境遠程監(jiān)控系統(tǒng)設計與應用[J]. 農業(yè)工程學報,2009,25(7):158-163.
[2]張猛,房俊龍,韓雨. 基于ZigBee和Internet的溫室群環(huán)境遠程監(jiān)控系統(tǒng)設計[J]. 農業(yè)工程學報,2013,29(增刊1):171-176.[HJ1.93mm]
[3]秦琳琳,陸林箭,石春,等. 基于物聯(lián)網(wǎng)的溫室智能監(jiān)控系統(tǒng)設計[J]. 農業(yè)機械學報,2015,46(3):261-267.
[4]馬增煒,馬錦儒,李亞敏. 基于WIFI的智能溫室監(jiān)控系統(tǒng)設計[J]. 農機化研究,2011(2):154-157,162.
[5]韓劍,莫德清. 基于Android與GSM的溫室大棚遠程監(jiān)控系統(tǒng)[J]. 江蘇農業(yè)科學,2015,43(4):397-399.
[6]陳美鎮(zhèn),王紀章,李萍萍,等. 基于Android系統(tǒng)的溫室異構網(wǎng)絡環(huán)境監(jiān)測智能網(wǎng)關開發(fā)[J]. 農業(yè)工程學報,2015,31(5):218-225.
[7]陳大鵬,毛罕平,左志宇. 基于Android手機的溫室環(huán)境遠程監(jiān)控系統(tǒng)設計[J]. 江蘇農業(yè)科學,2013,41(9):375-379.
[8]李娜,周峰. 基于Android平臺軟件開發(fā)方法的研究[J]. 信息通信,2015(6):38-39.
[9]倪凱,夏海波,魏建明,等. 一種移動終端遠程數(shù)據(jù)訪問控制方法[J]. 計算機應用與軟件,2012,29(6):230-232.endprint