Search Code

ESP32 教學 35/55 - 植物監測器,土壤、溫度同光線 | SunFounder 嘅 ESP32 IoT 學習套件

ESP32 教學 35/55 - 植物監測器,土壤、溫度同光線 | SunFounder 嘅 ESP32 IoT 學習套件

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

ESP32-25_plant_moitor_schematic

硬件講解

呢個項目用到嘅主要組件包括ESP32微控制器、DHT11感測器、土壤濕度感測器、光敏電阻(LDR),同埋一個用嚟顯示數據嘅LCD。ESP32係成個設置嘅大腦,負責數據處理同控制工作。佢內置Wi-Fi同藍牙,提供遙距監測嘅連接選項。

光敏電阻
DHT11模組
DHT11模組

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-25_plant_moitor_wiring

要接駁組件,首先連接電源同接地線。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線供電,並使用SDASCL引腳分別連接到PIN 21PIN 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 示範

圖片

DHT11 Module
DHT11 Module
5V DC water pump
5V DC water pump
soil_mositure_module
soil_mositure_module
photoresistor
photoresistor
ESP32-25_plant_moitor_schematic
ESP32-25_plant_moitor_schematic
ESP32-25_plant_moitor_wiring
ESP32-25_plant_moitor_wiring
836-ESP32 Tutorial 35/55- Arduino code for plant monitor
語言: C++
#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);
}

你可能需要嘅嘢

資源與參考資料

文件📁

Fritzing 文件