Blog
ESP32 Smart Garden: automatische Bewässerung
Das Problem
Ihre Pflanzen sterben, weil Sie vergessen, sie zu gießen. Oder Sie gießen zu viel und die Wurzeln faulen. Sie brauchen ein System, das weiß, wann Ihre Pflanzen wirklich Durst haben — und sie automatisch gießt.
Mit einem ESP32, einem Bodenfeuchtesensor und einem Relais können Sie einen vollautomatischen Smart Garden bauen, der:
- Die Bodenfeuchte rund um die Uhr überwacht
- Ihre Pflanzen gießt, wenn sie es brauchen (nicht nach festem Zeitplan)
- Ihnen Alarm schickt, wenn der Wassertank leer ist
Was Sie bauen werden
Ein ESP32-gestütztes Bewässerungssystem, das jede Stunde die Bodenfeuchte liest und die Wasserpumpe auslöst, wenn die Erde trocken wird. Optional: WLAN-Anbindung für Fernüberwachung per MQTT.
Schwierigkeit: Einsteiger | Zeit: 45 Minuten | Kosten: ~$35 an Teilen
Benötigte Hardware (Stückliste)
| Teil | Modell | Anzahl | Preis | Kaufen |
|---|---|---|---|---|
| Mikrocontroller | ESP32 DevKitC V4 | 1 | $13.49 | Produkt ansehen |
| Bodenfeuchtesensor | Capacitive Soil Moisture v1.2 | 1 | $4.49 | Produkt ansehen |
| Relais-Modul | 2-Channel 5V Relay | 1 | $5.24 | Produkt ansehen |
| Display | 0.96″ OLED SSD1306 | 1 | $5.99 | Produkt ansehen |
| Breadboard | 830-point | 1 | $4.49 | Produkt ansehen |
| Jumper-Kabel | M-M 40pcs | 1 | $2.99 | Produkt ansehen |
Außerdem brauchen Sie eine Mini-Wasserpumpe (5V, ~$3 in jedem Baumarkt) und Silikonschlauch. Schließen Sie das Pluskabel der Pumpe über das Relais an.
Schritt 1: Verkabelung
ESP32 ↔ Bodenfeuchtesensor
| Sensor-Pin | ESP32-Pin | Hinweis |
|---|---|---|
| VCC | 3V3 | Strom |
| GND | GND | Masse |
| AOUT | GPIO 34 | Analogausgang (ADC1_CH6) |
ESP32 ↔ Relais-Modul
| Relais-Pin | ESP32-Pin | Hinweis |
|---|---|---|
| VCC | 5V/VIN | Strom |
| GND | GND | Masse |
| IN1 | GPIO 26 | Relais-Steuersignal |
ESP32 ↔ OLED-Display
| OLED-Pin | ESP32-Pin | Hinweis |
|---|---|---|
| VCC | 3V3 | Strom |
| GND | GND | Masse |
| SDA | GPIO 21 | I2C-Daten |
| SCL | GPIO 22 | I2C-Takt |
Wichtig: Schließen Sie die Wasserpumpe über den NO-Anschluss (Normally Open) und den COM-Anschluss des Relais an. Das Relais wirkt als Schalter — wenn GPIO 26 auf LOW geht, schaltet sich die Pumpe EIN.
Schritt 2: Kalibrierung
Bevor Sie automatisieren, müssen Sie die “trocken”- und “nass”-Werte Ihres Bodens ermitteln:
- Stecken Sie den Sensor in trockene Erde → notieren Sie den Analogwert (z. B. 3200)
- Stecken Sie ihn in feuchte Erde → notieren Sie den Wert (z. B. 1400)
- Berechnen Sie den Schwellwert — unter diesem Wert = nass genug, darüber = braucht Wasser
DRY_VALUE = 3200 (your reading in dry soil)
WET_VALUE = 1400 (your reading in wet soil)
THRESHOLD = 2500 (trigger watering above this)
Schritt 3: Code hochladen
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// --- Pins ---
#define SOIL_PIN 34
#define PUMP_PIN 26
// --- Calibration (change these!) ---
const int DRY_VALUE = 3200;
const int WET_VALUE = 1400;
const int THRESHOLD = 2500;
const unsigned long CHECK_INTERVAL = 3600000;
const unsigned long PUMP_DURATION = 5000;
unsigned long lastCheck = 0;
void displayReading(int raw, int percent) {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Smart Garden");
display.drawLine(0, 10, 128, 10, SSD1306_WHITE);
display.setCursor(0, 20);
display.printf("Moisture: %d%%", percent);
display.setCursor(0, 35);
if (percent < 40) {
display.println("Status: DRY");
display.println("Pump: ACTIVE");
} else {
display.println("Status: OK");
display.println("Pump: OFF");
}
display.setCursor(0, 55);
display.printf("Raw: %d", raw);
display.display();
}
void setup() {
Serial.begin(115200);
pinMode(PUMP_PIN, OUTPUT);
digitalWrite(PUMP_PIN, HIGH);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("OLED not found!");
}
display.clearDisplay();
display.display();
}
void loop() {
if (millis() - lastCheck >= CHECK_INTERVAL || lastCheck == 0) {
lastCheck = millis();
int raw = analogRead(SOIL_PIN);
int percent = map(raw, DRY_VALUE, WET_VALUE, 0, 100);
percent = constrain(percent, 0, 100);
Serial.printf("Soil: %d%% (raw: %d)n", percent, raw);
displayReading(raw, percent);
if (percent < 40) {
Serial.println("Soil is dry! Watering...");
digitalWrite(PUMP_PIN, LOW);
delay(PUMP_DURATION);
digitalWrite(PUMP_PIN, HIGH);
Serial.println("Watering complete.");
}
}
}
Schritt 4: Aufstellen
- Stecken Sie den kapazitiven Bodenfeuchtesensor in den Blumentopf
- Verbinden Sie die Wasserpumpe mit einem Wasserbehälter und einem Schlauch zur Pflanze
- Versorgen Sie den ESP32 per USB oder mit dem 18650-Battery-Shield
- Das OLED-Display zeigt die aktuelle Feuchte in Prozent und den Pumpenstatus
- Jede Stunde prüft das System die Bodenfeuchte und gießt automatisch
Warum kapazitive Sensoren besser sind
Dieses System verwendet einen kapazitiven Bodenfeuchtesensor (keinen resistiven). Resistive Sensoren haben freiliegende Metallspitzen, die in feuchter Erde binnen Wochen korrodieren. Kapazitive Sensoren kapseln die Elektronik hinter einer Schutzschicht — sie halten jahrelang ohne Degradation.
Noch weiter gehen
- WLAN + MQTT hinzufügen — Feuchtedaten aufs Handy schicken (kombinieren Sie das mit dem MQTT-Tutorial)
- Mehrere Sensoren hinzufügen — Mit einem Multiplexer (CD4051BE) mehrere Pflanzen mit einem ESP32 überwachen
- Wasserstandssensor hinzufügen — Alarm, wenn der Wassertank zur Neige geht
- Home-Assistant-Integration — Die Pumpe vom Smart-Home-Dashboard aus steuern
- Solarenergie — 5V-Solarpanel + 18650-Battery-Shield für den Dauerbetrieb im Freien