ESPHome Sensor-Node fuer Gewaechshaus: SHT40 (Temp/Feuchte) + 2x kapazitive Bodenfeuchtesensoren, ESP32-D1Mini, Deep Sleep 5 min
Find a file
ppfeiffer e6674472b9 fix: zurück zu arduino framework (weniger RAM beim Kompilieren)
esp-idf kompiliert die gesamte IDF-Codebasis neu (~1,5 GB RAM Peak).
arduino nutzt vorkompilierte Libraries (~500 MB) — wichtig auf
speicherarmen Hosts (HA auf RPi, kleine VMs).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-30 16:40:21 +02:00
schaltplan Initial Commit: ESP32-D1Mini Gewächshaus-Sensor 2026-05-29 11:09:34 +02:00
.gitignore Initial Commit: ESP32-D1Mini Gewächshaus-Sensor 2026-05-29 11:09:34 +02:00
gartensensor.yaml fix: zurück zu arduino framework (weniger RAM beim Kompilieren) 2026-05-30 16:40:21 +02:00
README.md docs: Troubleshooting-Hinweis zu 'Clean All Files' 2026-05-30 16:19:34 +02:00
secrets.yaml.example docs: secrets.yaml.example als Vorlage hinzugefügt 2026-05-29 11:19:42 +02:00

Gewächshaus-Sensor

ESPHome-Konfiguration für einen stromsparenden Sensor-Node im Gewächshaus.
Misst Temperatur, Luftfeuchtigkeit und Bodenfeuchte an zwei Stellen — mit Deep Sleep und Home Assistant Integration.


Hardware

Bauteil Beschreibung
ESP32-D1Mini WEMOS / Lolin ESP32 Entwicklungsboard
SHT40 Breakout Sensirion Temperatur & Luftfeuchte (I²C, Pull-Ups verbaut)
Kapazitiver Bodenfeuchtesensor × 2 NE555-basiert, 3,3 V, analoger Ausgang

Kein Transistor, kein zusätzlicher Widerstand nötig — die Bodenfeuchtesensoren werden direkt über GPIO-Pins geschaltet.


Schaltplan

Schaltplan


Pin-Belegung

ESP32 Pin Funktion Ziel
3V3 Versorgung SHT40 VDD
GND Masse SHT40 GND, Sensor #1 GND, Sensor #2 GND
IO21 I²C SDA SHT40 SDA
IO22 I²C SCL SHT40 SCL
IO25 VCC Sensor #1 (GPIO-geschaltet) Bodenfeuchtesensor #1 VCC
IO26 VCC Sensor #2 (GPIO-geschaltet) Bodenfeuchtesensor #2 VCC
IO34 ADC1_CH6 Bodenfeuchtesensor #1 AOUT
IO35 ADC1_CH7 Bodenfeuchtesensor #2 AOUT

IO34 und IO35 sind ADC1-Pins — diese funktionieren zuverlässig auch während aktiver WiFi-Verbindung (ADC2-Pins sind bei aktivem WiFi gesperrt).


Funktionsweise

Strommodus-Schalter

In Home Assistant erscheint ein Schalter „Schlafmodus":

Schalter Verhalten
OFF (Standard / Fallback) Dauerbetrieb — misst alle 5 Minuten, kein Sleep
ON Deep Sleep — 5-Minuten-Gesamtzyklus (Wachzeit + Schlafzeit = 5 min)

Der Fallback bei fehlender HA-Verbindung oder nach Stromausfall ist immer Dauerbetrieb (RESTORE_DEFAULT_OFF).

Ablauf pro Zyklus

Aufwachen / Einschalten
    │
    ▼  bis 20 s
Warten auf HA-API (Schalter-Zustand laden)
    │
    ▼  sofort
SHT40 messen (Temperatur + Luftfeuchtigkeit)
    │
    ▼
IO25 + IO26 HIGH → Bodenfeuchtesensoren einschalten
    │
    ▼  1 s  (NE555 einschwingen)
ADC lesen — Sensor #1 (IO34) + Sensor #2 (IO35)
    │
    ▼
IO25 + IO26 LOW → Sensoren ausschalten
    │
    ▼  1 s  (Übertragung an HA)
    │
    ├─ Schlafmodus ON  → Deep Sleep (verbleibende Zeit bis 5 min)
    └─ Schlafmodus OFF → 5 min warten → von vorn

Stromverbrauch (Richtwerte)

Zustand Strom
Deep Sleep (ESP32) ~10 µA
SHT40 im Leerlauf < 1 µA
Bodenfeuchtesensoren (aus) 0 mA
Aktiv (WiFi + Messung, ~20 s) ~100 mA
Ø Gesamtzyklus 5 min ~7 mA
2000 mAh Akku (Sleep aktiv) ~12 Tage

ESPHome Setup

1. Repository klonen

git clone https://git.pfeiffer-privat.de/ESPHome/Garten_Gewaechshaus.git
cd Garten_Gewaechshaus

2. secrets.yaml anlegen

Im gleichen Verzeichnis eine secrets.yaml erstellen (wird nicht eingecheckt):

wifi_ssid: "DeinWLAN"
wifi_password: "DeinWLANPasswort"
api_key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx="
ota_password: "DeinOTAPasswort"

Den api_key generiert ESPHome automatisch beim ersten Validieren — einfach leer lassen und esphome config gartensensor.yaml ausführen.

Fallback-AP: Kann der ESP32 kein WLAN erreichen, öffnet er ein eigenes WLAN Gartensensor mit dem konfigurierten ap_password. Unter 192.168.4.1 ist dann das Captive-Portal erreichbar zur Neukonfiguration.

3. Flashen

# Erstmalig per USB
esphome run gartensensor.yaml

# Danach per OTA (Schlafmodus muss OFF sein)
esphome upload gartensensor.yaml

Wichtig für OTA: Den Schalter „Schlafmodus" in HA auf OFF stellen, damit der ESP32 wach bleibt. Nach dem Update wieder auf ON stellen.

Kompilierung schlägt still fehl (kein Fehlertext, nur „FAILED")

Ursache ist meist ein korrupter Library- oder Toolchain-Cache. Lösung:

ESPHome-UI → Gerät → ⋮ → „Clean All Files" (nicht nur „Clean Build Files"), danach neu kompilieren.

„Clean Build Files" entfernt nur den kompilierten Output.
„Clean All Files" löscht zusätzlich heruntergeladene Libraries und den Toolchain-Cache.


Kalibrierung Bodenfeuchtesensoren

Die Standard-Formel (1.0 - x / 3.3) * 100 liefert einen Rohwert. Für genaue Prozentwerte einmalig kalibrieren:

  1. Sensor trocken in Luft halten → ADC-Rohwert notieren (x_trocken, z. B. 2.8 V)
  2. Sensor in Wasser tauchen → ADC-Rohwert notieren (x_nass, z. B. 1.2 V)
  3. Lambda in gartensensor.yaml anpassen:
- lambda: return (x_trocken - x) / (x_trocken - x_nass) * 100.0;
# Beispiel mit den obigen Werten:
- lambda: return (2.8 - x) / (2.8 - 1.2) * 100.0;

Home Assistant Entities

Nach der Installation erscheinen folgende Entitäten:

Entität Typ Beschreibung
sensor.gartensensor_temperatur Sensor Temperatur in °C
sensor.gartensensor_luftfeuchtigkeit Sensor Relative Luftfeuchtigkeit in %
sensor.gartensensor_bodenfeuchte_1 Sensor Bodenfeuchte Sensor #1 in %
sensor.gartensensor_bodenfeuchte_2 Sensor Bodenfeuchte Sensor #2 in %
switch.gartensensor_schlafmodus Schalter Sleep ein/aus

Lizenz

MIT License — frei verwendbar und anpassbar.