ESP32 Pflanzenbewässerung bauen – Smart Plant Monitor mit Sensor, Display & Webserver

ESP32 Pflanzenbewässerung bauen – Smart Plant Monitor mit Sensor, Display & Webserver

In diesem ESP32 Pflanzenbewässerung Projekt baust du ein intelligentes System zur automatischen Bewässerung deiner Pflanzen. Der ESP32 misst die Bodenfeuchtigkeit, zeigt die Werte auf einem OLED-Display an und startet bei trockener Erde automatisch eine Pumpe.

Dieses Projekt eignet sich ideal für Fortgeschrittene, die bereits erste Erfahrungen mit Mikrocontrollern gesammelt haben und nun mit IoT, Sensorik und Webservern arbeiten möchten.

 

Projektidee

In diesem Projekt erstellen wir eine smarte Pflanzenüberwachung mit automatischer Bewässerung.

Der ESP32 liest die Werte eines Bodenfeuchtigkeitssensors aus, zeigt diese lokal auf einem OLED-Display an und stellt die Daten zusätzlich über einen lokalen Webserver im Browser dar.

Sobald die Erde zu trocken ist, wird automatisch eine kleine Pumpe aktiviert.

Dabei lernst du:

  • wie ein ESP32 mit WLAN arbeitet

  • wie Sensordaten eingelesen und verarbeitet werden

  • wie man eine HTML-Webseite direkt auf dem Mikrocontroller bereitstellt

  • wie man eine automatische Aktion bei bestimmten Messwerten ausführt

 

Benötigte Komponenten

Für dieses Projekt brauchst du folgende Bauteile:

  • ESP32 DevKit V4

  • kapazitiver Bodenfeuchtigkeitssensor

  • 0,96 Zoll OLED Display

  • kleine Luftpumpe oder Mini-Pumpe

  • Treiberstufe für die Pumpe
    z. B. Relaismodul oder MOSFET-Modul

  • Schlauch

  • Wasserbehälter oder Wasserflasche

  • Jumper-Kabel

  • Breadboard

  • Netzteil zur dauerhaften Versorgung

Optional:

  • passendes Gehäuse für den ESP32

  • Befestigung für Sensor oder Display

 

Theoretische Grundlagen (kurz erklärt)

Der ESP32 ist ein leistungsstarker Mikrocontroller mit integriertem WLAN.

Er kann:

  • Sensordaten erfassen

  • Programme ausführen

  • Displays ansteuern

  • sich mit einem Netzwerk verbinden

  • eine kleine Webseite bereitstellen

Dadurch eignet sich der ESP32 perfekt für IoT-Projekte.

 

Bodenfeuchtigkeitssensor

Der Feuchtigkeitssensor misst, wie viel Feuchtigkeit sich in der Erde befindet.

Wichtig:

  • der Sensor wird in die Blumenerde gesteckt

  • je nach Feuchtigkeit ändert sich der Messwert

  • trockene Erde bedeutet: Pflanze muss gegossen werden

Hinweis:

  • platziere den Wasserauslass nicht direkt neben dem Sensor

  • sonst misst der Sensor direkt nach dem Gießen kurzfristig einen zu hohen Wert

 

OLED Display

Das 0,96 Zoll OLED Display zeigt wichtige Informationen direkt am System an.

Zum Beispiel:

  • aktuellen Feuchtigkeitswert

  • Status der Bewässerung

  • Trocken / Optimal / Nass

Ein OLED Display ist kompakt und eignet sich sehr gut für Embedded-Projekte.

 

Pumpe

Die Pumpe übernimmt die automatische Bewässerung.

Wichtig:

  • die Pumpe sollte nicht direkt am ESP32 angeschlossen werden

  • der ESP32 liefert nur ein Steuersignal

  • die eigentliche Last wird über ein Relais oder MOSFET-Modul geschaltet

Das ist wichtig, damit der Mikrocontroller nicht beschädigt wird.

 

Schaltung aufbauen

Baue die Schaltung entsprechend deiner Skizze auf.

(Schaltbilder erstellt mit Cirkit Designer)

Beispielhafte Pinbelegung:

Bodenfeuchtigkeitssensor

  • VCC → 3.3V

  • GND → GND

  • AO → GPIO 34

OLED Display (I2C)

  • VCC → 3.3V

  • GND → GND

  • SDA → GPIO 21

  • SCL → GPIO 22

Pumpensteuerung

  • Steuersignal → GPIO 26

 

Entwicklungsumgebung

Für dieses Projekt kannst du die Arduino IDE verwenden.

Damit kannst du:

  • den ESP32 programmieren

  • den Code hochladen

  • Bibliotheken einbinden

  • den Webserver direkt im Mikrocontroller umsetzen

Für dieses Projekt brauchst du also keine zusätzliche Entwicklungsumgebung wie Visual Studio Code.

 

HTML kurz erklärt

Für die Darstellung der Messwerte im Browser verwenden wir HTML.

HTML ist die Standardsprache, mit der Webseiten aufgebaut werden.

Mit HTML kann man zum Beispiel:

  • Überschriften anzeigen

  • Texte strukturieren

  • Werte darstellen

  • Balken, Farben und Statusanzeigen aufbauen

In unserem Projekt wird die HTML-Seite direkt vom ESP32 erzeugt und im Browser angezeigt.

Das bedeutet:

  • kein externer Server

  • keine Cloud

  • keine zusätzliche Webseite nötig

Der ESP32 übernimmt alles selbst.

 

Arduino Code

Der folgende Code:

  • verbindet den ESP32 mit dem WLAN

  • liest den Feuchtigkeitssensor aus

  • zeigt die Werte auf dem OLED Display an

  • schaltet die Pumpe bei trockener Erde

  • startet einen lokalen Webserver

 

ESP32 Bewässerungssystem Code
#include <WiFi.h>
#include <WebServer.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, Wire, OLED_RESET);

const char* ssid = "DEIN_WLAN_NAME";
const char* password = "DEIN_WLAN_PASSWORT";

WebServer server(80);

const int sensorPin = 34;
const int pumpPin = 26;

// Messbereich anpassen
const int dryValue = 3200;
const int wetValue = 1400;

// Schwelle für automatisches Gießen
const int wateringThreshold = 35;

int moisturePercent = 0;
String moistureStatus = "Unbekannt";
bool pumpActive = false;

int mapMoisture(int rawValue) {
  int percent = map(rawValue, dryValue, wetValue, 0, 100);
  percent = constrain(percent, 0, 100);
  return percent;
}

void updateMoistureData() {
  int sensorValue = analogRead(sensorPin);
  moisturePercent = mapMoisture(sensorValue);

  if (moisturePercent < wateringThreshold) {
    moistureStatus = "Zu trocken";
    digitalWrite(pumpPin, HIGH);
    pumpActive = true;
    delay(2000);
    digitalWrite(pumpPin, LOW);
    pumpActive = false;
  } else if (moisturePercent < 55) {
    moistureStatus = "Okay";
  } else {
    moistureStatus = "Feucht";
  }
}

String getColor() {
  if (moisturePercent < wateringThreshold) {
    return "#e53935";
  } else if (moisturePercent < 55) {
    return "#f9a825";
  } else {
    return "#43a047";
  }
}

void handleRoot() {
  updateMoistureData();

  String html = "<!DOCTYPE html><html><head><meta charset='UTF-8'>";
  html += "<meta name='viewport' content='width=device-width, initial-scale=1.0'>";
  html += "<title>Plant Monitor</title>";
  html += "<style>";
  html += "body{font-family:Arial,sans-serif;background:#f4f7f5;padding:20px;color:#222;}";
  html += ".card{max-width:500px;margin:auto;background:white;padding:20px;border-radius:16px;box-shadow:0 4px 12px rgba(0,0,0,0.1);}";
  html += ".title{font-size:28px;font-weight:bold;margin-bottom:10px;}";
  html += ".subtitle{margin-bottom:20px;color:#555;}";
  html += ".bar-container{width:100%;height:28px;background:#ddd;border-radius:20px;overflow:hidden;position:relative;margin-top:10px;}";
  html += ".bar{height:100%;width:" + String(moisturePercent) + "%;background:" + getColor() + ";}";
  html += ".threshold{position:absolute;left:" + String(wateringThreshold) + "%;top:0;height:100%;width:3px;background:#000;}";
  html += ".status{font-size:20px;font-weight:bold;margin-top:16px;}";
  html += ".value{font-size:36px;font-weight:bold;margin-top:10px;}";
  html += ".info{margin-top:14px;color:#444;}";
  html += "</style></head><body>";
  html += "<div class='card'>";
  html += "<div class='title'>🌱 Plant Monitor</div>";
  html += "<div class='subtitle'>ESP32 Bewässerungssystem mit Webserver</div>";
  html += "<div class='value'>" + String(moisturePercent) + "%</div>";
  html += "<div class='bar-container'><div class='bar'></div><div class='threshold'></div></div>";
  html += "<div class='status'>Status: " + moistureStatus + "</div>";
  html += "<div class='info'>Schwellwert für Bewässerung: " + String(wateringThreshold) + "%</div>";

  if (moisturePercent < wateringThreshold) {
    html += "<div class='info'><strong>Pflanze wird gegossen oder muss gegossen werden.</strong></div>";
  } else {
    html += "<div class='info'><strong>Feuchtigkeit im normalen Bereich.</strong></div>";
  }

  html += "</div></body></html>";

  server.send(200, "text/html", html);
}

void updateDisplay() {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);

  display.setCursor(0, 0);
  display.println("Plant Monitor");

  display.setCursor(0, 18);
  display.print("Feuchte: ");
  display.print(moisturePercent);
  display.println("%");

  display.setCursor(0, 34);
  display.print("Status:");
  display.setCursor(0, 46);
  display.println(moistureStatus);

  display.display();
}

void setup() {
  Serial.begin(115200);

  pinMode(pumpPin, OUTPUT);
  digitalWrite(pumpPin, LOW);

  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    while (true);
  }

  display.clearDisplay();
  display.display();

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }

  server.on("/", handleRoot);
  server.begin();
}

void loop() {
  updateMoistureData();
  updateDisplay();
  server.handleClient();
  delay(1000);
}

 

Was der Code macht

Der Code übernimmt mehrere Aufgaben gleichzeitig:

  • liest den Bodenfeuchtigkeitssensor

  • berechnet daraus einen Feuchtigkeitswert in Prozent

  • zeigt den Wert auf dem OLED Display

  • erstellt eine lokale HTML-Webseite

  • prüft, ob die Erde zu trocken ist

  • aktiviert bei Bedarf die Pumpe

Wichtig:

  • die Werte für dryValue und wetValue müssen je nach Sensor angepasst werden

  • diese Werte können sich von Sensor zu Sensor leicht unterscheiden

 

HTML-Darstellung im Browser

Wenn der ESP32 mit deinem WLAN verbunden ist, kannst du im Browser die lokale IP-Adresse des Mikrocontrollers aufrufen.

Dann erscheint ein kleines Dashboard mit:

  • Pflanzenstatus

  • Feuchtigkeitswert in Prozent

  • farbiger Balkenanzeige

  • Bewässerungshinweis

Die Anzeige funktioniert direkt über den ESP32.

 

Ergebnis

Wenn alles richtig aufgebaut ist, hast du jetzt ein intelligentes Pflanzen-Bewässerungssystem.

Das System kann:

  • die Bodenfeuchtigkeit überwachen

  • die Werte lokal anzeigen

  • eine kleine Webseite bereitstellen

  • bei trockener Erde automatisch bewässern

Damit hast du ein echtes IoT-Projekt mit praktischem Nutzen umgesetzt.

 

Was du aus diesem Projekt gelernt hast

Mit diesem Projekt hast du viele wichtige Grundlagen kombiniert:

  • ESP32 mit WLAN verwenden

  • Sensordaten einlesen

  • Messwerte verarbeiten

  • einen Webserver auf dem Mikrocontroller betreiben

  • HTML zur Darstellung von Daten nutzen

  • ein OLED Display ansteuern

  • eine automatische Steuerung mit Pumpe umsetzen

Das ist ein sehr guter Einstieg in die Bereiche:

  • IoT

  • Embedded Systems

  • Smart Devices

 

Hinweise aus der Praxis

Achte bei diesem Projekt auf ein paar wichtige Punkte:

  • die Pumpe nicht direkt am ESP32 anschließen

  • immer ein Relais oder MOSFET-Modul verwenden

  • den Wasserauslass nicht direkt neben dem Sensor platzieren

  • die Schwellwerte vorher testen und kalibrieren

  • die automatische Bewässerung anfangs unter Aufsicht prüfen

 

Nächster Schritt

Möchtest du dein Projekt sauber und geschützt aufbauen?

Für einen dauerhaften Einsatz empfiehlt es sich, den ESP32 in einem passenden ESP32 Gehäuse zu verbauen, um die Elektronik vor äußeren Einflüssen zu schützen und das Projekt sauber aufzubauen.

ESP32 DevKit V4

ESP32 DevKit V4

Passendes 3D-gedrucktes Gehäuse für dein ESP32 DevKit V4 – ideal für einen sauberen, geschützten und professionellen Aufbau deines Projekts.

Jetzt kaufen
Befestigungsplatte

Befestigungsplatte

Praktische Befestigungsplatte für Development Boards und Elektronikprojekte – ideal für eine ordentliche und stabile Montage.

Jetzt kaufen

 

Verwendete Hardware

Wenn du dieses Projekt nachbauen möchtest:

  • ESP32 DevKit V4

  • kapazitiver Bodenfeuchtigkeitssensor

  • OLED 0,96 Zoll Display

  • Mini-Pumpe

  • Relais- oder MOSFET-Modul

  • Breadboard

  • Jumper-Kabel

  • Netzteil

 

Hinweis: Die in diesem Beitrag gezeigten Projekte dienen als Inspiration und Beispiel. Die Umsetzung erfolgt auf eigene Verantwortung. Für eventuelle Fehler oder daraus entstehende Schäden wird keine Haftung übernommen.