KY-016 RGB-LEDs am ESP32 betreiben
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 einer RGB-LED eignet sich als überschaubarer Einstieg in die Verbindung von ESPHome und externer Hardware. 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.
Gegenüber einer einzelnen, unbeschalteten RGB-LED ist der Aufbau einfacher: Bei den hier verwendeten KY-016-Modulen sind Vorwiderstände für die Farbkanäle bereits auf der Platine vorhanden. Sie begrenzen den LED-Strom, dennoch sollten die Bestückung des jeweiligen Moduls und die zulässige Belastung der ESP32-GPIOs vor dem Anschluss geprüft werden.
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) werden mit ausgabefähigen GPIOs des ESP32 verbunden. ESPHome erzeugt dort über die LEDC-Hardware PWM-Signale, mit denen sich die Helligkeiten der Farbkanäle mischen lassen.
| 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 LEDC-PWM-Ausgänge definiert und den verwendeten GPIOs zugeordnet. 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. Nach dem Übertragen startet der ESP32 neu. Meldungen wie die folgenden zeigen, dass das Gerät erfolgreich gebootet hat:
[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 Flashen kann Home Assistant das Gerät über die ESPHome-Integration automatisch erkennen. Gegebenenfalls muss die gefundene Integration unter „Einstellungen > Geräte & Dienste“ noch bestätigt oder manuell hinzugefügt werden. Anschließend steht die konfigurierte Licht-Entität zur Verfügung; ihre konkrete Entitäts-ID kann je nach Benennung und vorhandenen Entitäten abweichen.
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 Farbrad eine Farbe auswählen. ESPHome setzt die gewählten Farb- und Helligkeitswerte in PWM-Signale für die drei Kanäle um.
Sobald eine Farbe im Dashboard ausgewählt wird, setzt der ESP32 den Befehl in der Realität um.
Das Beispiel zeigt, wie sich eine einfache Statusanzeige mit ESPHome in Home Assistant integrieren lässt, ohne dafür eigenen C++-Code schreiben zu müssen. Diese lässt sich ab jetzt flexibel in bestehende Automatisierungen einbinden – beispielsweise, um den Zustand von Fenstern, Waschmaschine oder Servern optisch zu signalisieren.
Erweiterung: Mehrere RGB-LEDs über das Expansion Board ansteuern
Sollen mehrere RGB-LED-Module angeschlossen werden, wird die direkte Verkabelung am ESP32 schnell unübersichtlich. Ein Expansion Board kann die Anschlüsse übersichtlicher zugänglich machen.
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. Bei drei Modulen wären die vorhandenen GND-Pins bereits belegt. Da sämtliche GND-Anschlüsse elektrisch miteinander verbunden sind, ließe sich die Masse alternativ über ein Breadboard oder einen Verteiler aufteilen. Das Expansion Board* (Werbung) stellt dafür zusätzliche, übersichtlich angeordnete GND-Anschlüsse bereit.
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 befindet sich neben jedem herausgeführten GPIO ein GND- und ein Versorgungskontakt. Die GND-Kontakte sind elektrisch miteinander verbunden; die Spannung der V-Reihe hängt von der Ausführung und Jumperstellung des Expansion Boards ab. 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 sortiert direkt auf den Pins. Da die Anschlüsse den jeweiligen GPIOs zeilenweise zugeordnet sind, bleibt die Verkabelung leichter nachvollziehbar. Das Expansion Board vervielfacht jedoch weder die verfügbaren GPIOs noch die PWM-Ressourcen des ESP32.
Multi-LED ESPHome-Konfiguration mit unterschiedlichen Effekten
Die folgende Konfiguration belegt neun GPIOs und neun LEDC-Ausgänge. Sie ist für den hier verwendeten klassischen ESP32 ausgelegt und lässt sich nicht unverändert auf jede ESP32-Variante übertragen. Bei mehreren gleichzeitig hell leuchtenden Farbkanälen müssen außerdem die zulässigen GPIO- und Gesamtströme berücksichtigt werden. Für größere oder leistungsstärkere LED-Aufbauten sind externe Treiber sinnvoll.
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 stehen in Home Assistant drei getrennt steuerbare Licht-Entitäten zur Verfügung. Sie lassen sich einzeln schalten, dimmen, farblich verändern und mit den jeweils konfigurierten Effekten betreiben.
Praxisbeispiel: Dynamische Steuerung per Home-Assistant-Automatisierung
Ein Vorteil der Integration von ESPHome in Home Assistant ist die Möglichkeit, konfigurierte Lichteffekte direkt in Automatisierungen einzubinden. Anstatt jeden Farbwechsel als einzelnen Schritt in Home Assistant abzubilden, kann die Automatisierung einen in ESPHome definierten Effekt starten. Der Effekt läuft anschließend lokal auf dem ESP32 weiter, wodurch keine fortlaufenden Schaltbefehle über das Netzwerk erforderlich sind und die Zeitabstände gleichmäßiger ausfallen.
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 im visuellen Editor von Home Assistant erstellt, kann der von ESPHome bereitgestellte Effekt
in den Daten der Aktion light.turn_on ausgewählt beziehungsweise mit seinem Namen eingetragen werden.
Die genaue Darstellung kann je nach Home-Assistant-Version variieren. 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 Mikrocontroller-Board übernimmt die Ansteuerung der LEDs und stellt über das integrierte WLAN die Verbindung zu Home Assistant her.
- 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 führt die ESP32-Pins in einer übersichtlichen G-V-S-Anordnung heraus und stellt zusätzliche Anschlusspunkte für die gemeinsame Masse bereit. Beim hier gezeigten KY-016-Aufbau werden die V-Kontakte nicht verwendet.
- 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.
Weitere Praxisprojekte
Aufbauend auf der ESP32 Ersteinrichtung können verschiedene Hardware-Komponenten und Sensoren an den Mikrocontroller angebunden werden. Bisher dokumentierte Projekte:
Schritt-für-Schritt-Anleitung zum physischen Anschluss des wasserdichten Sensors DS18B20 und der effizienten Auslesung mehrerer Fühler über den 1-Wire-Bus in ESPHome.
Schritt-für-Schritt-Anleitung zum Anschluss eines mechanischen Pegelschalters. Erfahre, wie du den Wasserstand misst, mehrere Sensoren für ein Min/Max-Setup kombinierst und Signale gegen Wellenbewegung filterst.
Schritt-für-Schritt-Anleitung zur Einbindung des GPS-Moduls BE-220 in ESPHome und Visualisierung der Standortdaten in Home Assistant.
Schritt-für-Schritt-Anleitung zum Anschluss des wasserdichten Ultraschallsensors JSN-SR04T an einen ESP32 sowie zur Konfiguration der Entfernungsmessung in ESPHome.