Selbstgebaute Balkonbewässerung mit dem ESP32

ESP32 | Foto © Florian Bauer

Der ESP32 ist ein Mikrocontroller mit integriertem WLAN des chinesischen Herstellers Espressif Systems. Module zum Auflöten ab 2€ und komplette Platinen direkt aus China importiert ab 5€ machen den Chip zu einer idealen Plattform für Maker, aber auch für professionelle Anwendungen. Neben dem „Killer-Feature“ WLAN hat der Chip einen 140 MHz Dual-Core Prozessor. Bluetooth sowie ein reichhaltiges Angebot an Peripherie sind ebenfalls an Board. Espressif bietet ein umfangreiches SDK als Open Source (Apache License 2.0) an, das auf bekannten Open-Source-Projekten wie FreeRTOS, wpa_supplicant und lwip basiert.

Alternative: Raspberry Pi Zero W

Eine interessante Alternative ist der Pi Zero W. Er besitzt ebenfalls Bluetooth und WLAN und kostet nur ein wenig mehr. Er verbraucht mehr Strom und bietet weniger Schnittstellen. Der große Vorteil ist, dass statt eines RTOS ein vollständiges Linux zur Verfügung steht.

Balkonbewässerung

Viele besitzen keinen Garten, wollen aber trotzdem nicht auf selbst angebaute Kräuter und Gemüse (oder Blumen) verzichten. Die Pflanzen wollen aber auch mit Wasser versorgt werden, wenn du bei einer Fortbildung oder im Urlaub bist. Neben dem begrenzten Platz auf dem Balkon ist das Hauptproblem ein fehlender Wasseranschluss. Abhilfe schafft hier ein Wassertank, den du – je nach Größe –  alle paar Tage auffüllst.

Umsetzung

Für eine einfache Balkonbewässerung benötigst du folgende Teile:

  • ESP32 Entwicklungsplatine
  • 3.3V auf 5V Pegelwandler
  • 5V Relay
  • 5V Aquariumspumpe
  • Ultraschall Entfernungsmesser, z.B. HC-SR04
  • 5V USB Netzteil
  • Breadboard, Werkzeug und Kabel

Alle I/O-Pins des ESP32 arbeiten mit einer Spannung von 3.3V. Allerdings benötigt sowohl der Entfernungsmesser als auch das Relay eine Spannung von 5V, weshalb ein Wandler zwischengeschalten wird. Der hier eingesetzte Chip erkennt automatisch, ob es sich um einen Eingangs- oder Ausgangspin handelt und kommt so ohne jegliche Konfiguration aus.

Verdrahtung des ESP32 | Foto © Florian Bauer

Bewässerung

Eine billige 5V-Pumpe hat zwar nicht viel Leistung, die benötigt sie für unseren Anwendungsfall aber auch nicht. Allerdings ist es trotz der relativ niedrigen Leistungsaufnahme wichtig darauf zu achten, dass die Energiequelle (i.d.R. das Netzteil) auch genügend Strom liefert. Auf keinen Fall solltest du die Pumpe direkt über die Spannungsversorgung des ESP32-Boards versorgen, da dieses sonst beschädigt werden kann.

Wasserstandsmessung

Eine (zeitgesteuerte) Pumpe alleine würde schon für eine einfache Balkonbewässerung ausreichen. Das wäre aber viel zu einfach. Außerdem: Was wäre schon ein IoT-Gadget, wenn es keine mehr oder weniger sinnvollen Daten in die Cloud schicken würde? Nützlich wäre es zum Beispiel zu wissen, wenn sich das Wasser im Tank dem Ende neigt. Es gibt viele verschiedene Möglichkeiten, den Wasserstand zu messen. Einfach und billig ist die Verwendung eines Ultraschall-Entfernungsmessers für 1-3€. Der Sensor wird dabei im Deckel nach unten gerichtet montiert. Aus der Signallaufzeit des Schalls vom Sensor zur Wasseroberfläche und zurück lässt sich der Abstand und schließlich die verbleibende Wassermenge berechnen.

Cloud

Das SDK des ESP32 bietet einen umfangreichen WLAN- und TCP/IP-Stack, der die Kommunikation mit der Außenwelt sehr einfach macht. Ob diese Außenwelt dabei ein Raspberry Pi im Wohnzimmer oder die Google Cloud ist, bleibt jedem selbst überlassen. Das Protokoll der Wahl ist in diesem Projekt MQTT. Eine für den ESP32 geeignete Implementierung findet sich auf Github. Der ESP32 sendet regelmäßig die aktuellen Daten wie Wasserstand und Laufzeit der Pumpe an den Broker. Des Weiteren lauscht er auf eine Nachricht, die das manuelle An- und Ausschalten über eine Website erlaubt.

Nächste Schritte

Das Projekt ist bei Weitem noch nicht am Ende. Die rein zeitbasierte Steuerung der Pumpe würde ich gerne durch eine bedarfsgerechte Steuerung mit Hilfe eines Hydrometers ersetzten. Außerdem benötigen verschiedene Pflanzen unterschiedlich viel Wasser, weshalb ich die verschiedenen Blumenkästen unabhängig voneinander bewässern möchte.

Auch wäre eine Integration des vom SDK unterstützten Over-the-Air-Updates mit einem CI-Server vorstellbar. Das wäre sicherlich Overkill für solch ein kleines Projekt, aber bestimmt interessant.

Links