ESP32, ESPHome und Smarthome

ESP32 IR-Fernbedienung für Home Assistant bauen

Fernseher, Klimaanlage, Stereoanlage oder ältere LED-Beleuchtung: Im Haushalt gibt es noch erstaunlich viele Geräte, die mit einer klassischen Infrarot-Fernbedienung gesteuert werden. Eine direkte Home-Assistant-Integration besitzen diese Geräte häufig nicht. Genau hier kann ein kleiner ESP32 helfen.

Mit einem ESP32, einer IR-LED und ESPHome lässt sich für wenige Euro eine eigene WLAN-IR-Fernbedienung bauen. Home Assistant kann damit anschließend die gleichen Infrarotbefehle senden wie die ursprüngliche Fernbedienung.

Noch praktischer wird das Projekt mit einem zusätzlichen IR-Empfänger. Damit können wir zunächst die Signale einer vorhandenen Fernbedienung auslesen und anschließend über den ESP32 wieder aussenden.

Hinweis: Dieser Artikel enthält Affiliate-Links. Bei einem Kauf über einen gekennzeichneten Link erhalte ich eine kleine Provision. Für dich bleibt der Preis unverändert.

Was kann die ESP32 IR-Fernbedienung?

Unser ESP32 funktioniert später als kleiner IR-Sender im WLAN. Home Assistant schickt einen Befehl an ESPHome und der ESP32 erzeugt daraus das passende Infrarotsignal.

Damit lassen sich beispielsweise folgende Geräte steuern:

  • Fernseher
  • AV-Receiver
  • Stereoanlagen
  • Klimaanlagen
  • Ventilatoren
  • LED-Beleuchtungen mit IR-Fernbedienung
  • ältere Beamer
  • weitere Geräte mit Infrarot-Fernbedienung

Das Gerät selbst muss dabei weder WLAN noch Zigbee, Matter oder eine Cloud-Anbindung besitzen.

Diese Bauteile benötigen wir

Für den einfachen IR-Sender brauchen wir nur wenige Komponenten. Wenn du zusätzlich vorhandene Fernbedienungen auslesen möchtest, kommt ein IR-Empfänger hinzu.

  • ESP32 Development Board
  • 940-nm-Infrarot-LED
  • Vorwiderstand
  • NPN-Transistor für eine kräftigere Ansteuerung der IR-LED
  • IR-Empfänger, beispielsweise VS1838B oder TSOP38238
  • Dupont-Kabel beziehungsweise Breadboard
  • USB-Netzteil
  • optional kleines Gehäuse

ESP32 Development Boards:
ESP32 Boards bei Amazon ansehen*

IR-Sender und IR-Empfänger:
IR-Sender- und Empfänger-Module bei Amazon ansehen*

Elektronik-Bauteilsets:
Bauteilsets mit Widerständen und Transistoren bei Amazon ansehen*

Warum die IR-LED nicht einfach direkt anschließen?

Für einen ersten Test kann eine IR-LED mit passendem Vorwiderstand direkt über einen GPIO angesteuert werden. Für eine dauerhaft brauchbare Fernbedienung würde ich allerdings eine Transistorstufe verwenden.

Eine Fernbedienung sendet ihre Infrarotsignale mit kurzen Impulsen. Für eine ordentliche Reichweite benötigt die IR-LED dabei einen höheren Strom, als ein GPIO des ESP32 sinnvoll liefern sollte. Ein Transistor übernimmt deshalb das eigentliche Schalten der LED.

IR-Sender mit ESP32 verbinden

Für dieses Beispiel verwenden wir GPIO17 als Ausgang. Der GPIO steuert über einen Basiswiderstand einen NPN-Transistor an. Dieser schaltet wiederum die IR-LED.

BauteilESP32 / Anschluss
Transistor BasisGPIO17 über Basiswiderstand
Transistor EmitterGND
IR-LEDüber passenden Vorwiderstand und Transistor
IR-Empfänger OUTGPIO16
IR-Empfänger GNDGND
IR-Empfänger Versorgungpassend zum verwendeten Modul

[Bild-Platzhalter: Schaltplan ESP32 mit IR-LED, Transistor, Widerständen und IR-Empfänger]

Bei IR-Empfängermodulen solltest du vor dem Anschluss unbedingt das Datenblatt beziehungsweise die Pin-Beschriftung deines konkreten Moduls kontrollieren. Die Reihenfolge von Versorgung, Masse und Signalausgang ist nicht bei jedem Modul gleich.

ESPHome als Grundlage

Auch für dieses Projekt verwenden wir ESPHome. Dadurch müssen wir keine eigene Firmware programmieren und bekommen eine direkte Verbindung zu Home Assistant.

Wenn du noch weitere Projekte suchst, lohnt sich ein Blick in meine ESP8266- und ESP32-Übersicht. Dort findest du weitere Ideen rund um ESPHome und selbst gebaute Smart-Home-Sensoren.

IR-Empfänger in ESPHome einrichten

Ich würde zuerst den Empfänger konfigurieren. Damit können wir herausfinden, welche Signale die vorhandene Fernbedienung tatsächlich sendet.

remote_receiver:
  pin:
    number: GPIO16
    inverted: true
    mode:
      input: true
      pullup: true
  dump: all

Mit dump: all versucht ESPHome, empfangene IR-Signale zu erkennen und im Log auszugeben.

Nach dem Flashen öffnest du die Logs des ESP32 und drückst eine Taste auf der Originalfernbedienung. Halte die Fernbedienung dabei direkt auf den Empfänger.

Im Log sollte nun das erkannte Signal erscheinen.

[Bild-Platzhalter: ESPHome-Log mit erkanntem IR-Befehl einer Fernbedienung]

Welche IR-Protokolle gibt es?

IR-Fernbedienungen senden nicht alle das gleiche Signal. Verschiedene Hersteller und Geräte verwenden unterschiedliche Protokolle. ESPHome unterstützt zahlreiche verbreitete Varianten.

Im Log kann beispielsweise ein erkanntes NEC-, Sony-, RC5- oder anderes unterstütztes Signal auftauchen. Wird das Protokoll sauber erkannt, ist das spätere Senden relativ einfach.

Falls ESPHome das Protokoll nicht erkennt, können alternativ die Rohdaten des Signals ausgewertet und wieder ausgesendet werden.

IR-Sender in ESPHome einrichten

Jetzt konfigurieren wir GPIO17 als Ausgang für unsere IR-Sendestufe.

remote_transmitter:
  pin: GPIO17
  carrier_duty_percent: 50%

Damit steht der Sender grundsätzlich zur Verfügung. Welcher Befehl gesendet wird, legen wir anschließend über eine Aktion fest.

Ersten IR-Befehl senden

Angenommen, ESPHome hat beim Drücken der Power-Taste ein NEC-Signal erkannt. Dann können wir einen Button anlegen, der genau diesen Befehl wieder sendet.

button:
  - platform: template
    name: "Fernseher Power"
    on_press:
      - remote_transmitter.transmit_nec:
          address: 0x1234
          command: 0xABCD

Wichtig: Die Werte im Beispiel sind Platzhalter. Du musst hier die Werte einsetzen, die du zuvor von deiner eigenen Fernbedienung ausgelesen hast.

Nach dem Übertragen erscheint der Button als Entität in Home Assistant. Ein Druck darauf löst den entsprechenden IR-Befehl aus.

Mehrere Tasten anlegen

Nach dem ersten funktionierenden Befehl ist der Rest hauptsächlich Fleißarbeit. Du kannst die wichtigsten Tasten deiner Fernbedienung nacheinander einlesen und entsprechende Buttons erstellen.

  • Power
  • Lautstärke +
  • Lautstärke −
  • Mute
  • Eingangsquelle
  • Programm + und −
  • weitere gerätespezifische Funktionen

Ich würde allerdings nicht unbedingt jede einzelne Taste nachbauen. Für Automationen reichen häufig Power, Eingang und einige wenige weitere Funktionen.

IR-Befehle in Home Assistant verwenden

Sobald die Buttons in Home Assistant vorhanden sind, lassen sie sich ganz normal in Dashboards, Skripten und Automationen verwenden.

Damit wird auch ein älteres Gerät plötzlich Teil des Smart Homes. Ein Fernseher könnte beispielsweise zusammen mit Beleuchtung und Steckdosen in eine Automation eingebunden werden.

[Bild-Platzhalter: Home-Assistant-Dashboard mit Buttons für Power, Lautstärke und Eingang]

Beispiel: Fernsehabend mit einem Tastendruck

Eine einfache Szene könnte mehrere Aktionen miteinander kombinieren. Über einen Button „Fernsehabend“ lässt sich beispielsweise die Beleuchtung dimmen, eine Steckdose einschalten und anschließend der Fernseher beziehungsweise AV-Receiver per Infrarot starten.

Genau bei solchen Kombinationen spielt Home Assistant seine Stärke aus. Dem System ist letztlich egal, ob ein Gerät über Zigbee, WLAN, ESPHome oder einen selbst gebauten IR-Sender gesteuert wird.

Klimaanlage über ESP32 steuern

Ein weiterer interessanter Anwendungsfall sind Klimaanlagen. Viele Split-Klimageräte besitzen eine Infrarot-Fernbedienung, aber keine lokale Smart-Home-Schnittstelle.

Hier gibt es allerdings eine Besonderheit: Klimaanlagen übertragen über die Fernbedienung häufig nicht nur einen einfachen Tastencode. Stattdessen enthält das IR-Signal den kompletten aktuellen Zustand mit Temperatur, Betriebsmodus, Lüfterstufe und weiteren Einstellungen.

Für solche Geräte würde ich prüfen, ob ESPHome das verwendete Klimaanlagen-Protokoll direkt unterstützt. Das ist wesentlich komfortabler, als zahlreiche lange Rohsignale einzeln zu speichern.

Wenn ESPHome das Signal nicht erkennt

Nicht jede Fernbedienung wird automatisch einem bekannten Protokoll zugeordnet. Das bedeutet aber noch nicht, dass das Gerät ungeeignet ist.

ESPHome kann auch rohe Pulsfolgen ausgeben. Diese sogenannten Raw-Daten lassen sich anschließend wieder über den IR-Sender übertragen. Das ist weniger elegant und benötigt mehr Konfiguration, funktioniert aber bei vielen ungewöhnlichen Fernbedienungen.

Reichweite des IR-Senders verbessern

Wenn der Aufbau auf dem Schreibtisch funktioniert, aus zwei Metern Entfernung aber nicht mehr, liegt das meistens am Sender und nicht an ESPHome.

Eine einzelne schwach angesteuerte IR-LED erreicht schnell ihre Grenzen. Deshalb würde ich für den endgültigen Aufbau eine Transistorstufe verwenden. Bei Bedarf können auch mehrere IR-LEDs in unterschiedliche Richtungen abstrahlen.

Der Standort spielt ebenfalls eine Rolle. Infrarot benötigt im Gegensatz zu WLAN eine brauchbare optische Verbindung zum Empfänger des Geräts. Reflexionen an Wänden funktionieren teilweise erstaunlich gut, darauf würde ich mich bei der Montage aber nicht verlassen.

Kann man die IR-LED mit dem Smartphone sehen?

Das menschliche Auge kann das Infrarotlicht der Fernbedienung nicht sehen. Für einen schnellen Funktionstest hilft häufig eine Smartphone-Kamera.

Richte die Kamera auf die IR-LED und löse einen Befehl aus. Je nach Smartphone und dessen IR-Filter ist das Blinken der LED auf dem Display sichtbar. Das ersetzt keine richtige Messung, hilft bei der Fehlersuche aber erstaunlich oft.

ESP32 IR-Fernbedienung in ein Gehäuse bauen

Nach den ersten Tests würde ich den Aufbau von Breadboard und losen Kabeln befreien. ESP32 und Elektronik passen problemlos in ein kleines Kunststoffgehäuse.

Die IR-LED sollte dabei freie Sicht nach außen haben. Alternativ kann sie durch eine passende Öffnung im Gehäuse geführt werden.

Kleine Elektronikgehäuse bei Amazon ansehen*

ESP32 IR-Fernbedienung oder fertiger IR-Blaster?

Natürlich kann man auch einen fertigen WLAN-IR-Blaster kaufen. Solche Geräte sind kompakt und sofort einsatzbereit. Der Selbstbau mit ESP32 hat dafür den Vorteil, dass wir genau wissen, was im Gerät passiert und keine zusätzliche Hersteller-Cloud benötigen.

Außerdem lässt sich der ESP32 später erweitern. Ein Temperatur- oder Helligkeitssensor kann problemlos im gleichen Gehäuse untergebracht werden.

Wer lieber ein fertiges Gerät verwenden möchte, findet entsprechende Geräte beispielsweise hier:

IR-Blaster bei Amazon ansehen*

Weitere ESP32-Projekte für Home Assistant

Wenn du nach diesem Projekt noch einen ESP32 übrig hast, lässt sich damit deutlich mehr machen. Besonders interessant ist beispielsweise mein ESP32 Präsenzmelder mit LD2410 und ESPHome. Dort erkennt ein günstiger mmWave-Radarsensor, ob sich tatsächlich noch jemand im Raum befindet.

Auch ein selbst gebauter Temperatursensor ist ein guter Einstieg in ESPHome. Weitere Projekte und Grundlagen findest du in meiner ESP8266- und ESP32-Übersicht.

Fazit: Alte Geräte für wenige Euro in Home Assistant integrieren

Eine ESP32 IR-Fernbedienung ist ein schönes Beispiel dafür, wie sich ältere Geräte mit wenig Aufwand in ein modernes Smart Home holen lassen. ESP32, IR-LED und einige Kleinteile kosten nur wenige Euro und ESPHome übernimmt einen Großteil der Softwarearbeit.

Ich würde direkt einen IR-Empfänger mit einbauen. Damit können vorhandene Fernbedienungen ausgelesen werden und das Projekt bleibt flexibel. Sobald die ersten Befehle funktionieren, lassen sich Fernseher, Receiver, Beleuchtung oder andere IR-Geräte direkt aus Home Assistant heraus steuern und in Automationen einbauen.

* Affiliate-Link: Bei einem Kauf über einen gekennzeichneten Link erhalte ich eine Provision. Für dich bleibt der Preis unverändert.

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert