Table of Contents
Toggle前言
還記得你上次澆水是什麼時候嗎?對於常常忙到忘記照顧植物的朋友來說,一套「智慧植物照護系統」就是救星!本篇教學將一步步帶你用 ESP32 搭配土壤濕度感測器 V2.0、DHT11 與光敏電阻感測器,打造一套能監測植物環境的 DIY 專案。
你將學會:
1️⃣ 如何正確接線
2️⃣ 如何撰寫 Arduino 程式
3️⃣ 監測土壤濕度模組
所需材料清單
以下是本專案所需的主要元件:
| 元件 | 功能說明 |
|---|---|
| ESP32 | 主控板,負責讀取資料與控制邏輯 |
| 土壤濕度感測器 V2.0 | 偵測土壤乾濕程度 |
| DHT11 | 測量溫度與空氣濕度 |
| 光敏電阻感測器 | 偵測環境光線強度 |
| 杜邦線 / 麵包板 / USB 傳輸線 | 接線與供電使用 |
購買材料推薦廠家連結:
ESP32 的優勢與應用
ESP32 不只是「進階版 Arduino」,它擁有:
雙核心處理器與更高的主頻
內建 Wi-Fi / 藍牙
更多 GPIO 腳位
適合各種 IoT(物聯網)應用
因此,用它來打造植物照護系統,可以隨時透過手機或雲端查看植物狀況。
認識土壤濕度感測器 V2.0
感測原理
V2.0 版本採用 電容式測量原理,透過電場變化判斷土壤含水量。相比早期電阻式感測器,它:
不易生鏽、壽命更長
輸出更穩定,不易受鹽分干擾
模組腳位說明
| 腳位 | 功能 |
|---|---|
| VCC | 電源(3.3V–5V) |
| GND | 地線 |
| AOUT | 模擬輸出(乾濕電壓值) |

接線教學
ESP32 與土壤感測器 V2.0 接線
| 感測器腳位 | 連接至 ESP32 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| AOUT | GPIO 4(可讀取類比輸入) |

電容式土壤感測器V2.0偵測乾濕值
首先偵測電容式土壤感測器V2.0偵測到乾濕值,便於接下來顯示百分比,讓我們清楚了解土壤狀況。
從Serial Monitor顯示得知:
- 乾的值=約2920
- 濕的值=約1165
程式如下:
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println(analogRead(4));
delay(100);
}
將乾濕值用map函數換算成%,這map函數詳細說明,可以參考之前文章"【Arduino入門】Arduino可變電阻教學",這便可以輕鬆分辨乾濕度%,更新後程式如下:
const int dry = 2920;
const int wet = 1165;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
int sensorVal = analogRead(4);
int percentageHumididy = map(sensorVal, wet, dry, 100, 0);
Serial.print(percentageHumididy);
Serial.println("%");
delay(100);
}
加入 DHT11 與光敏電阻感測器
請參考這篇文章"DIY 智慧溫室教學:用 ESP32 + 光敏電阻 + DHT11 監測光照與溫濕度",程式加入此篇的土壤感測器程式中,便可設計一組監測土壤濕度的模組。詳細接線程式如下:

#include
#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
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作為輸入
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);
int percentageHumididy = map(sensorVal, wet, dry, 100, 0); //將感測值比對成1~100%
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秒感測一次
}
結果測試與輸出
進階應用:自動澆水系統雛形
當土壤濕度低於設定閾值(例如 30%),可觸發 繼電器控制水泵 進行自動澆水。
這樣一來,即使出門幾天,植物也能安心成長。
將準備一篇詳細說明,如何使用電磁開關啟動抽水馬達,並應用此篇教學,自動幫植物澆水。
結論
透過這個專案,我們學會了如何用 ESP32 整合多個感測器,打造一個能監測土壤濕度、溫濕度與光照的智慧植物系統。
這只是開始——接下來你可以加入 Wi-Fi 上傳、手機控制,甚至用語音助理來開關水泵。科技與自然的結合,就是這麼有趣又充滿創造力!
常見問答(FAQs)
Q1:土壤感測器 V2.0 與早期版本差在哪?
A1:V2.0 採用電容式原理,不會生鏽、壽命更長。
Q2:ESP32 可否同時讀取多個感測器?
A2:可以,ESP32 的 GPIO 足夠,並支援多任務處理。
Q3:感測值是否需校正?
A3:不同土壤特性不同,建議以實測為準再調整 map 範圍。
Q4:可否改用 ESP8266?
A4:可以,但腳位較少、需調整模擬輸入腳。
Q5:如何加上 Wi-Fi 上傳功能?
A5:可結合 Blynk、MQTT 或 ThingSpeak,即時傳送數據至雲端。
