黃業(yè)源,李守曉
(天津農(nóng)學(xué)院 計算機與信息工程學(xué)院,天津 300384)
隨著嵌入式技術(shù)的更新?lián)Q代,系統(tǒng)設(shè)計和可實現(xiàn)的功能越來越多,單一進行環(huán)境數(shù)據(jù)測量的大棚監(jiān)測設(shè)計已經(jīng)不能滿足實際應(yīng)用需求,需要考慮設(shè)計更多的系統(tǒng)功能,如能遠程控制與上位機的展示和交互界面等[1-2]。近年來,隨著云計算、云存儲、物聯(lián)網(wǎng)技術(shù)的發(fā)展,通過手機端進行農(nóng)業(yè)苗情、墑情等數(shù)據(jù)展示與控制的優(yōu)勢日益凸顯[3-6]。因此,本文設(shè)計了單片機+Blinker 云端+手機APP 的智能大棚環(huán)境監(jiān)控及自動灌溉系統(tǒng)。
本設(shè)計采用一塊Arduino UNO R3 單片機作為主控單元,ESP8266 WiFi 模塊作為數(shù)據(jù)傳輸單元,使用的傳感器有GY-30 光照強度傳感器、DHT11 空氣溫濕度傳感器、土壤濕度傳感器;外圍設(shè)備有繼電器、風(fēng)扇和水泵。系統(tǒng)框圖如圖1 所示。
圖1 系統(tǒng)整體框圖
在用戶端的手機APP 界面,有6 個數(shù)據(jù)展示控件,分別展示了空氣溫濕度、土壤濕度、光照強度、需水量和需肥量的實時數(shù)據(jù);2 個按鈕控件,分別控制水泵進行水肥抽取灌溉和控制風(fēng)扇進行降溫。
Arduino UNO R3 是一款基于ATmega328P 的微控制器板[7]。它有14 個數(shù)字輸入/輸出引腳(其中6 個可用作PWM 輸出),用于連接數(shù)字輸入/輸出設(shè)備,如LED、開關(guān)、傳感器等;5 個電源引腳,用于連接電源,包括GND、5 V、3.3 V、Vin 和RESET;6 個模擬輸入,用于連接模擬輸入設(shè)備,如溫度傳感器、壓力傳感器等;1 個串口引腳,用于連接串口設(shè)備,如調(diào)試器等;2 個I2C 引腳,用于連接I2C 設(shè)備,如I2C LCD、I2C E2PROM 等;1 個SPI 引腳,用于連接SPI設(shè)備,如SD 卡模塊等。Arduino UNO R3 還可以使用各種擴展板(如傳感器板、通信模塊等)來擴展其功能,可以通過連接擴展板方便地進行物聯(lián)網(wǎng)、機器人和自動化等應(yīng)用領(lǐng)域系統(tǒng)的開發(fā)。
本設(shè)計使用的是ESP826612-E NodeMCU Lua V3開發(fā)板作為傳輸核心模塊,這是一種基于ESP8266 芯片的開發(fā)板,支持Lua 腳本語言,支持WiFi 連接,可以用于開發(fā)各種無線應(yīng)用。另外它還支持多種常見的傳感器,例如DHT11/DHT22 溫濕度傳感器、DS18B20 溫度傳感器等。ESP8266 NodeMCU Lua V3 開發(fā)板的主要參數(shù)如下:
(1) 處理器存儲器:Tensilica L106 32 位RISC 處理器,處理器主頻最高80 MHz,存儲器4 MB 閃存;
(2)WiFi 模塊:IEEE 802.11 b/g/n(2.4 GHz);
(3)GPIO 引腳:共17 個,其中GPIO6-11 為ESP8266的SDIO 接口,可用于連接相關(guān)SPI 設(shè)備;
(4)安全支持:WEP、WPA/WPA2 PSK/Enterprise;
(5)開發(fā)環(huán)境:支持Lua 腳本語言、Arduino IDE 等;
(6)ADC 輸入:最多支持1 個通道(0 ~3.3 V 輸入范圍);
(7)USB 接口:用于串口調(diào)試和電源供應(yīng)(5 V DC)。
與其他版本的ESP8266 相比,它具有以下特點:內(nèi)置4 MB 閃存,共有17 個GPIO,其中GPIO 6 ~11 可用于連接SPI 設(shè)備,支持深度睡眠模式,可以實現(xiàn)低功耗應(yīng)用;新增Reset 和FLASH 按鈕,可方便地對開發(fā)板進行復(fù)位和燒錄操作。ESP8266 各項參數(shù)見表1 所列。
表1 ESP8266 各項參數(shù)
DHT11 數(shù)字溫濕度傳感器采用了數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),是一種能夠輸出已經(jīng)過校準的數(shù)字信號的溫濕度復(fù)合傳感器[8]。DHT11 各項參數(shù)見表2 所列。
表2 DHT11 參數(shù)
GY-30 是一款內(nèi)置ROHM-BH1750FLV 芯片的數(shù)字光照強度傳感器模塊,可以用于測量室內(nèi)室外環(huán)境光照強度。它使用BH1750FVI 芯片作為光敏元件,采用SMD 封裝,小巧輕便;其采用低功耗設(shè)計,適用于電池供電設(shè)備,具有高精度和快速響應(yīng)等特點,廣泛應(yīng)用于環(huán)境監(jiān)測等領(lǐng)域。GY-30測量范圍在0 ~65 535 lx 之間,分辨率為1 lx,精度為±20%,工作溫度為-40 ~85 ℃,通信接口使用I2C。
Moisture Sensor土壤濕度傳感器是一種可用于檢測土壤水分的傳感器。傳感器輸出值隨著土壤濕度減小而減小。該傳感器的土壤探測頭部分采用鍍金處理,不僅可以延長使用壽命,還能獲得更高的精度[9]。
水泵使用5 V 小功率潛水式水泵,型號JT-DC3W-3,驅(qū)動方式為繼電器驅(qū)動,工作電壓為DC 2.5 ~5.5 V,工作電流為120 mA,運行功率為0.36 W,揚程高度為0.35 m,水流量為80 L/h。
控制風(fēng)扇的繼電器使用松樂SRD-05VDC-SL-C;控制水泵的繼電器使用宏發(fā)HF46F。風(fēng)扇使用常見的直流小馬達加上扇葉模擬。
首先注冊并進入點燈Blinker 手機APP,在主界面的右上角點擊“+”號,選擇要接入的設(shè)備,這里選擇獨立設(shè)備,在藍牙接入和網(wǎng)絡(luò)接入選項中選擇網(wǎng)絡(luò)接入。選擇網(wǎng)絡(luò)接入后,會出現(xiàn)一串密鑰,將該密鑰寫入ESP8266 程序中即可。創(chuàng)建完成后,主界面會出現(xiàn)新的設(shè)備;點擊后,即可添加文字、按鍵、數(shù)據(jù)等控件,開始搭建展示頁面。其中需進行如下2 組設(shè)置,實現(xiàn)相應(yīng)功能。
(1)4 個測量數(shù)據(jù)設(shè)置:以溫度數(shù)據(jù)展示為例,點擊數(shù)據(jù)控件:選擇樣式,填寫組件名,與燒錄到ESP8266 的程序值相對應(yīng),否則無法正確顯示數(shù)據(jù)。顯示文本填寫空氣溫度,數(shù)據(jù)單位填寫℃,最大值可根據(jù)需要設(shè)定,實數(shù)據(jù)勾選,完成溫度數(shù)據(jù)展示。按照同樣的操作繼續(xù)設(shè)置空氣濕度、土壤濕度、光照強度、需水量和需肥量的組件值后,完成界面展示。
(2)2 個按鈕設(shè)置:以澆水控件為例,在控件列表中找到按鈕控件,選擇樣式,填寫組件鍵名,將按鍵類型設(shè)置為開關(guān)按鍵,填寫顯示文本。按照同樣的步驟配置風(fēng)扇開關(guān)按鈕。
3.2.1 Arduino 程序編寫
軟件編程環(huán)境選擇Arduino IDE 1.8.16[10]。Arduino 單片機可以實現(xiàn)數(shù)據(jù)的采集并通過串口將數(shù)據(jù)發(fā)送到ESP8266,最終通過WiFi 模塊傳給云平臺。溫濕度采集的實現(xiàn)需要用到包含溫濕度采集的庫文件。庫文件中包含了溫濕度傳感器相關(guān)的函數(shù)。其中VCC 接3.3 V,GND 接地,DATA 接在Arduino 數(shù)字端口。土壤濕度數(shù)據(jù)獲取是通過Arduino 的模擬輸入引腳讀取數(shù)值。DATA 數(shù)據(jù)線接A3 口。光照強度數(shù)據(jù)需要通過Arduino 的I2C 通信接口獲取,首先定義ADDR為寄存器的地址引腳,其接地時器件地址為0100011,SDA數(shù)據(jù)線接在A4 端口,SCL 時鐘線接在A5 口。軟件系統(tǒng)的總體流程如圖2 所示。
圖2 軟件流程
3.2.2 ESP8266 Node MCU 程序編寫
ESP8266 與Arduino 的串口通信容易實現(xiàn)并且通信較穩(wěn)定。在Arduino IDE 環(huán)境下給ESP8266 WiFi 模塊寫入程序時,需根據(jù)實際使用的硬件在工具中選擇對應(yīng)開發(fā)板,同時要下載
圖3 ESP8266 程序編寫
接下來進行新建對象和組件的綁定,常用的有數(shù)據(jù)、按鈕、滑動條、數(shù)字和文本控件等。根據(jù)APP 具體添加的組件,在程序中進行綁定,所有綁定的組件都需要回調(diào),以按鈕控件為例“Button.attach(button_callback)”,如綁定數(shù)據(jù)控件則需定義相應(yīng)的“BlinkerNumber NUM(“NUM_name”)”,將數(shù)字的值賦給數(shù)據(jù)控件,即可完成數(shù)據(jù)展示。在本設(shè)計中綁定了“temp”“humi”“l(fā)ig”和“soil”四個數(shù)字,分別存儲溫度、濕度、光照強度和土壤濕度數(shù)據(jù)并賦值給相應(yīng)數(shù)據(jù)控件。綁定按鈕按鍵程序為“BlinkerButton Button("key")”,其中“key”為APP 中按鈕的鍵名。本設(shè)計綁定了兩個按鈕,通過繼電器分別控制水泵和風(fēng)扇。綁定并注冊組件后,需要添加組件操作函數(shù),具體如圖4 所示。至此,ESP8266 WiFi模塊的程序編寫完成,可以實現(xiàn)與APP 相關(guān)數(shù)據(jù)通信和農(nóng)業(yè)大棚實時遠程控制。
圖4 組件操作部分
為測試系統(tǒng)的可靠性,在溫室大棚內(nèi)進行驗證。將上述程序燒錄進Arduino 控制板后,對大棚內(nèi)的環(huán)境條件進行測量,如圖5 所示。系統(tǒng)分為手動和自動模式。當溫度超過設(shè)定閾值時,風(fēng)扇自動打開,當土壤濕度低于設(shè)定值時,自動進行灌溉。同時,可以直接手動進行灌溉和開啟風(fēng)扇。經(jīng)過多次實驗測試與改進后,系統(tǒng)的可靠性有了一定保障,可以在APP 端遠程查看大棚內(nèi)部數(shù)據(jù),同時可以遠程操作控制相關(guān)的農(nóng)業(yè)設(shè)備工作,基本能夠滿足溫室大棚的需求。
圖5 手機APP 主界面
本文將Arduino單片機與Blinker云平臺相結(jié)合并應(yīng)用于溫室大棚遠程監(jiān)控,實現(xiàn)農(nóng)業(yè)信息數(shù)據(jù)采集與無線傳輸,并通過手機端APP 對農(nóng)業(yè)大棚作業(yè)現(xiàn)場進行遠程控制;同時利用Blinker 云平臺實現(xiàn)對數(shù)據(jù)的云存儲。在科學(xué)技術(shù)助力鄉(xiāng)村振興背景下,為農(nóng)業(yè)物聯(lián)網(wǎng)的應(yīng)用提供新的研究思路,具有一定的推廣價值。