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