戰(zhàn):4 步搭出 Arduino 物聯(lián)網(wǎng)節(jié)水系統(tǒng))
ESP32 智能灌溉實(shí)戰(zhàn)4 步搭出 Arduino 物聯(lián)網(wǎng)節(jié)水系統(tǒng)【免費(fèi)下載鏈接】arduino-esp32Arduino core for the ESP32 family of SoCs項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32做完之后你能做到手機(jī)上隨時(shí)看菜地墑情土壤低于 30% 時(shí) ESP32 自動(dòng)開水泵 30 秒每半小時(shí)把數(shù)據(jù)傳一次云端。這是一套 Arduino 物聯(lián)網(wǎng)節(jié)水的組合全部配件加起來(lái)不到 100 元。讀完本文你能學(xué)會(huì)把電容式土壤濕度探頭、繼電器接到 ESP32 上并驗(yàn)證讀數(shù)寫一個(gè)干了才澆、熱了多澆的多參數(shù)決策算法用深度休眠把整機(jī)待機(jī)做到微安級(jí)定時(shí)醒來(lái)讀數(shù)通過(guò) Wi-Fi 把墑情 JSON 上傳到云端手機(jī)可見(jiàn)方案速覽硬件清單和閉環(huán)原理先看硬件清單全部是市面上現(xiàn)成的模塊模塊型號(hào) / 規(guī)格作用預(yù)算參考主控ESP32-WROOM-32DevKitC采集數(shù)據(jù)、做決策、Wi-Fi 上傳約 25 元土壤濕度電容式模擬輸出讀土壤干濕度灌溉依據(jù)約 8 元溫濕度DHT11溫度、相對(duì)濕度約 6 元光照BH1750I2C 接口光照強(qiáng)度晴天修正約 10 元繼電器單路 5V開關(guān)水泵隔離強(qiáng)電約 5 元電源5V 適配器 太陽(yáng)能板/鋰電池可選供電約 30 元原理一句話感知 → 決策 → 執(zhí)行 → 回傳的閉環(huán)。三個(gè)傳感器先給 ESP32 一組讀數(shù)程序判斷要不要澆、澆多久繼電器接通水泵最后 Wi-Fi 把結(jié)果送回云端你在手機(jī)上看。四步實(shí)戰(zhàn)第 1 步Arduino IDE 裝好 ESP32 支持包先裝 Arduino IDE官方 2.x 版即可然后做三件事文件 → 首選項(xiàng)在附加開發(fā)板管理器網(wǎng)址里填入樂(lè)鑫提供的板包索引直接粘貼純文本即可https://espressif.github.io/arduino-esp32/package_esp32_index.json工具 → 開發(fā)板 → 開發(fā)板管理器搜 esp32安裝最新穩(wěn)定版約 200MB耐心等待。重啟 IDE工具 → 開發(fā)板里能看到 ESP32 Dev Module 就算成功。判斷依據(jù)開發(fā)板列表出現(xiàn) esp32 條目版本號(hào)顯示 3.x當(dāng)前穩(wěn)定版是 3.3。第 2 步3 步接線——探頭、繼電器、電源以 DevKitC 為例關(guān)鍵引腳如下。ESP32 的引腳編號(hào)由芯片決定換開發(fā)板只是絲印名不同。土壤探頭VCC 接 3.3VGND 接 GNDOUT 接 GPIO34該腳只能輸入正好用來(lái)讀傳感器。DHT11VCC 接 3.3V 或 5V數(shù)據(jù)腳接 GPIO4。BH1750SDA 接 GPIO21SCL 接 GPIO22這是 I2C 默認(rèn)引腳程序不用改地址就能找到它。繼電器 IN 接 GPIO13繼電器的 VCC 和 GND 接外部 5V 適配器GND 必須和 ESP32 共地。?? 水泵的供電不要從 ESP32 的 5V 腳取。判斷依據(jù)上電后打開串口監(jiān)視器115200 波特率讀探頭空氣里應(yīng)接近 4095浸入水中應(yīng)降到 2000 以下。若讀數(shù)卡死不動(dòng)或恒為 0先查線。第 3 步燒錄并串口驗(yàn)證打開倉(cāng)庫(kù)里的官方示例直接燒錄比如 DeepSleep 示例目錄 下的 GPIO 相關(guān) demo編譯、上傳屏幕出現(xiàn) Done uploading 即成功。然后自己敲兩行代碼驗(yàn)證硬件串口打印readSoilMoisture()的返回值往探頭上滴水百分比應(yīng)該上升。digitalWrite(13, HIGH)再LOW繼電器應(yīng)咔噠一聲吸合釋放。判斷依據(jù)讀數(shù)隨環(huán)境變化、繼電器有響應(yīng)說(shuō)明接線和燒錄通道都沒(méi)問(wèn)題可以寫正式邏輯了。第 4 步連云上報(bào)墑情數(shù)據(jù)聯(lián)網(wǎng)部分用核心自帶的 WiFi 庫(kù)就夠了。setup()里WiFi.begin(ssid, password)循環(huán)等待直到WiFi.status() WL_CONNECTED超時(shí) 10 秒重試。連上后打印 IP方便確認(rèn)本機(jī)已進(jìn)路由器網(wǎng)絡(luò)。每 30 分鐘用 HTTPClient 發(fā)一次 POST JSON土壤濕度、溫度、濕度、光照、本輪灌溉時(shí)長(zhǎng)。云端先用任意接收 POST 的接口就行本地沒(méi)有服務(wù)器就先打印到串口。判斷依據(jù)云端收到一條記錄且狀態(tài)碼 200 系列字段和你串口里看到的一致系統(tǒng)就閉環(huán)了。關(guān)鍵代碼解讀校準(zhǔn)把原始讀數(shù)變成百分比const int SOIL_PIN 34; const int DRY_RAW 4095; // 探頭在空氣中的讀數(shù) const int WET_RAW 1500; // 探頭完全浸入水的讀數(shù) float readSoilMoisture() { int raw analogRead(SOIL_PIN); float pct 100.0 * (DRY_RAW - raw) / (DRY_RAW - WET_RAW); return constrain(pct, 0.0, 100.0); // 鉗制在 0-100% }這段在做什么把 12 位原始讀數(shù)0–4095線性映射成 0–100%。為什么這么寫每個(gè)探頭的干、濕值都不一樣別照抄別人的數(shù)字——先把你自己的探頭放在空氣里、再浸入水中各記一個(gè)數(shù)替換 DRY_RAW 和 WET_RAW這就是校準(zhǔn)。ESP32 的 ADC 是 12 位底層實(shí)現(xiàn)在 esp32-hal-adc.h。多參數(shù)決策干了才澆熱了加時(shí)bool needWatering false; int duration 0; if (soil 30.0) { // 30% 為干旱閾值 needWatering true; duration 30; // 基礎(chǔ) 30 秒 if (temp 30.0 hum 50.0) duration 15; // 高溫低濕加 15 秒 if (lux 50000) duration 10; // 強(qiáng)光加 10 秒 if (duration 300) duration 300; // 上限 5 分鐘 }這段在做什么土壤濕度低于 30% 才啟動(dòng)然后在基礎(chǔ) 30 秒上按環(huán)境加時(shí)。為什么這么寫閾值全是可調(diào)常量下地跑一周后看數(shù)據(jù)再微調(diào)最后那行封頂是防止傳感器誤讀讓水泵連開半小時(shí)把地澆成河。深度休眠睡 30 分鐘醒來(lái)干一輪void setup() { Serial.begin(115200); initWiFi(); // 深度休眠會(huì)清空寄存器 initSD(); // WiFi、SD、SPI 必須重新初始化 } void doOneRound() { float soil readSoilMoisture(); // ...決策、上傳... esp_sleep_enable_timer_wakeup(1800ULL * 1000000); // 睡 1800 秒 esp_deep_sleep_start(); }這段在做什么跑完一輪測(cè) → 判 → 傳就睡定時(shí)器 30 分鐘后叫醒它。為什么這么寫ESP32 開 Wi-Fi 活躍時(shí)電流約 80mA深度休眠降到微安級(jí)半小時(shí)一輪電池用一周不成問(wèn)題。注意setup()里的initWiFi()不能省——每次從深度休眠醒來(lái)等同冷啟動(dòng)。ESP32 灌溉避坑清單5 個(gè)高頻問(wèn)題水泵一開整機(jī)突然重啟現(xiàn)象繼電器咔噠一聲串口立刻斷流程序從頭跑。原因水泵供電接在 ESP32 的 5V 腳上電機(jī)啟動(dòng)瞬間拉低全板電壓觸發(fā)欠壓復(fù)位。解法水泵用獨(dú)立 5V 適配器供電只和 ESP32 共 GND。土壤探頭讀數(shù)越來(lái)越飄探片上有白霜現(xiàn)象同一塊土上個(gè)月讀 45%現(xiàn)在只讀 20%。原因電阻式探頭在濕土里有直流電流流過(guò)水被電解腐蝕白霜就是腐蝕產(chǎn)物。解法換電容式探頭靠介電常數(shù)變化工作無(wú)直流電流、不腐蝕。Wi-Fi 偶發(fā)斷網(wǎng)云端斷數(shù)據(jù)現(xiàn)象跑幾天突然云端沒(méi)有新記錄重啟設(shè)備又恢復(fù)。原因WiFi.begin只在 setup 里執(zhí)行一次斷線后沒(méi)人重連。解法每次上傳前檢查連接狀態(tài)斷線執(zhí)行WiFi.reconnect()重連失敗就把這輪數(shù)據(jù)寫進(jìn)本地緩沖下次補(bǔ)傳。深度休眠喚醒后 SD 卡、Wi-Fi 報(bào)錯(cuò)現(xiàn)象喚醒后第一輪SD.begin失敗或 Wi-Fi 卡死。原因深度休眠清空所有寄存器外設(shè)回到出廠狀態(tài)代碼卻以為它們還開著。解法把每次喚醒都當(dāng)全新開機(jī)setup()里先讀喚醒原因再完整初始化所有外設(shè)。濕度值抖動(dòng)水泵亂啟?,F(xiàn)象水泵偶爾自己咔噠一下又停日志里時(shí)長(zhǎng)只有 1 秒。原因單次模擬讀數(shù)噪聲大偶發(fā)跌破閾值。解法取 10 次讀數(shù)的中位數(shù)并且連續(xù) 2 輪都低于閾值才真正啟動(dòng)灌溉。下一步與延伸閱讀多區(qū)域灌溉加繼電器和探頭每個(gè)區(qū)域獨(dú)立閾值與時(shí)間表。天氣預(yù)報(bào)集成澆水前先查當(dāng)天降水雨天跳過(guò)。遠(yuǎn)距離場(chǎng)景Wi-Fi 覆蓋不到的田塊改 LoRa 回傳。供電優(yōu)化太陽(yáng)能板 鋰電池把深度休眠當(dāng)常駐狀態(tài)。想深入實(shí)現(xiàn)細(xì)節(jié)倉(cāng)庫(kù)里可以看聯(lián)網(wǎng)部分看 WiFi 庫(kù)本地緩沖看 SD 庫(kù)官方示例集中在 examples 目錄串口、休眠、GPIO 都有現(xiàn)成 demo 可以直接改。今天就能做的第一件事花 8 元買一個(gè)電容式土壤探頭接上你的 ESP32把上面那段 8 行的校準(zhǔn)代碼扔進(jìn)串口監(jiān)視器——把手伸進(jìn)土里看到數(shù)字跟著變這個(gè)項(xiàng)目就算真正開始了?!久赓M(fèi)下載鏈接】arduino-esp32Arduino core for the ESP32 family of SoCs項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考