Es gab eine Zeit, in der Infrarot-(IR)-Sender in Mobiltelefonen üblich waren, aber das ist nicht mehr der Fall. Dieses Projekt bietet eine Lösung: Verwenden Sie Ihr Mobiltelefon mit seiner Bluetooth-Konnektivität, um ein ESP32 zu steuern, das sowohl Infrarotbefehle senden als auch neue Befehle lernen kann. 

Ein IR-Projekt

Ich beschloss, dass ich meine Infrarotgeräte mit meinem Telefon steuern wollte. Ich verglich mehrere Projekte im Internet und stellte einige Nachforschungen an. Die meisten von ihnen arbeiteten mit vordefinierten Codes, was bedeutet, dass die IR codes im Voraus bekannt und in einem Array gespeichert sein mussten. Ich wollte eine vollständig lernfähige Fernbedienung bauen, die keine Vorkenntnisse über proprietäre Fernbedienungscodes erfordert. Die Codes müssen von der Schaltung in Echtzeit und im laufenden Betrieb aktualisiert werden können.

WeMos D1 R32 ESP32 Wi-Fi / Bluetooth development board
Bild 1: WeMos D1 R32 ESP32 Wi-Fi/Bluetooth Entwicklungsboard

Die Hardware

Es gibt nur zwei Hauptbausteine für dieses Projekt:

  •  Eine Mikrocontroller-Platine (Bild 1) mit einem on-board Infrarotempfänger zum Lernen der Codes von vorhandenen Fernbedienungen und einem Infrarotsender, der die Hauptaufgabe des Sendens von Befehlen an Ihren Fernseher, Ihre Set-Top-Box usw. übernimmt. Die gelernten Codes werden auf die Platine gespeichert.
 
  • Ein Android-Telefon, auf dem eine App läuft, die als Benutzerinterface für die Mikrocontroller-Platine dient. Die App bietet Ihnen die Benutzeroberflache für die Fernbedienung (Bild 2), somit Sie die Tasten bedienen können, die Sie zur Steuerung Ihrer Infrarotgeräte benötigen. Sie können die Lernsequenz auch mit einem Tastendruck in dieser Benutzeroberfläche starten, aber der Lernvorgang selbst wird auf dem Mikrocontroller-Board durchgeführt.
 
BlueRC V1.1 Android app user interface
Bild 2: Benutzeroberflache der BlueRC V1.1 Android-App
Für die Kommunikation zwischen Telefon und IR-Sender-Hardware habe ich mich für Bluetooth entschieden, weil es im Vergleich zu Wi-Fi wenig Strom verbraucht und eine geringe Latenzzeit hat.

Ich war auf der Suche nach einer handelsüblichen Lösung, die alle Hardware-Anforderungen abdeckt, fand aber leider nichts, was zu 100 % geeignet war. Für die Mikrocontroller-Seite habe ich mich für ein ESP32-Board entschieden, da es sowohl über Bluetooth als auch Wi-Fi verfügt. Das D1 R32 Entwicklungsboard von WeMos hat ein Arduino UNO-kompatibles Pin-Layout und funktioniert gut mit der Arduino IDE.

Ich habe ein Erweiterungsmodul mit mehreren Sensoren (Bild 3) aufgesteckt. Dieses Board verfügt über eine Vielzahl anderer Sensoren, wie z. B. einen Luftfeuchtigkeitssensor, einen Summer, ein Potentiometer, eine Fotozelle, eine RGB-LED und ein paar Druckschalter - die alle eine Menge Möglichkeiten für zukünftige Ideen zur Hausautomatisierung bieten. Ich habe die Sensoren verwendet, um die Temperatur und die Luftfeuchtigkeit in der Android-App anzuzeigen, aber unser wichtigster On-Board-Sensor ist der Infrarotempfänger!
 
Keyestudio Easy Module Shield V1
Bild 3: Das Keyestudio Easy Module Shield V1 für Arduino. (Quelle: flyrobo.in)

Das Modul hat zwar einen eingebauten IR-Empfänger, aber keinen Sender, sodass ich mein eigenes schnelles und einfaches Treiber-/Sendemodul bauen musste. Es besteht aus nur 3 Komponenten - einer 3-poligen Stiftleiste, einem BC547 NPN-Transistor und einer IR-Sender-LED, die nach Bild 4 sehr einfach aufgebaut ist. Nach dem Löten steckte ich die Stiftleiste in den Port-Pin D7 auf der Sensorabschirmung, die den Port-Pin D14 als Ausgang verwendet, um meinen IR-Sender zu steuern, während der IR-Empfänger der Abschirmung standardmäßig den Port-Pin D27 als Eingang verwendet. 
 
DIY IR driver/transmitter module.
Bild 4: Mein DIY-Infrarot-Treiber/Sendermodul.
Wie ich es angeschlossen habe, ist in Bild 5 zu sehen.
The shield and how I connected my IR driver/transmitter module to it
Bild 5: Das Erweiterungsmodul und wie ich mein IR-Treiber-/Sendemodul daran angeschlossen habe. (Quelle: flyrobo.in)

Die Software

Meine Software ist relativ einfach: Der ESP32 fungiert als Bluetooth-Server, und eine Android-App als Client. Der ESP32 wartet einfach auf Bluetooth-Nachrichten von der Android-App. Es gibt nur eine minimale Bluetooth-Kommunikation zwischen den beiden Geräten, da die Tastendrücke der Fernbedienung - ebenso wie der Befehl zum Starten der Lernsequenz ("^") - von der Android-App als einzelne Zeichen an den ESP32 gesendet werden.

Zuerst habe ich die Standard-IR-Bibliothek für Arduino ausprobiert. Sie funktionierte gut, wird aber vom ESP32 nicht vollständig unterstützt, da der ESP32 einen proprietären Hardware-Fernbedienung-Transceiver (RMT) mit einer Menge eingebauter Protokoll- und Modulationslogik für IR-Signale verwendet. Nach vielen Versuchen und Fehlern habe ich schließlich eine voll funktionsfähige IR-Bibliothek für den ESP32 gefunden, IRremoteESP8266, von Ken Shirriff et al. Vielen Dank, Ken.

Ursprünglich wollte ich die IR-Codes im EEPROM speichern, aber als ich meine Firmware schrieb, stellte ich fest, dass der ESP32 überhaupt kein EEPROM hat. Er hat jedoch die Möglichkeit, Daten dauerhaft im Flash über die Preferences.h Bibliothek zu speichern.

Da meine ursprüngliche Fernbedienung eine RC5-Kodierung hatte, habe ich nur das RC5-Kodierungsschema implementiert. Möglicherweise müssen Sie den Arduino-Sketch ändern, wenn Ihre eigene Fernbedienung ein anderes Protokoll verwendet. 

Abonnieren
Tag-Benachrichtigung zu Infrarot jetzt abonnieren!

Programmierung

Für das WeMos-Board laden Sie den BlueRC Arduino-sketch. herunter. Es ist ein einzelner .ino-Sketch, den Sie mit der Arduino IDE hochladen können.

Um die Android-App einzurichten, folgen Sie diesen Schritten:

1. Laden Sie auf Ihrem Android-Gerät BlueRC-app-V1.1.apk von der GitHub-Seite. herunter. Sie müssen Ihr Telefon so einstellen, dass das Herunterladen von Apps aus externen Quellen (außer dem Google Play Store) erlaubt ist.

2. Schalten Sie das WeMos-Board ein, auf dem unsere BlueRC .ino-Firmware läuft.

3. Starten Sie die Android-App. Wenn Bluetooth nicht aktiv ist, bittet die App um Erlaubnis; tippen Sie auf Accept.

4. Tippen Sie auf das "Kebab-Menü" oben rechts und dann auf Connect BT Device. Wenn Sie sich zum ersten Mal mit dem ESP32 verbinden, tippen Sie auf Scan for device und warten Sie, bis ESP32BlueRC-Shield unter Other Available Devices erscheint. Tippen Sie darauf und bestätigen Sie dann die Verbindung.

5. In der Statusleiste oben sollten Sie nun connected:ESP32BlueRC-Shield sehen.

Sobald Sie Ihre Hardware verbunden haben, müssen Sie den Scan-Vorgang nicht erneut durchführen - tippen Sie einfach in Zukunft auf ESP32BlueRC-Shield unter Paired Devices.

Wenn die App installiert ist und funktioniert, können Sie nun den Lernprozess durchführen:

1. Ein langes Drucken auf die LEARN

-Taste in der Benutzeroberfläche wird die App mit "Learning begins, please press a button within 10 seconds..." beantworten. Die Android-App sendet dann das Sonderzeichen "^" an den ESP32, woraufhin die blaue LED auf dem Shield aufleuchtet.

2. Tippen Sie auf die Taste der Benutzeroberfläche, die Sie dem ESP32-Board anlernen möchten. Das Telefon sendet das entsprechende Zeichen an das ESP32-Board, sodass das ESP32-Board auf den nächsten Schritt wartet.

3. Richten Sie Ihre alte Infrarot-Fernbedienung auf die ESP32-Platine und drücken Sie die entsprechende Taste auf der Fernbedienung. Der IR-Code für diese Taste wird automatisch im Speicher des ESP32 gespeichert.

4. Wiederholen Sie die Schritte 1 und 2 für alle Tasten, welche Sie IR-Codes zuordnen möchten.

5. Schließen Sie die App, indem Sie auf Menü Exit Program tippen.


Das war's. Sie können nun Ihre Infrarotgeräte von Ihrem BlueRC-Gerät aus steuern, indem Sie die App auf Ihrem Android-Telefon verwenden.

Für die Fehlersuche am ESP32 ist es am besten, ihn aus- und wieder einzuschalten! Sie können ein video in Aktion auf meinem YouTube-Kanal sehen.


Dieser Artikel (220103-01) erscheint in der Ausgabe Mai/Juni 2023 von Elektor Mag. Haben Sie technische Fragen oder Anmerkungen zu diesem Artikel? Dann wenden Sie sich bitte an die Elektor-Redaktion.