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

Transparenz-Check Damit dieser Blog werbefrei bleiben kann, kommen Affiliate-Links (mit * markiert) zum Einsatz. Wenn du darüber etwas kaufst, fließt eine kleine Provision von Amazon zurück – für dich ändert sich am Preis rein gar nichts. Danke für den Support dieser Projekte!

Für den ersten Aufbau konzentrierst du dich auf zwei wesentliche Bauteile:

ESP32 NodeMCU Development Board

Nahaufnahme eines physischen ESP32 NodeMCU Development Boards mit modernem USB-C Anschluss auf hellem Untergrund
ESP32 NodeMCU Board mit integrierter USB-C-Schnittstelle

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.

Nahaufnahme des KY-016 RGB-LED-Moduls mit deutlich sichtbaren Beschriftungen für R, G, B und GND auf schwarzer Platine
KY-016 RGB-LED-Modul mit integrierten Vorwiderständen

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.
Funktionsweise der Konfiguration Im Abschnitt 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.

Screenshot des Home Assistant Licht-Dialogs mit einem kreisförmigen, bunten Farbrad zur Steuerung der RGB-LED bei 100 Prozent Helligkeit
Das intuitive Farbrad (Color Picker) zur Farbwahl im Home-Assistant-Dashboard

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.

Nahaufnahme eines ESP32-Mikrocontrollers, der über Jumper-Kabel mit einem aktiv blau leuchtenden KY-016 RGB-LED-Modul verbunden ist
Der reale Testaufbau im Betrieb

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.

Draufsicht auf ein loses ESP32 NodeMCU Development Board mit USB-C neben einer passenden schwarzen Expansion-Board-Erweiterungsplatine
Der ESP32 und das dazugehörige 30-Pin-Expansion-Board vor der Montage

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.

Nahaufnahme eines ESP32 NodeMCU-Boards, das passgenau auf die Buchsenleisten des schwarzen Expansion Boards aufgesteckt ist
Fertig montiert: Der Mikrocontroller sitzt fest auf der Erweiterungsplatine
Jumper-Einstellung beachten Auf dem Expansion Board befindet sich in der Nähe der USB-Buchsen ein gelber Jumper zur Spannungsauswahl (beschriftet mit 3.3V / 5V / JUMP). Dieser steuert, welche Spannung an den V-Pins anliegt. Für das KY-016-Modul ist die Positionierung auf 3.3V erforderlich, um die Signalpegel des ESP32 exakt zu matchen.

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 1

Du 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.

Makroaufnahme der Pinreihen auf dem schwarzen Expansion Board mit eingesteckten weiblichen Jumper-Kabeln an den GPIOs
Strukturierter Anschluss der Jumper-Kabel direkt an den G-V-S-Stiften

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.

Home Assistant Dashboard Ansicht mit drei Licht-Entitäten unter der Überschrift Leuchten: led Status Backup (100% Blau), led Status Server (100% Grün) und led Status Alarmanlage (100% Rot)
Die drei fertig eingebundenen RGB-Status-Lichter im Home-Assistant-Dashboard
Drei KY-016 RGB-LED-Module untereinander angeordnet, die von oben nach unten intensiv Rot, Grün und Blau leuchten
Die drei parallel betriebenen RGB-Module

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.

Effektsteuerung per Service-Call Über die Aktion 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.