RGB-LEDs am ESP32 betreiben: Vom Direktanschluss bis zum Expansion Board
Für die Umsetzung dieses Setups wird ein funktionsfähiges Home-Assistant-System mit installiertem ESPHome-Add-on benötigt. Die Schritte zur Ersteinrichtung des Mikrocontrollers sind im Beitrag ESP32 NodeMCU mit ESPHome in Home Assistant einrichten detailliert beschrieben.
Die Ansteuerung von RGB-LEDs ist ein idealer Einstieg, um die Interaktion zwischen ESPHome und physischer Hardware zu verstehen. In diesem Beitrag erfährst du, wie ein 3-Farben RGB-LED-Modul an einen ESP32 angeschlossen wird – vom simplen Direktanschluss bis hin zur sauberen Skalierung mittels Expansion Board.
Die Kernkomponenten für den Einstieg
Für den ersten Aufbau konzentrierst du dich auf zwei wesentliche Bauteile:
ESP32 NodeMCU Development Board
Dieses ESP32 NodeMCU Development Board* (Werbung) bildet das Gehirn des Projekts. Es ist ein kompakter Mikrocontroller mit integriertem WLAN und Bluetooth, der sich über die USB-Buchse programmieren und mit Strom versorgen lässt.
Für diesen Beitrag wird die weit verbreitete 30-Pin-Variante mit ESP32-Chip verwendet. Zusätzlich ist auf dem Board ein sogenannter CH340-Chip verbaut, der als Übersetzer zwischen dem USB-C-Anschluss und dem ESP32 dient.
Das KY-016 3-Farben RGB-LED Modul* (Werbung) ist eine dreifarbige LED, die bereits auf einer kleinen Platine vormontiert ist.
Der große Vorteil gegenüber einer nackten LED: Die notwendigen Vorwiderstände für die drei Farbkanäle Rot (R), Grün (G) und Blau (B) sind bereits fest auf dem Modul integriert. Das vereinfacht den Aufbau ungemein, spart Platz und schützt die GPIOs des ESP32 zuverlässig vor einer Überlastung.
Eine einzelne RGB-LED direkt am ESP32 anschließen
Der Direktanschluss eignet sich für schnelle Testaufbauten und Projekte mit nur einem einzelnen RGB-Lichtpunkt.
Verkabelung
Das KY-016 Modul verfügt über vier Anschlussstifte. Der Pin markiert mit 'GND' (Masse) wird mit einem GND-Pin des ESP32 verbunden. Die drei Pins für die Farbkanäle (R, G, B) müssen an PWM-fähige GPIO-Pins des Mikrocontrollers geführt werden, um die Helligkeit der einzelnen Farben stufenlos mischen zu können.
| KY-016 Modul Pin | ESP32 NodeMCU Pin | Funktion |
|---|---|---|
| R | GPIO 25 | Farbe Rot (PWM) |
| G | GPIO 26 | Farbe Grün (PWM) |
| B | GPIO 27 | Farbe Blau (PWM) |
| GND | GND | Gemeinsame Masse |
Detaillierte ESPHome-Konfiguration
Damit der ESP32 die LED ansteuern kann, muss die Konfigurationsdatei (YAML) in ESPHome angepasst werden. Vorgehensweise:
- Das ESPHome-Dashboard in Home Assistant öffnen.
- Bei dem entsprechenden ESP32-Gerät auf 'EDIT' klicken.
- Zum Ende der Datei navigieren.
- Den untenstehenden Code-Block einfügen. Dabei strikt auf die korrekte Einrückung mit Leerzeichen achten, da YAML-Code sensitiv darauf reagiert.
output werden die Hardware-Ausgänge (die GPIOs) definiert, an denen die LED angeschlossen ist. Die Plattform ledc ist die ESP32-spezifische Methode zur Erzeugung von PWM-Signalen. Im Abschnitt light werden diese drei Ausgänge logisch zur Plattform rgb gebündelt. An diesem Punkt versteht ESPHome die drei Pins als eine einzelne Licht-Entität.
esphome:
name: esp32-einzel-led
# ... (WLAN und API Einstellungen bleiben unberührt)
output:
# Definition der Hardware-PWM-Kanäle
- platform: ledc
pin: GPIO25
id: output_rot
- platform: ledc
pin: GPIO26
id: output_gruen
- platform: ledc
pin: GPIO27
id: output_blau
light:
# Zusammenfassung der Kanäle zu einer reinen RGB-Lichtentität
- platform: rgb
name: "Status RGB LED"
id: rgb_status_led
red: output_rot
green: output_gruen
blue: output_blau
Nach dem Einfügen auf 'INSTALL' klicken, um die Firmware zu übersetzen und auf den ESP32 zu flashen. Sobald dort Zeilen wie die folgenden erscheinen, ist der Prozess vollständig abgeschlossen:
[15:40:43.875][I][safe_mode:142]: Boot seems successful; resetting boot loop counter
[15:40:48.609][D][preferences:148]: Writing 1 items: 0 cached, 1 written, 0 failed
Schalten und Steuern in Home Assistant
Nach dem erfolgreichen Flash-Vorgang konfiguriert sich das Gerät in Home Assistant automatisch über die API-Schnittstelle. Die neue Entität light.status_rgb_led steht sofort bereit.
Um die LED komfortabel zu bedienen, fügst du einfach eine neue Karte vom Typ 'Licht' (Light Card) zum Dashboard hinzu und wählst die Entität aus. Über diese Karte lässt sich die LED mit einem Klick ein- und ausschalten.
Ein Tippen auf das Symbol öffnet den detaillierten Steuerungs-Dialog. Hier kannst du über das kreisförmige Farbrad jede gewünschte Farbe direkt anklicken. ESPHome übernimmt im Hintergrund die präzise Berechnung der PWM-Signale für die einzelnen Kanäle und dimmt die LED auf Wunsch stufenlos.
Sobald eine Farbe im Dashboard ausgewählt wird, setzt der ESP32 den Befehl in der Realität um.
Das Zusammenspiel zeigt perfekt, wie mächtig die Kombination aus ESPHome und Home Assistant ist: Ohne eine einzige Zeile komplexen C++-Code schreiben zu müssen, entsteht eine voll integrierte Status-Anzeige. Diese lässt sich ab jetzt flexibel in jede bestehende Automatisierung einbinden – beispielsweise, um den Zustand von Fenstern, Waschmaschine oder Servern optisch zu signalisieren.
Erweiterung: Mehrere RGB-LEDs über das Expansion Board ansteuern
Soll das Projekt erweitert werden, um den Status mehrerer Systemdienste über separate LEDs anzuzeigen (z. B. eine LED für Backups und eine für den Serverstatus), stößt der Direktanschluss an mechanische Grenzen.
Jedes KY-016 Modul benötigt einen eigenen Masse-Anschluss (GND). Das standardmäßige ESP32 NodeMCU Board stellt in der 30-Pin-Variante jedoch nur drei GND-Pins bereit. Wenn du drei Module anschließen möchtest, sind bereits alle verfügbaren Massepunkte des Boards belegt. Das macht die Verkabelung unübersichtlich und verhindert den parallelen Anschluss weiterer Sensoren. Das Expansion Board* (Werbung) löst dieses logistische Problem durch eine strukturierte Stromverteilung.
Funktionsweise des Expansion Boards
Du musst den ESP32 lediglich passgenau auf die Buchsenleisten aufstecken. Die Erweiterungsplatine bricht danach jeden einzelnen Pin des Mikrocontrollers in eine dreireihige Stiftleiste auf. Dieses Layout folgt konsequent der G-V-S-Struktur:
- G (Ground): Masse-Anschluss
- V (Voltage): Spannungsversorgung (über Jumper konfigurierbar)
- S (Signal): Der eigentliche GPIO-Pin des ESP32
Dadurch steht für jeden einzelnen GPIO-Pin des Mikrocontrollers ein direkt danebenliegender, eigener Masse- und Spannungsanschluss bereit. Module wie das KY-016 kannst du somit ohne Umwege und ohne ein externes Breadboard direkt mit Kabeln anstecken.
Verkabelung von drei RGB-LEDs
Durch die Erweiterungsplatine werden die drei RGB-LED-Module kompakt nebeneinander aufgesteckt. Jedes Modul nutzt die ihm zugewiesenen Signal-Pins sowie die direkt dazugehörigen G-Pins für die Masse. Dabei steckst du die drei Farbkanäle (R, G, B) auf die Signal-Stifte (Reihe S) der jeweiligen GPIOs. Das GND-Kabel des Moduls wird einfach auf einen der direkt danebenliegenden Masse-Stifte (Reihe G) dieser Pin-Gruppe geführt.
Konkretes Beispiel: Verkabelung von LED 1Du hast von deinem ersten KY-016 LED-Modul insgesamt 4 Kabel abgehend. Diese steckst du nun wie folgt auf das Expansion Board:
- Das Kabel von R (Rot) kommt auf den Pin S in der Reihe von GPIO 25.
- Das Kabel von G (Grün) kommt auf den Pin S in der Reihe von GPIO 26.
- Das Kabel von B (Blau) kommt auf den Pin S in der Reihe von GPIO 27.
Das Kabel von GND (Masse) des LED-Moduls steckst du jetzt einfach auf den Pin G, der direkt neben oder unter dem Signal-Pin von GPIO 25 liegt.
| Komponente | Modul-Pin | Expansion Board Pin (Reihe S) | Expansion Board Pin (Reihe G) |
|---|---|---|---|
| LED 1 | R | GPIO 25 | - |
| G | GPIO 26 | - | |
| B | GPIO 27 | - | |
| GND | - | GND (bei GPIO 25) | |
| LED 2 | R | GPIO 14 | - |
| G | GPIO 12 | - | |
| B | GPIO 13 | - | |
| GND | - | GND (bei GPIO 14) | |
| LED 3 | R | GPIO 19 | - |
| G | GPIO 18 | - | |
| B | GPIO 5 | - | |
| GND | - | GND (bei GPIO 19) |
Durch die dreireihige Stiftleiste des Expansion Boards lassen sich die Kabelbündel exakt den GPIOs zuordnen, ohne dass Brücken oder externe Stromverteiler benötigt werden.
Wie in der Detailansicht zu erkennen ist, stecken die Jumper-Kabel sauber sortiert direkt auf den Pins. Da jeder GPIO-Pin seine eigene, dedizierte Reihe besitzt, bleibt das System übersichtlich, mechanisch stabil und lässt sich jederzeit flexibel erweitern.
Multi-LED ESPHome-Konfiguration mit unterschiedlichen Effekten
Die Konfiguration erweitert sich nun auf neun separate PWM-Ausgänge, die in drei logischen RGB-Lichtkomponenten zusammengeführt werden. Um die Flexibilität von ESPHome zu zeigen, wird jeder LED ein anderer nativer Effekt zugewiesen. Diese lassen sich unabhängig voneinander über Home Assistant steuern.
esphome:
name: esp32-multi-led
# ...
output:
# Ausgänge LED 1
- platform: ledc
pin: GPIO25
id: led1_rot
- platform: ledc
pin: GPIO26
id: led1_gruen
- platform: ledc
pin: GPIO27
id: led1_blau
# Ausgänge LED 2
- platform: ledc
pin: GPIO14
id: led2_rot
- platform: ledc
pin: GPIO12
id: led2_gruen
- platform: ledc
pin: GPIO13
id: led2_blau
# Ausgänge LED 3
- platform: ledc
pin: GPIO19
id: led3_rot
- platform: ledc
pin: GPIO18
id: led3_gruen
- platform: ledc
pin: GPIO5
id: led3_blau
light:
# Effekt: Sanfter Farbwechsel alle 5 Sekunden mit zufälligen Farben
- platform: rgb
name: "Status Backup"
id: led_backup
red: led1_rot
green: led1_gruen
blue: led1_blau
default_transition_length: 0s
effects:
- random:
name: "Sanfter Farbwechsel"
transition_length: 5s
update_interval: 5s
# Effekt: Blinklicht mit der aktuellen Farbe (an/aus)
- platform: rgb
name: "Status Server"
id: led_server
red: led2_rot
green: led2_gruen
blue: led2_blau
default_transition_length: 0s
effects:
- strobe:
name: "Blinken"
colors:
- state: true
duration: 500ms
- state: false
duration: 500ms
# Effekt: Blinklicht mit wechselnden Farben (rot/grün)
- platform: rgb
name: "Status Alarmanlage"
id: led_alarm
red: led3_rot
green: led3_gruen
blue: led3_blau
default_transition_length: 0s
effects:
- strobe:
name: "Alarm Blinklicht"
colors:
- red: 0%
green: 100%
blue: 0%
duration: 500ms # Wie lange leuchtet Grün?
- red: 100%
green: 0%
blue: 0%
duration: 500ms # Wie lange leuchtet Rot?
Nach dem Aufspielen der Firmware existieren drei eigenständige Entitäten in Home Assistant, die völlig autark geschaltet, gedimmt, farblich verändert oder in ihren jeweiligen Lichteffekten gestartet werden können.
Praxisbeispiel: Dynamische Steuerung per Home-Assistant-Automatisierung
Ein großer Vorteil der tiefen Integration von ESPHome in Home Assistant ist die Möglichkeit, konfigurierte Lichteffekte direkt in globale Automatisierungen einzubinden. Anstatt das Blinken oder den Farbwechsel mühsam über Einzelschritte in Home Assistant zu programmieren, wird einfach der in der Firmware definierte Effekt aufgerufen. Das entlastet das Netzwerk und sorgt für absolut synchrone Schaltzeiten.
light.turn_on kann Home Assistant neben der Helligkeit und der Farbe auch das Attribut effect übergeben. Dort wird exakt der Name eingetragen, der zuvor in der YAML-Konfiguration unter effects definiert wurde (z. B. "Alarm Blinklicht").
Das folgende Beispiel zeigt die Struktur einer Automatisierung in YAML, die bei der Auslösung einer Alarmanlage das definierte Grün-Rot-Blinken startet und dieses nach der Entschärfung wieder beendet:
# 1. Automatisierung: Warnblinken bei Alarm aktivieren
alias: "Alarmanlage: LED Warnblinken einschalten"
description: "Schaltet das Grün-Rot-Blinken der Status-LED bei Alarmauslösung ein"
trigger:
- platform: state
entity_id: alarm_control_panel.alarmanlage
to: "triggered"
condition: []
action:
- action: light.turn_on
target:
entity_id: light.led_status_alarmanlage
data:
effect: "Alarm Blinklicht"
mode: single
---
# 2. Automatisierung: LED bei Entschärfung ausschalten
alias: "Alarmanlage: LED ausschalten"
description: "Beendet das Blinken und schaltet die LED nach der Entschärfung aus"
trigger:
- platform: state
entity_id: alarm_control_panel.alarmanlage
to: "disarmed"
condition: []
action:
- action: light.turn_off
target:
entity_id: light.led_status_alarmanlage
mode: single
Wird die Automatisierung stattdessen über den visuellen Editor (UI) von Home Assistant erstellt, taucht der in ESPHome angelegte Effekt nach der Aktivierung der Checkbox "Effekt" automatisch in einer Dropdown-Liste auf und kann dort komfortabel ausgewählt werden. Das Senden eines einfachen light.turn_off-Befehls reicht aus, um sowohl das Licht als auch den laufenden Effekt komplett zu stoppen.
Verwendete Hardware-Komponenten
Folgende Komponenten kamen in diesem Projekt zum Einsatz:
- ESP32 NodeMCU Development Board* (Werbung) – Dieses leistungsstarke Mikrocontroller-Board bildet dank des integrierten WLANs die zentrale Steuereinheit für das Smart-Home-Projekt.
- AZDelivery KY-016 3-Farben RGB-LED Modul* (Werbung) – Das Modul besitzt bereits integrierte Vorwiderstände auf der Platine, wodurch es sich ohne zusätzliche elektronische Bauteile direkt ansteuern lässt.
- Expansion Board* (Werbung) (hier inkl. ESP32 im Set) – Es bricht die Pins des Mikrocontrollers in eine strukturierte G-V-S-Leiste auf, um problemlos mehrere LEDs parallel mit Masse und Strom zu versorgen.
- AZDelivery Jumper Wire Kabel Female to Female* (Werbung) – Diese Kabel werden benötigt, um die männlichen Stifte des LED-Moduls direkt mit den ebenfalls männlichen Pin-Leisten des Expansion Boards zu verbinden.