ESP32 Tutorial 35/55 - Plantenmonitor, bodem, temperatuur en licht | SunFounder's ESP32 IoT-leerkit
In deze tutorial bouwen we een plantmonitor met behulp van de ESP32-microcontroller uit de SunFounder ESP32 IoT-leerset. Dit project combineert verschillende componenten om bodemvocht, temperatuur, luchtvochtigheid en lichtniveaus te bewaken. Aan het einde van deze handleiding heb je een volledig functionerend systeem dat deze kritieke parameters voor plantverzorging kan beheren en weergeven. Voor een gedetailleerde visuele uitleg, bekijk zeker de video (in video op 00:00).

Hardware uitgelegd
De belangrijkste componenten die in dit project worden gebruikt, zijn de ESP32-microcontroller, DHT11-sensor, bodemvochtsensor, lichtafhankelijke weerstand (LDR) en een LCD-scherm voor het weergeven van gegevens. De ESP32 fungeert als het brein van de opstelling en verzorgt gegevensverwerking en besturingstaken. Het heeft ingebouwde Wi-Fi en Bluetooth, wat connectiviteitsopties biedt voor bewaking op afstand.
De DHT11-sensor meet temperatuur en luchtvochtigheid, terwijl de bodemvochtsensor het vochtgehalte in de bodem detecteert. De LDR meet de omgevingslichtintensiteit, wat inzicht geeft in de lichtomstandigheden van de plant. Elk onderdeel speelt een cruciale rol bij het waarborgen van de gezondheid van de plant door realtime gegevens te leveren.
Datasheetdetails
| Fabrikant | SunFounder |
|---|---|
| Onderdeelnummer | DHT11 |
| Logica/IO-spanning | 3,3 V |
| Voedingsspanning | 5 V |
| Uitgangsstroom (per kanaal) | 20 mA |
| Piekstroom (per kanaal) | 50 mA |
| PWM-frequentierichtlijn | N.v.t. |
| Ingangslogische drempels | 0,3 VCC (laag), 0,7 VCC (hoog) |
| Spanningsval / RDS(on) / verzadiging | N.v.t. |
| Thermische limieten | 0°C tot 50°C |
| Behuizing | DIP |
| Opmerkingen / varianten | Compatibel met DHT22 |
- Zorg voor de juiste spanningsniveaus voor elk onderdeel (5V voor de motordriver, 3,3V voor sensoren).
- Gebruik pull-downweerstanden voor drukknoppen om zwevende ingangen te voorkomen.
- Houd de bedrading netjes om verwarring en mogelijke kortsluiting te voorkomen.
- Controleer de verbindingen voordat u het circuit van stroom voorziet om schade te voorkomen.
- Controleer de DHT11-bedrading, omdat deze gevoelig is voor onjuiste verbindingen.
Bedradingsinstructies

Om de componenten te bedraden, begint u met het aansluiten van de stroom- en aardlijnen. De ESP32 moet worden gevoed met een lithiumbatterij, waarbij de positieve pool op de VCC-lijn en de aarde op de GND-lijn op het breadboard wordt aangesloten. De datapin van de DHT11-sensor wordt aangesloten op PIN 13, terwijl de VCC naar de 3,3V-lijn gaat en GND naar de aarde. De bodemvochtsensor wordt op dezelfde manier aangesloten: het signaalpin op PIN 14, VCC op 3,3V en GND op aarde.
Voor de LDR sluit u één pin aan op de 3,3V-lijn en de andere op PIN 35, met een 10k ohm-weerstand die van de LDR naar aarde is aangesloten. Het LCD-scherm wordt aangesloten op de 5V-lijn voor stroom en gebruikt SDA- en SCL-pinnen die respectievelijk zijn aangesloten op PIN 21 en PIN 22. Sluit ten slotte de drukknop aan op PIN 32 met de pull-downweerstand die naar aarde is aangesloten, zodat deze laag leest wanneer niet ingedrukt en hoog wanneer ingedrukt.
Codevoorbeelden & uitleg
De kern van ons programma begint met het definiëren van de pinnen voor elk onderdeel. DHTPIN wordt bijvoorbeeld toegewezen aan PIN 13 voor de DHT11-sensor, terwijl MOIS_PIN is ingesteld op PIN 14 voor de vochtsensor. Deze organisatie helpt bij het bijhouden welke sensor op welke pin is aangesloten.
#define DHTPIN 13 // Stel de pin in die is aangesloten op de DHT11-datapin
#define MOIS_PIN 14 // Bodemvochtmodule
#define LIGHT_PIN 35 // Fotoweerstand
Vervolgens initialiseren we de DHT-sensor en het LCD-scherm in de setup()-functie. Dit is cruciaal omdat het deze componenten voorbereidt op gebruik. Zorg ervoor dat u dht.begin() aanroept; dit is essentieel zodat de DHT-sensor correct waarden kan gaan lezen.
void setup() {
Serial.begin(115200);
dht.begin(); // Initialiseer de DHT11
lcd.init(); // Initialiseer het LCD
lcd.backlight();
}
In de loop()-functie lezen we continu de temperatuur- en luchtvochtigheidswaarden en geven deze weer op het LCD. Als de knop wordt ingedrukt, wordt de motor geactiveerd om de planten water te geven. Deze logica gebruikt de digitale uitlezing van de knop-pin om te bepalen of de motor aan of uit moet.
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (digitalRead(BUTTON) == HIGH) {
digitalWrite(motor1A, HIGH); // Zet de waterpomp aan
} else {
digitalWrite(motor1A, LOW); // Zet de waterpomp uit
}
delay(2000);
}
Deze codestructuur zorgt voor een duidelijke stroom van gegevens en besturing, zodat de plantmonitor soepel functioneert. Voor meer details staat de volledige code hieronder in het artikel.
Demonstratie / Wat te verwachten
Na het voltooien van de installatie en het uploaden van de code, zou de LCD afwisselend temperatuur- en luchtvochtigheidsmetingen moeten weergeven met vochtigheids- en lichtniveaus. Wanneer de drukknop wordt ingedrukt, moet de waterpomp activeren en water aan de plant leveren. Zorg ervoor dat alle verbindingen stevig zijn om problemen zoals zwevende ingangen of onjuiste metingen te voorkomen (in video op 05:30).
Het controleren van de waarden op de LCD en de seriële monitor helpt ervoor te zorgen dat het systeem correct functioneert. Als u problemen tegenkomt, controleer dan de bedrading opnieuw en zorg ervoor dat alle componenten op de juiste manier van stroom worden voorzien.
Videotijdstempels
- 00:00 Start
- 2:23 Projectintroductie
- 4:02 Documentatiepagina
- 7:43 1-L293D Pompmotor driver
- 14:30 2-Drukknop voor pomp
- 16:35 3-DHT11 Temperatuur- en luchtvochtigheidssensor
- 19:26 4-Vochtigheidssensor
- 21:43 5-Lichtsensor
- 24:47 6-Bodemvochtigheidssensor
- 26:01 Volledige Plant Monitor Arduino-code
- 29:21 Demonstratie
#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
Dingen die je misschien nodig hebt
-
AmazonPurchase LCD1602-I2C from Amazonamzn.to
-
eBayPurchase LCD1602-I2C from eBayebay.us
-
AliExpressPurchase 10pcs LCD1602-I2C from AliExpresss.click.aliexpress.com
Hulpmiddelen en referenties
-
DocumentatieESP32 Tutorial 35/55- SunFounder doc page plant monitordocs.sunfounder.com
Bestanden📁
Fritzing-bestand
-
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