
一篇搞定零基礎 ESP32 智能灌溉系統手機可查、自動澆水【免費下載鏈接】arduino-esp32Arduino core for the ESP32 family of SoCs項目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32清晨六點半手機在枕邊震了一下土壤濕度 31%已自動澆水 45 秒。你趿拉著拖鞋走到菜地水泵剛好停轉電磁閥通電就開閥放水的開關咔噠合上。這套能手機可查、自動澆水的 ESP32 智能灌溉小設備基于 arduino-esp32 官方核心庫全文代碼都能直接跑通成本幾十塊跟著做下來手里就是一臺能干活的機器。清晨六點半手機先你一步收到地干了先把成品說清楚你心里就有數了一塊 ESP32 開發板蹲在菜角的一個防水盒里旁邊插著一根土壤探針和一臺小水泵。它每 30 分鐘醒一次摸一摸土有多干太干就自己放水然后把讀數順著 Wi-Fi 推到你手機干完活就呼呼大睡省電流。整個系統就是一個感知—決策—執行的小閉環這篇文章帶你把它從開箱一路搭到野外部署。開箱清單五樣東西搭起整套 ESP32 智能灌溉系統買料之前先看懂每樣是干嘛的后面接線就不慌角色買什么為什么選它主控ESP32-WROOM-32 開發板DevKitC 外觀自帶 Wi-FiGPIO34 是純輸入腳正好接傳感器不會跟水泵信號打架土壤濕度電容式土壤濕度傳感器帶模擬輸出 AO 口電阻式探針幾個月就被電解腐蝕、讀數飄電容式能穩穩用一年溫濕度DHT11一根信號線讀出溫度和濕度兩個參數便宜到不用心疼執行器5V 繼電器模塊 12V 電磁閥繼電器就是個小電工讓 3.3V 的邏輯信號安全地指揮大電流的水泵電路電源5V/2A 電源進階換太陽能鋰電池繼電器和電磁閥的電流遠超 ESP32 板載輸出必須獨立供電圖里把每個 GPIO 的編號都標清楚了我們全程只用其中四根34 摸土、4 讀溫濕度、13 管繼電器、14 給傳感器通斷電。5 分鐘配好 ESP32 開發環境讓傳感器先開口說話這一步目標很樸素串口監視器一打開能看到一組真實跳動的濕度讀數就算過關。裝好板卡支持包選對開發板打開 Arduino IDE進文件 → 首選項在附加開發板管理器網址里粘貼https://espressif.github.io/arduino-esp32/package_esp32_index.json然后工具 → 開發板 → 開發板管理器搜 esp32 安裝最新版本裝完開發板列表選ESP32 Dev Module即可。傳感器接線與上電自測接線就三組土壤模塊 AO 接 GPIO34DO 口別碰那是數字口、DHT11 信號接 GPIO4、繼電器 IN 接 GPIO13。?? 繼電器模塊的 VCC 接 5V 電源、GND 跟水泵電源共地別從 ESP32 的 3.3V 口取電。下面這個自測程序負責確認ESP32 能摸到土讀 10 次取平均把原始值打到串口。const int SOIL_PIN 34; // 土壤濕度模塊的 AO 口模擬量 void setup() { Serial.begin(115200); analogReadResolution(12); // 設成 12 位讀數范圍 0~4095 } void loop() { long sum 0; for (int i 0; i 10; i) sum analogRead(SOIL_PIN); // 讀 10 次取平均濾毛刺 Serial.printf(土壤原始值: %ld\n, sum / 10); delay(500); }探針在干土里和插進濕土里數字明顯變化這關就過了。讓 ESP32 自己拿主意土壤濕度校準三步走讀數只是數字得先教會 ESP32多少算干它才有資格自己拿主意。標出干點和濕點三步把傳感器插在當天最干的土里記下讀數為 DRY整支插進水杯泡一分鐘記下讀數為 WET之后每次讀數都用這兩個點線性換算成百分比。下面這段代碼把校準結果固化進去返回 0~100 的濕度百分比// 校準后填自己的兩個數干土記 DRY泡水記 WET const int DRY 3800, WET 1200; float soilPercent() { long sum 0; for (int i 0; i 10; i) sum analogRead(SOIL_PIN); long raw sum / 10; float pct (DRY - raw) * 100.0f / (DRY - WET); return constrain(pct, 0, 100); // 限死在 0~100 }閾值、加權與兩道保險閾值別拍腦袋生菜葉菜類設 40% 左右辣椒番茄耐旱些可以放到 30%。判定邏輯做加權——基礎 30 秒遇到又熱又干氣溫超 30 度且空氣濕度低于 50%加 15 秒因為蒸發更快。DHT11 的讀法倉庫示例里有現成代碼這里只把讀數作為參數傳進判定函數struct Decision { bool water; int seconds; }; // 土壤太干才澆又熱又干就加時 Decision decide(float soil, float temp, float hum) { Decision d {false, 0}; if (soil 40) { d.water true; d.seconds 30; // 基礎澆 30 秒 if (temp 30 hum 50) d.seconds 15; // 高溫低濕加 15 秒 } return d; }執行環節最容易翻車兩道保險必須寫單次最長 5 分鐘封頂兩次澆水至少間隔 30 分鐘防止傳感器壞了水泵空轉把水放干。const int RELAY 13; unsigned long lastWater 0; // 繼電器吸合放水保險單次封頂 5 分鐘、兩次間隔 30 分鐘 void water(int sec) { if (sec 300) sec 300; unsigned long now millis() / 1000; if (now - lastWater 1800) return; // 剛澆過這次跳過 digitalWrite(RELAY, HIGH); // 水泵/電磁閥通電 delay(sec * 1000); digitalWrite(RELAY, LOW); // 斷電斷水 lastWater millis() / 1000; }把數據搬上云連 Wi-Fi、報 JSON、手機隨時查這一步讓 ESP32 上網讀數就能源源不斷流向你的手機人不在地頭也能查。把 ESP32 接到家里路由器ESP32 以 Wi-Fi 客戶端STA 模式相當于一臺連你家路由器的筆記本接入局域網連不上就每 300 毫秒重試15 秒內放棄這輪void connectWiFi() { WiFi.begin(家里WiFi名, WiFi密碼); while (WiFi.status() ! WL_CONNECTED millis() 15000) delay(300); }一條 JSON 搞定上報每輪采集完把土壤濕度、溫度、濕度、是否澆水打包成一個 JSON 發給接收端家里一臺小主機、NAS 都行接收端順手搭個網頁就是監控界面// 一輪數據打包成 JSON 發給服務器 void report(float soil, float temp, float hum, bool watered) { if (WiFi.status() ! WL_CONNECTED) connectWiFi(); // 掉線就重連 HTTPClient http; http.begin(http://192.168.31.100:8080/collect); // 換成你的服務器地址 http.addHeader(Content-Type, application/json); String body {\soil\: String(soil, 1) ,\temp\: String(temp, 1) ,\hum\: String(hum, 1) ,\watered\: (watered ? 1 : 0) }; http.POST(body); http.end(); }倉庫里還有 WebServer 庫和一批示例想讓 ESP32 自己出網頁頁面的照著抄就行。野外生存續航與可靠性一次說清菜地里沒插座電要省著花設備還得淋雨不壞這一節把三件事一次辦完。第一件是深睡。深睡芯片把自己大部分斷電、只留鬧鐘的模式是 ESP32 省電的殺手锏測完一輪就睡 30 分鐘到點自動醒來平均電流能壓到幾毫安。這三行 API 和倉庫 DeepSleep 示例里的用法完全一致// 干完一輪活睡 30 分鐘到點自己醒 void sleepAWhile() { Serial.flush(); // 把串口尾巴發完 esp_sleep_enable_timer_wakeup(1800ULL * 1000000); // 定時器喚醒單位微秒 esp_deep_sleep_start(); // 從這里開始掉電入睡 }第二件是傳感器分時供電用 GPIO14 經一個小 MOS 管控制傳感器 5V測量時拉高通電、讀完拉低斷電傳感器待機功耗直接歸零。 注意傳感器冷啟動要一兩百毫秒通電后 delay 一下再讀。第三件是防水封裝ESP32 和繼電器塞進帶密封膠圈的防水盒探針和盒子的接縫用熱縮管防水膠帶封死盒內放一包干燥劑。探針是唯一露在外面的部件選它的時候認準不銹鋼探針的電容式模塊。常見翻車點照著這份清單排讀數漂移、毛刺大先確認接的是 AO 不是 DO平均次數從 10 提到 20模塊探針根部補一塊濾波電容。繼電器咔噠響但不吸合供電電流不夠繼電器必須獨立 5V 供電并和大功率負載共地。澆水瞬間整板重啟、Wi-Fi 掉線繼電器吸合的沖擊電流把 5V 拉崩了電源換足流的串口能看到重啟記錄就能確診。Wi-Fi 掉線不回來把report()里的掉了就重連放在每輪上報前執行別只連一次。睡醒后讀數不對DHT11 和土壤模塊都要等穩定再讀醒來后先給個 1 秒的穩定時間。讀數紋絲不動大概率插到了非 ADC 腳或把信號插到了數字口記住 GPIO34 只能輸入。下一步去哪玩想擴就沿著這幾個方向走多路繼電器分區灌溉、調天氣 API 雨天免澆、ESP-NOW 或 LoRa 把設備鋪到整片地、用倉庫自帶的 SD 庫在板子上落一份歷史日志。先把你那臺單區版跑穩一周再動別的地方。延伸閱讀倉庫內真實路徑WiFi 庫HTTPClient 庫WebServer 庫DeepSleep 定時器喚醒示例AnalogRead 模擬量讀取示例現在就動手把開發板和土壤模塊找出來按上面三組線接好跑一遍自測程序——串口里跳出第一個會隨干濕變化的數字時你的 ESP32 智能灌溉系統就已經活了一半。【免費下載鏈接】arduino-esp32Arduino core for the ESP32 family of SoCs項目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32創作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考