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