ESP32 教學 35/55 - 植物監測器,土壤、溫度同光線 | SunFounder 嘅 ESP32 IoT 學習套件
喺呢個教學入面,我哋會用SunFounder ESP32 IoT學習套件入面嘅ESP32微控制器嚟整一個植物監測器。呢個項目結合咗幾個組件嚟監測土壤濕度、溫度、濕度同光線水平。完成呢個指南之後,你就會有一個功能齊全嘅系統,可以管理同顯示呢啲對植物護理好重要嘅參數。想睇詳細嘅視覺解釋,記得睇吓條片(片入面00:00位置)。

硬件講解
呢個項目用到嘅主要組件包括ESP32微控制器、DHT11感測器、土壤濕度感測器、光敏電阻(LDR),同埋一個用嚟顯示數據嘅LCD。ESP32係成個設置嘅大腦,負責數據處理同控制工作。佢內置Wi-Fi同藍牙,提供遙距監測嘅連接選項。
DHT11感測器量度溫度同濕度,而土壤濕度感測器就偵測土壤入面嘅濕度水平。LDR量度環境光線強度,等我哋可以了解植物嘅光照條件。每個組件都扮演住重要角色,透過提供實時數據嚟確保植物健康。
數據手冊詳情
| 製造商 | SunFounder |
|---|---|
| 零件編號 | DHT11 |
| 邏輯/IO電壓 | 3.3 V |
| 供電電壓 | 5 V |
| 輸出電流(每通道) | 20 mA |
| 峰值電流(每通道) | 50 mA |
| PWM頻率指引 | 不適用 |
| 輸入邏輯閾值 | 0.3 VCC(低),0.7 VCC(高) |
| 電壓降 / RDS(on) / 飽和 | 不適用 |
| 熱限制 | 0°C至50°C |
| 封裝 | DIP |
| 備註 / 變體 | 兼容DHT22 |
- 確保每個組件嘅電壓水平正確(摩打驅動器用5V,感測器用3.3V)。
- 為按鈕使用下拉電阻,防止浮動輸入。
- 保持接線整齊,避免混亂同潛在短路。
- 通電之前檢查接線,防止損壞。
- 檢查DHT11接線,因為佢對錯誤連接好敏感。
接線說明

要接駁組件,首先連接電源同接地線。ESP32應該用鋰電池供電,將正極端子連接到麵包板上嘅VCC線,接地連接到GND線。DHT11感測器嘅數據引腳連接到PIN 13,而佢嘅VCC就去3.3V線,GND就去接地。土壤濕度感測器嘅接法類似:訊號引腳去PIN 14,VCC去3.3V,GND去接地。
對於LDR,將一個引腳連接到3.3V線,另一個連接到PIN 35,同時用一個10k歐姆電阻從LDR連接到接地。LCD顯示屏連接到5V線供電,並使用SDA同SCL引腳分別連接到PIN 21同PIN 22。最後,將按鈕連接到PIN 32,下拉電阻連接到接地,確保佢冇撳嘅時候讀到低電平,撳嘅時候讀到高電平。
代碼示例同講解
我哋程式嘅核心由定義每個組件嘅引腳開始。例如,DHTPIN分配畀PIN 13用於DHT11感測器,而MOIS_PIN設定為PIN 14用於濕度感測器。呢種組織方式有助於追蹤邊個感測器連接邊個引腳。
#define DHTPIN 13 // 設定連接到DHT11數據引腳嘅引腳
#define MOIS_PIN 14 // 土壤濕度模組
#define LIGHT_PIN 35 // 光敏電阻
接下來,我哋喺setup()函數入面初始化DHT感測器同LCD顯示屏。呢個好重要,因為佢準備好呢啲組件畀操作使用。一定要呼叫dht.begin(),DHT感測器先可以正確開始讀取數值。
void setup() {
Serial.begin(115200);
dht.begin(); // 初始化DHT11
lcd.init(); // 初始化LCD
lcd.backlight();
}
喺loop()函數入面,我哋持續讀取溫度同濕度數值,並顯示喺LCD上面。如果撳咗按鈕,摩打就會啟動嚟澆水。呢個邏輯用數碼讀取按鈕引腳嚟決定開定關摩打。
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (digitalRead(BUTTON) == HIGH) {
digitalWrite(motor1A, HIGH); // 開水泵
} else {
digitalWrite(motor1A, LOW); // 關水泵
}
delay(2000);
}
呢個代碼結構令數據同控制流程清晰,確保植物監測器運作順暢。想知更多詳情,完整代碼喺文章下面載入。
示範 / 預期效果
完成設定同上載代碼之後,LCD應該會交替顯示溫度同濕度讀數,以及土壤濕度同光線水平。撳下按鈕嘅時候,水泵應該會啟動,將水送到植物度。確保所有連接穩固,避免浮動輸入或者錯誤讀數等問題(影片05:30度有講)。
監察LCD同序列監視器顯示嘅數值,有助確保系統正常運作。如果遇到問題,請檢查接線,並確保所有零件都有適當供電。
影片時間戳
- 00:00 開始
- 2:23 項目介紹
- 4:02 文檔頁面
- 7:43 1-L293D水泵馬達驅動器
- 14:30 2-水泵用按鈕
- 16:35 3-DHT11溫度同濕度感測器
- 19:26 4-土壤濕度感測器
- 21:43 5-光線感測器
- 24:47 6-土壤濕度感測器
- 26:01 完整植物監測器Arduino代碼
- 29:21 示範
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 13 // Set the pin connected to the DHT11 data pin
#define MOIS_PIN 14 // Soil mOisture module
#define LIGHT_PIN 35 // Photoresistor
#define motor1A 27 // Pump pin
#define motor2A 26 // Pump pin
#define BUTTON 32 // Button
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
int page = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
// Initialize the dht11
dht.begin();
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.clear();
// initialize digital pin as an output.
pinMode(motor1A, OUTPUT);
pinMode(motor2A, OUTPUT);
pinMode(BUTTON, INPUT);
}
void loop() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (it's a very slow sensor)
float humidity = dht.readHumidity();
// Read temperature as Celsius (the default)
float temperature = dht.readTemperature();
// Check if any reads failed and exit early (to try again).
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
lcd.clear();
// Show message per 2 second
if ((page++) % 2) {
// Display temperature and humidity
lcd.setCursor(0, 0);
lcd.print("Humi: ");
lcd.print(humidity);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print("\xDF");
lcd.print("C");
} else {
// Display moisture and light sensor values
lcd.setCursor(0, 0);
lcd.print("Mois: ");
lcd.print(analogRead(MOIS_PIN));
lcd.setCursor(0, 1);
lcd.print("Light: ");
lcd.print(analogRead(LIGHT_PIN));
}
// Water plant while button pressed
Serial.println(digitalRead(BUTTON));
if (digitalRead(BUTTON) == HIGH) {
// Turn on water pump if button is pressed
digitalWrite(motor1A, HIGH);
digitalWrite(motor2A, LOW);
} else {
// Turn off water pump if button is not pressed
digitalWrite(motor1A, LOW);
digitalWrite(motor2A, LOW);
}
delay(2000);
}
Common Course Links
Common Course Files
你可能需要嘅嘢
-
亞馬遜Purchase LCD1602-I2C from Amazonamzn.to
-
易贝Purchase LCD1602-I2C from eBayebay.us
-
阿里巴巴速卖通Purchase 10pcs LCD1602-I2C from AliExpresss.click.aliexpress.com
資源與參考資料
-
文件记录ESP32 Tutorial 35/55- SunFounder doc page plant monitordocs.sunfounder.com
文件📁
Fritzing 文件
-
DHT11 Humitidy and Temperature Sensor (3 pins)
DHT11 Humitidy and Temperature Sensor (3 pins).fzpz0.20 MB -
LCD LCD1602-I2C module with 4 wires
LCD1602-I2C.fzpz0.01 MB