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> |
||
|---|---|---|
| schaltplan | ||
| .gitignore | ||
| gartensensor.yaml | ||
| README.md | ||
| secrets.yaml.example | ||
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
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
Gartensensormit dem konfiguriertenap_password. Unter192.168.4.1ist 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:
- Sensor trocken in Luft halten → ADC-Rohwert notieren (
x_trocken, z. B.2.8 V) - Sensor in Wasser tauchen → ADC-Rohwert notieren (
x_nass, z. B.1.2 V) - Lambda in
gartensensor.yamlanpassen:
- 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.