楊斌
(廣東東軟學院計算機學院電子信息工程 廣東省佛山市 528225)
我國是農業(yè)大國,隨著農業(yè)技術和信息技術的不斷進步,我國農業(yè)生產水平也在不斷取得突破性的發(fā)展。為了加強對農業(yè)生產的精準管理,必須構建融入網絡、嵌入式設備、移動終端等因素于一體的農業(yè)自動化監(jiān)控系統。
農業(yè)自動化監(jiān)控系統主要應用于農田灌溉、植物生態(tài)、水產養(yǎng)殖等對農業(yè)環(huán)境及農業(yè)生產狀況進行監(jiān)測與控制[1-4]。一般的農業(yè)自動化監(jiān)控系統主要由硬件系統和軟件系統兩部分構成,而硬件系統主要有無線或有線模塊、數據處理單元、數據存儲、傳感器控管矩陣和供電單元等,通過傳感器的節(jié)點來采集和傳輸農業(yè)監(jiān)控數據。軟件系統主要是按照不同的農業(yè)生產環(huán)境和狀況設計不同的軟件應用系統,通過對接收到的數據信息進行分析處理,結合農業(yè)專家信息和計算機方法實現農業(yè)的智能化操作和管理[5]。在傳統的農業(yè)自動化監(jiān)控系統中,存在著如下幾個問題:
(1)功能有限,主要是依賴于傳感器節(jié)點采集簡單的環(huán)境監(jiān)控數據,如溫度、濕度、光照等。
(2)系統體系結構無法適應移動終端要求。
(3)系統一般都是定制的,當有設備不同時需要重新研發(fā)應用系統。
為了解決以上問題,本文提出一種基于樹莓派的通用農業(yè)息采集和在線監(jiān)控系統的設計方案。數據采集部分的監(jiān)測軟件位于樹莓派上,軟件配置存儲于外部的配置文件中,僅需要修改配置文件就可部署于不同的應用場景。在線監(jiān)控部分部署在云服務器上,通過互聯網可以實時顯示監(jiān)測數據、傳感器狀態(tài)信息等功能,并用流媒體服務器配合樹莓派推送的視頻流實現了視頻的實時監(jiān)控功能。移動終端部分部署在手機上,與網站同步實現監(jiān)控數據的查詢,控制參數的設置等。整個系統具有成本低、功能全、獲取數據及時準確、操作簡便、可移植性強、配置方便等優(yōu)點。
基于樹莓派和云服務的通用農業(yè)在線監(jiān)控系統分為三部分:
(1)傳感器節(jié)點數據采集部分;
(2)傳感器信息的存儲、轉發(fā)和顯示的應用網站部分;
(3)移動終端的應用軟件部分。
數據采集部分由部署在樹莓派系統上的若干個傳感器節(jié)點和視頻采集節(jié)點組成的監(jiān)控節(jié)點構成。這些監(jiān)控節(jié)點通過網絡連接云端服務,向其傳送傳感器實時監(jiān)測數據和監(jiān)控視頻流數據并從云端服務處獲取包括手動控制和自動控制策略在內的環(huán)境控制指令,以控制環(huán)境調節(jié)設備的運行。除此以外,監(jiān)控節(jié)點也具有與用戶交互所需的屏幕,用戶可以通過與設備直接連接的本地屏幕查看實時環(huán)境數據和設置環(huán)境參數。

圖1:系統整體結構

圖2:監(jiān)控節(jié)點架構圖
云端后臺服務功能模塊包括監(jiān)控節(jié)點接口功能模塊、移動端應用軟件接口功能模塊和視頻監(jiān)控功能模塊。在本系統中,云端后臺服務主要實現數據存儲和數據轉發(fā)的功能,配合網站前端和移動端軟件實現數據的展示。數據存儲接收來自監(jiān)控節(jié)點的傳感器監(jiān)測數據、系統錯誤信息等數據,并將這些數據存入云端數據庫。用戶可以通過云端網站或者利用移動端應用軟件查看監(jiān)控節(jié)點上傳的傳感器監(jiān)測數據、環(huán)境調控執(zhí)行信息和系統錯誤信息等數據。遠程移動端軟件數據展示是通過云端網站的數據轉發(fā)實現的,這一部分同時接收來自移動端應用軟件的自動控制策略或手動控制指令并在監(jiān)控節(jié)點軟件訪問查詢時返回,以實現管理人員通過移動端應用軟件控制監(jiān)控節(jié)點環(huán)境調節(jié)設備的目的。

表1:配置文件參數表

表2:主線程信號與傳感器數據采集線程槽函數連接設計表

表3:傳感器數據采集線程信號與主線程槽函數連接設計表
云端后臺搭建了流媒體服務器,處理和分發(fā)監(jiān)控視頻流信號。用戶移動端應用軟件或者網站可以接收來自云端服務部分分發(fā)的監(jiān)控視頻流信號,實現對農田環(huán)境的視頻監(jiān)控。系統各個部分關系如圖1 所示。
監(jiān)控節(jié)點主控板采用樹莓派,具有傳感器數據采集與展示、傳感器數據上傳、環(huán)境調控設備控制、警告與通知短信發(fā)送、監(jiān)控視頻采集與發(fā)送等功能需求[6-8]。監(jiān)控節(jié)點的架構設計如圖2 所示。
其中,傳感器用于采集監(jiān)控環(huán)境的環(huán)境數據,環(huán)境調節(jié)設備用于調節(jié)監(jiān)控環(huán)境中的各種設備,如應用與魚塘的水體環(huán)境調節(jié)設備包括增氧機、水泵、投餌機等。短信發(fā)送模塊用于從監(jiān)控節(jié)點向管理人員發(fā)送環(huán)境調控通知、環(huán)境參數超限警告等需要及時通知管理人員的信息。可觸摸屏幕用于實時圖表顯示傳感器采集的環(huán)境數據,以及提供手動控制指令的人機交互接口,用于管理人員現場操作和控制環(huán)境調節(jié)設備。網絡連接設備用于監(jiān)控節(jié)點的聯網,為監(jiān)控節(jié)點與云端服務交互提供服務。主控板即為監(jiān)控節(jié)點的核心,連接設備并對設備進行控制,協調各設備運行以滿足設計需求,實現應用環(huán)境監(jiān)控的目的[9]。
3.2.1 配置文件載入模塊
配置文件模塊控制系統硬件和軟件結合部分的初始化,初始化完成之后,監(jiān)控節(jié)點才能開始工作。為了讓應用系統不用針對傳感器等硬件部件不同而修改軟件系統,將所有硬件的配置信息存儲于配置文件中,當更換不同硬件時只需自動載入配置文件。
監(jiān)控節(jié)點使用基于Linux 的Raspbian 作為操作系統,使用C++ Qt 框架開發(fā)監(jiān)控節(jié)點的軟件,當配置文件初始化以后,由傳感器數據與狀態(tài)信息采集模塊定期向傳感器發(fā)出查詢請求,傳感器返回的數據將按照對應的格式傳回并處理,處理完成的數據由數據上傳模塊加工為固定的格式后上傳到云端數據庫,用戶可對這些數據進行在線瀏覽或查詢等操作。攝像頭控制與視頻流推送模塊和視頻直播兩個模塊相互配合工作,在樹莓派上安裝攝像頭,并調用raspivid軟件和FFmpeg 軟件,將攝像頭捕獲的數據推送到云主機的流媒體服務器上,網站加入開源視頻播放器組件,實現在線實時播放遠程攝像頭捕獲的內容[6]。
本系統使用的配置信息包括:串口配置信息、監(jiān)控環(huán)境配置信息和傳感器查詢配置信息,依次存儲到名為COM_Config,Local_Config 和Sensor_Config 的三個CSV 文件中。配置文件載入模塊規(guī)定了各項輸入數據的范圍,使用者只需填寫配置表,系統自動進行合法性檢查,檢查無誤后,讀入數據進行初始化。配置文件的結構、表頭、意義及合法賦值范圍如表1 所示。
配置文件載入模塊依次調用readCOMConfig()、readLocal Config()和readSensorConfig()函數,分別讀取串口配置信息、環(huán)境配置信息和傳感器配置信息。在讀取過程中按照各項的賦值范圍對配置文件進行合法性檢查,并將檢查的結果分別存入三個布爾型變量中,最后調用錯誤標志檢查函數checkError()進行錯誤類型判斷和提示信息輸出。當信息確認無誤之后,主線程將串口配置信息和傳感器查詢配置信息分別封裝為SerialPortConfig 對象和QVector

圖3:環(huán)境監(jiān)控系統嵌入式端功能模塊

圖4:監(jiān)控節(jié)點用戶交互界面示意圖

圖5:系統Web 端部分功能圖

圖6:移動終端部分功能圖
3.2.2 傳感器數據與狀態(tài)信息采集模塊
傳感數據采集需要定時、及時獲取監(jiān)控數據并上傳,采用定時器循環(huán)觸發(fā)相應功能執(zhí)行軟件部分與傳感器通信的任務,本系統采用信號與槽機制接收來自傳感器采集的監(jiān)測數據,并顯示在主界面上。
定時器的觸發(fā)和調用對應函數依賴信號與槽機制,而線程中的信號與槽機制使用信號隊列實現,當具有多個定時器觸發(fā)的異步執(zhí)行任務在同一線程中很容易產生混亂,因此引入多線程。該模塊有兩個線程,即主線程(主界面線程)和傳感器數據采集線程。其中主線程執(zhí)行傳感器數據上傳任務,傳感器數據采集線程執(zhí)行傳感器數據采集、解析和錯誤監(jiān)測任務。主線程通過信號與槽機制控制傳感器數據采集線程的執(zhí)行并與另一線程進行數據的交互,信號與槽的設計如表2 和表3 所示。
傳感器數據與狀態(tài)信息采集模塊運行于子線程中,載入配置文件后,通過發(fā)送sendSensorVector 和sendSerialPortConfig 信號將上述對象傳入傳感器數據采集與監(jiān)測模塊所運行的子線程中,對串口進行初始化并開始循環(huán)請求查詢傳感器。在本模塊中,使用QTimer 定時器觸發(fā)請求查詢傳感器的信號,使用傳感器查詢串發(fā)送函數querySensor()作為槽接收信號,可以自動設置查詢觸發(fā)周期,定時向傳感器發(fā)送對應的查詢請求串。所有傳感器查詢請求串均存于QVector
與此同時,根據讀取的數據進行錯誤監(jiān)測,當沒有讀取到任何數據時判定該傳感器處于離線狀態(tài),當數據CRC 校驗出現錯誤時判定傳感器本次返回數據存在CRC 錯誤并舍棄本次數據,無論傳感器是否出現錯誤,readAndProcessDataFromSensor()函數都將向主線程發(fā)送SensorData 類型數據,傳遞本次傳感器狀態(tài)的查詢結果。
3.2.3 數據上傳模塊
數據采集部分通過載入配置文件獲取數據上傳周期和地址,并按照數據上傳周期初始化QTimer 定時器作為上傳數據的觸發(fā)信號源,按照指定時間間隔重復觸發(fā)執(zhí)行槽函數postRealTimeData()執(zhí)行數據上傳操作。
數據采用POST 方式上傳至云端數據庫,為了生成所需的不定長數據串,主線程維持一個用于存放所有傳感器最新數據的QVector
3.2.4 視頻流推送模塊
對于視頻信號的收集,使用raspivid 軟件和FFmpeg 軟件協同捕獲編碼推送的方式進行視頻流的推送。嵌入式端軟件讀取配置文件,得到視頻傳輸相關的配置信息(編碼格式、分辨率、碼率、視頻服務器RTMP 地址),然后按照配置信息調用raspivid 和FFmpeg,raspivid 按照配置信息指定的分辨率、碼率和幀率從攝像頭獲取視頻流,再通過管道將視頻流實時傳送至FFmpeg 軟件,FFmpeg 將來自raspivid 的h264 原始視頻流封裝為flv 格式視頻流,再按照RTMP 地址進行推流,將視頻流推送到視頻服務器,完成視頻信號的實時發(fā)送[9-11]。
根據不同監(jiān)控環(huán)境的需求共性,通用監(jiān)控節(jié)點軟件需求主要包括:傳感器數據的實時采集、處理、顯示、本地存儲和上傳;自動調控策略的下載,遠程手動控制指令的接收或本地手動指令的執(zhí)行,監(jiān)控環(huán)境視頻的采集與傳送以及警告與關鍵通知信息短信發(fā)送等[2-3,12-13]。模塊劃分如圖3 所示。
其中,監(jiān)控節(jié)點接口功能模塊劃分為傳感器監(jiān)測數據上傳、調控狀態(tài)上傳和調控策略(指令)下載等三個子功能模塊,用于實現接收來自監(jiān)控節(jié)點上傳的傳感器實時監(jiān)測數據、實時調控數據并存儲的功能,以及實現向監(jiān)控節(jié)點返回控制策略(或指令)的目的。
監(jiān)控節(jié)點與云端服務通過postSensorData 和getControlStrategy兩個自定義接口進行。其中,postSensorData 用于接收來自監(jiān)控節(jié)點的傳感器實時數據和環(huán)境調控設備運行情況;getControlStrategy用于向監(jiān)控節(jié)點軟件返回當前最新的環(huán)境調控設備自動控制策略或手動控制指令。postSensorData 接口接收來自監(jiān)控節(jié)點POST 的環(huán)境監(jiān)測數值和狀態(tài)、監(jiān)控節(jié)點當前所處的控制模式,以及環(huán)境調控設備的工作情況等數據。
getControlStrategy 接口在監(jiān)控節(jié)點訪問時返回包含遠程手動控制指令和自動調控策略的字符串,手動控制指令和自動調控策略均以JSON 格式返回,如果遠程手動控制指令不存在則返回對應位置填充“None”的字符串,同理,如果自動調控策略不存在則返回對應位置填充“None”的字符串。
將基于通用監(jiān)控節(jié)點的系統應用于魚塘的遠程監(jiān)控和果園監(jiān)控,對多個魚塘或果園進行監(jiān)測和控制,應用于魚塘監(jiān)控的節(jié)點端用戶交互界面如圖4 所示。
除了在嵌入式端可以查看各種環(huán)境監(jiān)控參數之外,通過Web也可以瀏覽基地、實驗地、監(jiān)測區(qū)、傳感器的實時信息,Web 端系統部分功能如圖5 所示。
移動端應用軟件主要包含云端服務信息設置、實驗基地選擇、環(huán)境數據顯示、控制模式切換以及視頻監(jiān)控等模塊,其中視頻監(jiān)控又分為監(jiān)控視頻地址獲取和視頻播放子模塊。主要功能實現如圖6所示。
在不同的應用中,不同傳感器通過RS485 接口組成傳感器網絡,服務部署在云主機上,用戶可通過互聯網和基于Android 的終端與系統進行交互。經過一段時間不間斷地運行測試,本系統平均數據上傳成功率達99%,平均傳感器查詢成功率達100%;視頻直播成功率95%,平均延時為1~2 秒。
基于樹莓派的通用監(jiān)控節(jié)點實現了環(huán)境參數的監(jiān)測、機械設備的控制、視頻監(jiān)控、短信報警和觸摸屏人機交互等功能,同時為了適應不同應用環(huán)境的需求,開發(fā)了通用配置文件,當有新的設備需要更換時,只需重新加載配置文件即可用,這大大加大了系統的實用性和適應性。本系統具有操作簡單、使用方便、成本低廉、部署難度低等優(yōu)點,經過系統測試表明本系統設計功能執(zhí)行正常,系統運行穩(wěn)定可靠,控制有效性高,系統錯誤率低,可以很好的滿足通用農業(yè)監(jiān)控需求。
本監(jiān)控系統仍存在一些可能影響實際應用的問題。首先是在線視頻清晰度與視頻帶寬占用的平衡問題,為了降低本系統大規(guī)模部署情境下云主機帶寬服務費用,因此對監(jiān)控節(jié)點推送的視頻流進行壓縮,但是,壓縮之后的視頻流清晰度存在明顯下降,影響視頻監(jiān)控效果,今后的工作主要是找到合適的視頻清晰度和視頻帶寬占用的壓縮解決方案。因此,本系統仍需進一步完善優(yōu)化,解決以上可能影響實際應用的問題,以確保本系統具有更好的可適應性和應用能力。