ESP32 自動澆水系統教學:土壤感測器 V2.0 + 繼電器完整接線與程式範例

你是否常常因為忙碌,而忘記幫植物澆水?
或是澆得太勤,反而讓根部泡爛?

自動澆水系統正是為了解決這些困擾而生。透過土壤濕度感測器搭配 ESP32,你可以打造一個「會自己判斷植物口渴」的智慧灌溉系統。

ESP32 具備 WiFi、藍牙、類比輸入、PWM 等功能,非常適合作為 IoT 澆水系統的核心。

本次教學所需材料清單

ESP32 開發板

支援 WiFi/藍牙,最適合作為智慧控制主板。

土壤濕度感測器 V2.0

本次使用新版 V2.0,更耐用、輸出更穩定。

5V 繼電器模組

用來控制水泵或電磁閥。

水泵 / 電磁閥(任一即可)

用來進行實際的澆水動作。

杜邦線、USB 傳輸線

用於接線與供電。

購買材料優良廠家推薦:

ESP32+土壤感測器+繼電器接線

ESP32+土壤感測器接線,請連結此篇教學:使用 ESP32 讀取土壤濕度:感測器 V2.0 詳細接線與程式教學

ESP32+繼電器接線,請連結此篇教學:【2025最新】從零開始學會繼電器插座安裝與接線教學

ESP32 自動澆水完整程式碼

				
					
#include <SimpleDHT.h>
#include "Wire.h"
#include "U8g2lib.h"  //OLED 螢幕解析度為128*64

const int Light = 36;     //光敏電阻腳位36,變數為"Light"
const int LED = 2;        //LED燈內建腳位2,變數為"LED"
const int pinDHT11 = 16;  //DHT11溫度感測器腳位16,變數為"pinDHT11"
const int dry = 3000;     //土壤濕度感測到乾燥值為3000
const int wet = 1165;     //土壤濕度感測到濕度值為1165
const int relay = 5;      //繼電器腳位5,變數為"relay"W

SimpleDHT11 dht11(pinDHT11);
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE);


void setup() {
  Serial.begin(115200);
  pinMode(LED, OUTPUT);    //設定LED作為輸出
  pinMode(Light, INPUT);   //Light作為輸入
  pinMode(relay, OUTPUT);  //relay作為輸出

  u8g2.begin();                                //初始化
  u8g2.enableUTF8Print();                      //啟用 UTF8字集
  u8g2.setFont(u8g2_font_unifont_t_chinese1);  //設定使用中文字形
  u8g2.setDrawColor(1);                        //設定顏色,我們是單色只有1
  u8g2.setFontPosTop();                        //座標從上開始
  u8g2.setFontDirection(0);                    //0不旋轉、1->90、2->180、3->270
  pinMode(32, OUTPUT);
}

void loop() {
  byte temperature = 0;
  byte humidity = 0;
  int err = SimpleDHTErrSuccess;
  if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
    Serial.print("Read DHT11 failed, err=");
    Serial.print(SimpleDHTErrCode(err));
    Serial.print(",");
    Serial.println(SimpleDHTErrDuration(err));
    delay(1000);
    return;
  }

  int LightValue;                  //宣告整數變數"LightValue"
  LightValue = analogRead(Light);  //讀取Light的數值放在LightValue
  Serial.println(LightValue);      //LightValue顯示在序列視窗

  if (LightValue < 600) {  //如果LightValue值小於600時,LED就開啟,否則LED是關閉的
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }

  int sensorVal = analogRead(4);                              //土壤感測器腳位4,變數為sensorVal
  int percentageHumididy = map(sensorVal, wet, dry, 100, 0);  //將感測值比值成1~100%
  if (sensorVal > 3000) {                                     //如果土壤感測器值大於3000時,啟動繼電器,讓水泵澆水
    digitalWrite(relay, HIGH);
    delay(20000);  //澆水20秒
  } else {         //否則繼電器是關閉的
    digitalWrite(relay, LOW);
  }

  Serial.print(percentageHumididy);
  Serial.println("%");

  u8g2.clearBuffer();    //顯示前清除螢幕
  u8g2.setCursor(0, 5);  //移動游標
  u8g2.print("溫濕度:");
  u8g2.print((int)temperature + String("*C"));  //寫入文字
  u8g2.print(String("/"));
  u8g2.print((int)humidity + String("%"));  //寫入文字

  u8g2.setCursor(0, 25);  //移動游標
  u8g2.print("土壤濕度:");
  u8g2.print((int)percentageHumididy + String("%"));  //寫入文字

  u8g2.setCursor(0, 45);   //移動游標
  u8g2.print("亮度:");     //寫入文字
  u8g2.print(LightValue);  //寫入文字

  u8g2.sendBuffer();  //送到螢幕顯示

  delay(100);  //每0.1秒感測一次
}
				
			

測試與除錯技巧

讀值不穩定?

土壤太乾會造成跳動,可加入平均值計算

繼電器跳動?

與 ESP32 共用電源會造成干擾,請使用獨立電源供水泵

水泵不啟動?

繼電器線路反接,電源不足,水泵壞掉

成品示範與運作流程

  1. 感測器讀值低 → 表示乾燥

  2. ESP32 啟動繼電器

  3. 水泵開始送水

  4. 時間到後停止,避免過度澆水

整套系統既簡單又有效,非常適合新手入門 IoT 自動化。

Automatic Watering System (2)
多肉植物-龍舌蘭

結語

透過 ESP32 + 土壤濕度感測器 + 繼電器,你可以輕鬆打造一套智慧澆水系統。不論是陽台植物、香草盆栽或小型實驗田,都能讓你完全解放雙手,讓植物自己「開口要水」。

常見問題 (FAQs)

1. 感測器會不會容易壞?

電阻式感測器浸在土裡確實容易腐蝕,建議每 3–6 個月更換一次。

2. 門檻值應該設多少?

依土壤與植物需求不同,可從 1100~3000 之間測試。

3. ESP32 可以連 WiFi 看資料嗎?

可以!可擴充 MQTT、Blynk、Line Notify。

4. 繼電器一直跳動怎麼辦?

請使用「水泵獨立電源」,不與 ESP32 共用 5V。

5. 可以改成太陽能供電嗎?

可以,只需搭配 18650 + TP4056 + 太陽能板即可。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

返回頂端