Tutorial ESP32 35/55 - Monitor de plante, sol, temperatură și lumină | Kitul de învățare IoT ESP32 de la SunFounder
În acest tutorial, vom construi un monitor pentru plante folosind microcontrolerul ESP32 din SunFounder ESP32 IoT Learning Kit. Acest proiect combină mai multe componente pentru a monitoriza umiditatea solului, temperatura, umiditatea aerului și nivelul de lumină. Până la sfârșitul acestui ghid, vei avea un sistem complet funcțional care poate gestiona și afișa acești parametri critici pentru îngrijirea plantelor. Pentru o explicație vizuală detaliată, asigură-te că urmărești videoclipul (în videoclip la 00:00).

Hardware Explicat
Componentele principale utilizate în acest proiect includ microcontrolerul ESP32, senzorul DHT11, senzorul de umiditate a solului, rezistența dependentă de lumină (LDR) și un LCD pentru afișarea datelor. ESP32 servește ca creier al configurației, gestionând procesarea datelor și sarcinile de control. Dispune de Wi-Fi și Bluetooth integrate, oferind opțiuni de conectivitate pentru monitorizare de la distanță.
Senzorul DHT11 măsoară temperatura și umiditatea, în timp ce senzorul de umiditate a solului detectează nivelurile de umiditate din sol. LDR măsoară intensitatea luminii ambientale, permițând informații despre condițiile de iluminare ale plantei. Fiecare componentă joacă un rol crucial în asigurarea sănătății plantei prin furnizarea de date în timp real.
Detalii din Fișa Tehnică
| Producător | SunFounder |
|---|---|
| Număr de piesă | DHT11 |
| Tensiune logică/IO | 3,3 V |
| Tensiune de alimentare | 5 V |
| Curent de ieșire (pe canal) | 20 mA |
| Curent de vârf (pe canal) | 50 mA |
| Ghid de frecvență PWM | N/A |
| Praguri logice de intrare | 0,3 VCC (jos), 0,7 VCC (sus) |
| Cădere de tensiune / RDS(on) / saturație | N/A |
| Limite termice | 0°C până la 50°C |
| Pachet | DIP |
| Note / variante | Compatibil cu DHT22 |
- Asigură niveluri de tensiune adecvate pentru fiecare componentă (5V pentru driverul motorului, 3,3V pentru senzori).
- Folosește rezistențe pull-down pentru butoanele de apăsare pentru a preveni intrările flotante.
- Menține cablurile ordonate pentru a evita confuzia și posibilele scurtcircuite.
- Verifică conexiunile înainte de a alimenta circuitul pentru a preveni deteriorarea.
- Verifică cablarea DHT11, deoarece este sensibil la conexiuni incorecte.
Instrucțiuni de Cablare

Pentru a cabla componentele, începe prin conectarea liniilor de alimentare și de masă. ESP32 ar trebui alimentat cu o baterie cu litiu, conectând terminalul pozitiv la linia VCC și masa la linia GND de pe breadboard. Pinul de date al senzorului DHT11 se conectează la PIN 13, în timp ce VCC-ul său merge la linia de 3,3V și GND la masă. Senzorul de umiditate a solului se conectează similar: pinul său de semnal la PIN 14, VCC la 3,3V și GND la masă.
Pentru LDR, conectează un pin la linia de 3,3V și celălalt la PIN 35, cu o rezistență de 10k ohmi conectată de la LDR la masă. Afișajul LCD se conectează la linia de 5V pentru alimentare și folosește pinii SDA și SCL conectați la PIN 21 și, respectiv, PIN 22. În final, conectează butonul de apăsare la PIN 32 cu rezistența pull-down conectată la masă, asigurându-te că citește nivel jos când nu este apăsat și nivel sus când este apăsat.
Exemple de Cod & Explicații
Miezul programului nostru începe cu definirea pinilor pentru fiecare componentă. De exemplu, DHTPIN este atribuit la PIN 13 pentru senzorul DHT11, în timp ce MOIS_PIN este setat la PIN 14 pentru senzorul de umiditate. Această organizare ajută la urmărirea care senzor este conectat la care pin.
#define DHTPIN 13 // Setează pinul conectat la pinul de date DHT11
#define MOIS_PIN 14 // Modul de umiditate a solului
#define LIGHT_PIN 35 // Fotorezistor
În continuare, inițializăm senzorul DHT și afișajul LCD în interiorul funcției setup(). Acest lucru este crucial, deoarece pregătește aceste componente pentru funcționare. Asigură-te că apelezi dht.begin() este esențial pentru ca senzorul DHT să înceapă să citească valorile corect.
void setup() {
Serial.begin(115200);
dht.begin(); // Inițializează DHT11
lcd.init(); // Inițializează LCD
lcd.backlight();
}
În funcția loop(), citim continuu valorile de temperatură și umiditate, afișându-le pe LCD. Dacă butonul este apăsat, motorul este activat pentru a uda plantele. Această logică folosește citirea digitală a pinului butonului pentru a determina dacă să pornească sau să oprească motorul.
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (digitalRead(BUTTON) == HIGH) {
digitalWrite(motor1A, HIGH); // Pornește pompa de apă
} else {
digitalWrite(motor1A, LOW); // Oprește pompa de apă
}
delay(2000);
}
Această structură de cod permite un flux clar de date și control, asigurând că monitorul pentru plante funcționează fără probleme. Pentru mai multe detalii, codul complet este încărcat mai jos în articol.
Demonstrație / Ce să te aștepți
După finalizarea configurării și încărcarea codului, LCD-ul ar trebui să afișeze citirile de temperatură și umiditate alternativ cu nivelurile de umiditate a solului și lumină. Când butonul este apăsat, pompa de apă ar trebui să se activeze, livrând apă plantei. Asigură-te că toate conexiunile sunt sigure pentru a evita probleme precum intrări flotante sau citiri incorecte (în video la 05:30).
Monitorizarea valorilor afișate pe LCD și pe monitorul serial va ajuta să te asiguri că sistemul funcționează corect. Dacă întâmpini probleme, verifică din nou cablajul și asigură-te că toate componentele sunt alimentate corespunzător.
Marcaje video
- 00:00 Început
- 2:23 Introducerea proiectului
- 4:02 Pagina de documentație
- 7:43 1-Driver motor pompă L293D
- 14:30 2-Buton pentru pompă
- 16:35 3-Senzor de temperatură și umiditate DHT11
- 19:26 4-Senzor de umiditate a solului
- 21:43 5-Senzor de lumină
- 24:47 6-Senzor de umiditate a solului
- 26:01 Cod Arduino complet pentru monitorul plantei
- 29:21 Demonstrație
#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
Lucruri de care ai putea avea nevoie
-
AmazonBuy LCD1602-I2C from Amazonamzn.to
-
eBayPurchase LCD1602-I2C from eBayebay.us
-
AliExpressPurchase 10pcs LCD1602-I2C from AliExpresss.click.aliexpress.com
Resurse și referințe
-
DocumentațieESP32 Tutorial 35/55 - SunFounder doc page for plant monitordocs.sunfounder.com
Fișiere📁
Fișier 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