,,,, ,,
(1.青島科技大學 機電工程學院,青島 266061;2.山東省高分子材料先進制造技術重點實驗室)
農業(yè)生產環(huán)境復雜多變,傳統(tǒng)農業(yè)生產過程對各項參數(shù)全憑經驗進行模糊處理,農作物的生長環(huán)境參數(shù)無法實時監(jiān)測及追溯,不利于精準農業(yè)的推進。盡管在實際監(jiān)測工作中已有很多環(huán)境參數(shù)監(jiān)測系統(tǒng),但此類系統(tǒng)大多需要在各監(jiān)測節(jié)點之間組網,將數(shù)據匯總至本地服務器后上傳廣域網,需開發(fā)配套的上位機軟件系統(tǒng)復雜,可拓展性差,不利于遠程實時監(jiān)測。同時,系統(tǒng)線路鋪設復雜,在濕度高、光照強的環(huán)境中使用極易使線路老化,縮短使用壽命[1-3]。為解決上述問題,本文提出基于Arduino、ESP-01S和樂聯(lián)網的環(huán)境參數(shù)實時監(jiān)測設計方案,本方案將各監(jiān)測節(jié)點采集的環(huán)境參數(shù)通過數(shù)據透傳直接上傳樂聯(lián)網,結構簡單,擴展性好。系統(tǒng)現(xiàn)已完成可靠性試驗,即將投入農業(yè)環(huán)境參數(shù)的監(jiān)測中使用。
環(huán)境參數(shù)監(jiān)測系統(tǒng)按功能分為三部分:數(shù)據采集、數(shù)據記錄及云端上傳、數(shù)據實時監(jiān)測與導出,系統(tǒng)總體結構如圖1所示。
圖1 系統(tǒng)總體結構
① 數(shù)據采集。此部分包含溫濕度傳感器、光照強度傳感器及時鐘模塊,是系統(tǒng)的參數(shù)感知層,Arduino讀取傳感器傳回的電信號并將其轉換為環(huán)境參數(shù)。
② 數(shù)據記錄及實時上傳。此部分實現(xiàn)了數(shù)據存儲、轉發(fā),是本系統(tǒng)的核心。系統(tǒng)根據時鐘模塊提供的時鐘,每兩分鐘上傳一次數(shù)據至樂聯(lián)網服務器,每30 min系統(tǒng)存儲一次數(shù)據至Micro SD卡。
③ 數(shù)據實時監(jiān)測與報警。管理員可通過觀察監(jiān)測系統(tǒng)的LCD或通過手機等互聯(lián)網設備獲取實時數(shù)據。樂聯(lián)網提供了參數(shù)超差提醒功能,用戶可以對特別關注的參數(shù)定義報警區(qū)間,一旦檢測到該參數(shù)超差,樂聯(lián)網會自動發(fā)送短信或微信消息通知用戶。
① Arduino UNO R3。
② ESP-01S WiFi模塊。
③ DHT22溫濕度傳感器。
④ GY-30 光照強度傳感器。
⑤ LCD5110。
⑥ DS3231 時鐘模塊。
⑦ Micro SD卡模塊。
⑧ AMS1117-3.3 V降壓模塊。
硬件電路連接圖如圖2所示。
圖2 系統(tǒng)硬件構成及連接
本系統(tǒng)的控制器選用Arduino UNO R3。 Arduino是一種開源硬件,用戶可從開源網站上獲取豐富的第三方庫和示例程序,實現(xiàn)快速開發(fā)。Arduino UNO的微控制器核心是ATmega328,該處理器核心有14個數(shù)字輸入/輸出端口,其中6個可作為PWM輸出,6個模擬輸入端口[4]。Arduino支持標準串口通信、SPI通信以及I2C通信,這使Arduino傳感器的選擇范圍大大增加。
ESP-01S是一款低功耗UART-WiFi模組,用戶可通過AT指令將設備接入互聯(lián)網。該模塊使用ESP8266微型MCU作為核心芯片,模塊集成有板載天線,支持IEEE802.11 b/g/n協(xié)議,完整的 TCP/IP協(xié)議棧。Arduino通過串口與ESP-01S通信,波特率為115 200,能高效地將數(shù)據發(fā)送至互聯(lián)網。由于ESP-01S的工作電壓為3.3 V,本系統(tǒng)使用AMS1117-3.3 V將Arduino輸出的5 V電源降壓后為模塊供電。ESP-01S接入Arduino前,使用串口調試工具對其進行工作模式配置:
① 將ESP-01S預設為SoftAP+Station模式,并將此配置保存到Flash。管理員如需變更WiFi名稱密碼,只需用手機接入ESP-01S發(fā)射的WiFi熱點進行配置,無需再次編程燒錄,配網界面如圖3所示。
圖3 網絡配置界面
② 將ESP-01S與樂聯(lián)建立TCP透傳。透傳即透明傳送,整個傳輸過程中不對數(shù)據進行二次加工,即不加密、不分組、不編碼等,信息原封不動地到達數(shù)據接收端。ESP8266芯片提供了保存透傳到Flash指令,將透傳模式及建立的TCP連接保存在Flash區(qū)域,重新上電時自動建立與樂聯(lián)網的TCP透傳連接。
本系統(tǒng)選用LCD5110作為參數(shù)實時顯示單元,其芯片核心為Philips PCD8544。PCD8544是低功耗CMOS LCD控制驅動器,芯片上集成所有的顯示功能,通過SPI總線與Arduino通信,傳輸速度快。LCD5110內置背光,擁有52×52像素分辨率,可顯示6行西文字符,單屏即可顯示所有信息[5-6]。該屏幕驅動電壓位寬,耗電量低,價格低廉,適合作為本系統(tǒng)的顯示器。
DHT22溫濕度傳感器集成了一個NTC測溫元件和一個電容式感濕元件,與8位單片機連接,該傳感器具有響應速度快、性價比高、抗干擾能力強等優(yōu)點。傳感器采集數(shù)據過程中調用內部儲存的校準系數(shù)進行校正,測量精度高。傳感器采用單總線輸出,與Arduino連接簡單、傳輸距離遠。
GY-30數(shù)字光強傳感器通過I2C總線接入Arduino。I2C總線是一種多主機總線,可以靈活拓展傳感器數(shù)量,如需增加傳感器,將從端設備時鐘線、數(shù)據線連接在一起,通過訪問不同的地址即可讀取目標傳感器[7]。GY-30擁有接近視覺的光譜靈敏度特性,測量范圍為1~65 535 lx,受紅外線影響小。GY-30提供了三種測量模式,分別為高分辨率模式1、高分辨率模式2和低分辨率模式。本系統(tǒng)采用高分辨率模式2,此模式下采集的數(shù)據可抑制部分噪聲,數(shù)據采集精度高。
該模塊與Arduino通信方式為SPI總線通信,MISO、MOSI、SCK為SPI總線。通過文件系統(tǒng)及SPI接口驅動程序,Arduino即可完成對Micro SD卡的文件的讀寫。該模塊內置電平轉換電路,接口電平支持5 V和3.3 V。 Arduino IDE提供了SD卡讀寫庫,用戶可方便的在SD卡上創(chuàng)建、讀取、更新、刪除文件。本系統(tǒng)設定的數(shù)據存儲間隔為30 min,存儲格式為逗號分隔符格式(Comma-Separated Values, CSV),用此格式存儲數(shù)據,可直接用EXCEL打開。
DS3231是高精度的I2C總線實時時鐘,工作溫度寬,內部集成的溫補晶振和晶體使得DS3231的計時精度高達±2分鐘/年。此模塊內置的電池可以使時鐘在斷電情況下仍保持運行,是系統(tǒng)理想的時鐘單元。
系統(tǒng)上電后首先初始化各傳感器、時鐘、各總線及串口。同時ESP-01S自動與樂聯(lián)平臺建立透傳連接,WiFi接入點信息及透傳建立命令存儲于ESP-01S Flash中,無需Arduino再對其發(fā)送指令控制,節(jié)省了Arduino的內存開銷,提高了程序循環(huán)效率。程序采用輪詢方式判斷是否需要上傳數(shù)據及記錄數(shù)據到Micro SD卡。程序流程圖如圖4所示。
圖4 程序流程圖
本系統(tǒng)有兩個關鍵子程序:
① 向服務器發(fā)送數(shù)據。我們定義一個函數(shù)PostData()完成數(shù)據推送。其中,全局變量temp、humi、light分別存儲當前溫度、濕度及光照強度數(shù)值。在數(shù)據包透傳過程中,要使用大量字符串,但Arduino UNO只有2 KB主存儲器(SRAM)空間,字符串使用過多導致系統(tǒng)動態(tài)內存不足,運行不穩(wěn)定,本程序對字符串存儲進行了優(yōu)化,將字符串存儲于Flash中,程序執(zhí)行時自動從Flash中調用字符串,大大節(jié)省了內存空間[8]。源程序如下所示:
void PostData() {
Serial.print(F("{"method":"update","gatewayNo":"01","userkey":"af5c50f620"}&^! "));
Serial.print(F("{"method":"upload","data":[{"Name":"TEMP","Value":""));
Serial.print(temp);
Serial.print(F(""},{"Name":"HUMI","Value":""));
Serial.print(humi);
Serial.print(F(""},{"Name":"LIGHT","Value":""));
Serial.print(light);
Serial.print(F(""}]}&^! "));
}
② 向Micro SD卡中存儲當前各參數(shù)及時間。我們編寫了函數(shù)dataLog()來完成數(shù)據存儲,每天新建一個文件存儲當天數(shù)據,以日期作為文件名。程序首先改變標志位recordFlag,避免了同一分鐘內數(shù)據記錄多次,隨后使用逗號分隔符格式向文件寫入表頭,最后寫入各項參數(shù)。源程序如下:
void dataLog() {
recordFlag = tm.minute();
pinMode(CS_PIN, OUTPUT);
StringlogFileName;
logFileName = String(tm.month()) + "-" + String(tm.day()) + ".csv";
SD.begin(CS_PIN);
//向新創(chuàng)建的文件寫入表頭
if (SD.exists(logFileName) == 0 ) {
FiledataFile = SD.open(logFileName,FILE_WRITE);
dataFile.print("DATE");
dataFile.print(F(","));
dataFile.print("Time");
dataFile.print(F(","));
dataFile.print("Humidity");
dataFile.print(F(","));
dataFile.print("Temperature");
dataFile.print(F(","));
dataFile.println("Illuminance");
dataFile.close();}
FiledataFile = SD.open(logFileName, FILE_WRITE);
dataFile.print(sDate);
dataFile.print(F(","));
sTime=String(tm.hour())+":"+String(tm.minute());
dataFile.print(sTime);
dataFile.print(F(","));
dataFile.print(humi);
dataFile.print(F(","));
dataFile.print(temp);
dataFile.print(F(","));
dataFile.println(light);
dataFile.close();
}
數(shù)據實時監(jiān)測:經測試,環(huán)境參數(shù)上傳穩(wěn)定,無丟包。使用電腦或微信訪問樂聯(lián)網即可查看各參數(shù)實時數(shù)據、歷史走勢、數(shù)據分布等,圖5給出樂聯(lián)平臺微信端實時數(shù)據查詢界面。
圖5 實時數(shù)據查詢
歷史數(shù)據導出:管理員可登陸樂聯(lián)平臺進入下載歷史數(shù)據導出界面,選擇時間段導出數(shù)據,也可使用讀卡器讀取本地的Micro SD卡導出歷史數(shù)據。本系統(tǒng)存儲的數(shù)據可直接在Excel中操作,管理員可利用Excel高效地對采集的環(huán)境參數(shù)進行統(tǒng)計學分析,如圖6所示。
圖6 導出數(shù)據并分析
數(shù)據采集精度:本系統(tǒng)測得的環(huán)境參數(shù)值與溫濕度計、光照度計測試結果非常近似,達到了預期要求,精度完全滿足農業(yè)監(jiān)測需求。
參考文獻
[1] 李巖. 基于Arduino與LabVIEW的農作物生長環(huán)境檢測系統(tǒng)的設計與實現(xiàn)[D]. 滁州:安徽科技學院,2017.
[2] 毛敏, 馬艷. 基于Arduino和Labview的蔬菜大棚溫濕度監(jiān)測系統(tǒng)[J]. 中國儀器儀表,2017(9):65-68.
[3] 朱曉雷. 基于單片機的溫室環(huán)境數(shù)據監(jiān)測系統(tǒng)的設計[D]. 呼和浩特:內蒙古農業(yè)大學,2015.
[4] 張亮. 輕松玩轉Arduino[M]. 北京:電子工業(yè)出版社,2016.
[5] 蒙克. Arduino編程指南:75個智能硬件程序設計技巧[M].張家進,譯. 北京:人民郵電出版社,2016.
[6] 宋楠,韓廣義. Arduino開發(fā)從零開始學—學電子的都玩這個[M]. 北京:清華大學出版社,2014.
[7] 馬格里斯. Arduino權威指南[M].2版.楊云坤,譯. 北京:人民郵電出版社,2015.
[8] 趙英杰. 完美圖解Arduino互動設計入門[M]. 北京:科學出版社,2014.