Introduction: Kontrolliere KODI Mit Vorhandener Fernbedienung
Für den Zugriff auf meinen Enigma2-Receiver habe ich in der Küche einen Raspberry Pi B mit OpenELEC installiert.
Die Bedienung erfolgte nach der Konfiguration mit einer sehr guten Smartphone-App, doch warum ein weiteres Gerät nutzen, wenn die TV-Fernbedienung sowieso genutzt wird. Aufgrund des Alters unterstützt der Fernseher kein CEC und es musste eine andere Lösung her:
Ein Arduino als virtuelle Tastatur (Keyboard) mit angeschlossenem IR-Empfänger (IR-Sensor)
Verwendete Hardware:
Raspberry Pi mit KODI (XBMC)
Arduino und IR-Empfänger
Fernbedienung (für den TV bereits vorhanden)
Step 1: Stelle Die Benötigte Hardware Zusammen.
Hardware:
- Arduino Leonardo kompatibles Microkontrollerboard -> z.B. ATMEL 32U4 PRO Micro oder Genuino MICRO http://www.genuino.cc
- USB Kabel
- IR Empfänger (Pinbelegung beachten) oder IR Empfängermodul (z.B. DFRobot oder Groove)
- Media Center KODI - Raspberry Pi
- Fernseher mit vorhandener Fernbedienung (TV Remote)
Step 2: Stelle Die Benötigte Software Zusammen.
Software zum Erstellen:
- Arduino IDE (www.arduino.cc download)
- Infrarot-Bibliothek (IRremote) schaue bei http://www.righto.com/ und suche nach "IRremote"
Sketches zum Hochladen auf den Arduino/Genuino:
- Erfassen der IR-Signale und Ausgabe auf dem PC-Monitor:
IRrecvDemo.ino ist ein Beispiel aus der Infrarot-Bibliothek
- Empfangen der IR-Signale und umsetzen in Tastatur-Befehle (Keyboard):
IR2KeyJW.ino ist an die erfassten IR-Signale und Tastaturbefehle anzupassen
(Download beim entsprechenden Schritt)
Step 3: Gewünschte Zuordnung (Remote2Keyboard) Festlegen
Folgende Kodi-Tastaturbefehle sollen mit der Fernbedienung ausgeführt werden:
OpenELEC/KODI-Shortcuts - Tastaturbefehle
play - p
play/pause - space
stop - x
vorlauf - f
rücklauf - r
hoch - pfeil nach oben
links - pfeil nach links
rechts - pfeil nach rechts
runter - pfeil nach unten
select - enter
shutdown menue - s
back - backspace (loeschen)
exit - escape
Auf einem Foto oder Skizze der TV-Fernbedienung die Ausgabe für die spätere Verwendung notieren.
Step 4: Anschluss Des Sensors Am Arduino/Genuino/Microcontroller
IR-Sensor mit dem Arduino Leonardo kompatibler Microcontroller ATMEL 32U4 verbinden.
Kabelkodierung:
- Schwarz - GND (-)
- Rot - VCC (+)
- Weiß - ohne Belegung
- Gelb - Signal
Anschluss:
Sensor - Genuino
GNG - GND
VCC - VCC
Signal - PIN 5 (Pinnummer für Arduino-Sketch merken)
Beim Anschluss des Sensors (besonders ohne Breakout-Board) ist auf die Pinbelegung zu achten. Die Verbindung kann dauerhaft hergestellt werden, z.B. durch Anlöten der Kabel an die Microcontrolleranschüsse. Der IR-Sensor bleibt für die Erfassung der IR-Signale und der späteren Verwendung an den selben PIN (PIN 5) angeschlossen.
Step 5: Erfassen Des Infrarot-Signales
Zum Erfassen der IR-Signale wird temporär das Arduino-Programm "IRrecvDemo.ino" auf den Microcontroller geladen, siehe STEP 2. Das Programm erfasst die IR-Signale und druckt diesen als Hexadezimal-Zahl (0x????????) aus. Diese wird später im endgültigen Programm benötigt.
Sketch auf den Arduino (mit angeschlossenem IR-Senor) hochladen.
Arduino am PC über USB anschließen (ggf. noch vom Sketch hochladen angeschlossen)
Seriellen Monitor öffnen (unter Menue: Werkzeuge) die Baudrate im Drop-Down-Menue auf 9600 stellen.
Die Fernbedienung auf den IR-Sensor ausrichten und die gewünschten Tasten nacheinander drücken und die Werte notieren. Dazu den im Seriellen Monitor ausgegebenen Wert in eine Textdatei für die spätere Verwendung kopieren.
z.B. Play-Taste auf Samsung-Remote ergibt B676A3B2 dies wird später im endgültigen Programm zu 0xB676A3B2.
BEISPIEL: ERGEBNIS DER ERFASSTEN IR-SIGNALE FUeR TV-REMOTE: SAMSUNG - BN59-00618A - STB PLAY 0xB676A3B2 STOP 0x1478EC78 FORWARD 0x395AECF4 REWIND 0xC1E6EB16 UP 0xE8105F4 DOWN 0x1114CBF6 LEFT 0xC1A1B332 RIGHT 0x9F953498 ENTER 0xD7064AD8 EXIT 0x558A0912 BACK 0xB2D45698 // menue button POWER 0x40CF3F38 // shutdown menu
Wichtig: Jeder Fernbedienungs-Typ hat seine eigenen Werte (HEX-Zahlen)
Step 6: Erstellen Des Endgültigen Programmes IR2Key.ino
Alle gewünschten Fernbedienungstasten wurden erfasst und notiert.
Im dem zu erstellenden Sketch IR2Key.ino wird eine Zuordnung zwischen IR-Singnal und KODI-Tastaturbefehl nach folgendem Muster vorgenommen:
* play - p // KODI Tastaturbefehl #define PLAY 0xB676A3B2 // IR-Signal im HEX-Format PLAY zuordnen #define PLAY_KEY Keyboard.write(112); // ASCII for p PLAY_KEY zuordnen case PLAY: // Arduino/Genuino-Code - wenn PLAY erfasst, dann PLAY_KEY; // PLAY_KEY (also "p"') ausführen break;
Für meine Fernbedienung ergibt sich folgendes Programm IR2KeyJW.ino:
/*
* IR2KeyJW: based on IRrevcDemo (Version 0.1 July, 2009) of Ken Shirriff arcfn.com * Remote signal to keyboard use with openELEC * An IR detector/demodulator must be connected to the input RECV_PIN. * Modified by JensLab at Feb, 2015 * OpenELEC / kodi - shortcuts * play - p * play/pause - space * stop - x * vorlauf - f * rücklauf - r * up - pfeil nach oben * left - pfeil nach links * right - pfeil nach rechts * down - pfeil nach unten * select - enter * shutdown menue - s * back - backspace (loeschen) * exit - escape */ #include int RECV_PIN = 5; IRrecv irrecv(RECV_PIN); decode_results results; // Recorded IRcodes (here SAMSUNG-TV Remote) #define PLAY 0xB676A3B2 #define STOP 0x1478EC78 #define FORWARD 0x395AECF4 #define REWIND 0xC1E6EB16 #define UP 0xE8105F4 #define DOWN 0x1114CBF6 #define LEFT 0xC1A1B332 #define RIGHT 0x9F953498 #define ENTER 0xD7064AD8 #define EXIT 0x558A0912 #define BACK 0xB2D45698 // menue button #define POWER 0x40CF3F38 // shutdown menu // Mediaplayer hot keys #define PLAY_KEY Keyboard.write(112); // ASCII for p //Keyboard.write(32); // ASCII code for space #define STOP_KEY Keyboard.write(120); // ASCII for x #define FORWARD_KEY Keyboard.write(102); // ASCII for f #define REWIND_KEY Keyboard.write(114); // ASCII for r #define UP_KEY Keyboard.write(KEY_UP_ARROW); // Keyboard.press(KEY_UP_ARROW); delay(100); Keyboard.releaseAll(); #define DOWN_KEY Keyboard.write(KEY_DOWN_ARROW); // Keyboard.press(KEY_DOWN_ARROW); delay(100); Keyboard.releaseAll(); #define LEFT_KEY Keyboard.write(KEY_LEFT_ARROW); // Keyboard.press(KEY_LEFT_ARROW); delay(100); Keyboard.releaseAll(); #define RIGHT_KEY Keyboard.write(KEY_RIGHT_ARROW); // Keyboard.press(KEY_RIGHT_ARROW); delay(100); Keyboard.releaseAll(); #define ENTER_KEY Keyboard.write(KEY_RETURN); #define EXIT_KEY Keyboard.write(KEY_ESC); #define BACK_KEY Keyboard.write(KEY_BACKSPACE); // menue button #define POWER_KEY Keyboard.write(115); // ASCII for s, shutdown menu void setup() { Serial.begin(9600); // for debugging irrecv.enableIRIn(); // Start the receiver Keyboard.begin(); // Start keyboard } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); // for debugging // select action response to IR input switch(results.value) { case PLAY: PLAY_KEY; break; case STOP: STOP_KEY break; case FORWARD: FORWARD_KEY break; case REWIND: REWIND_KEY break; case UP: UP_KEY break; case DOWN: DOWN_KEY break; case LEFT: LEFT_KEY break; case RIGHT: RIGHT_KEY break; case ENTER: ENTER_KEY break; case EXIT: EXIT_KEY break; case BACK: BACK_KEY break; case POWER: POWER_KEY break; } irrecv.resume(); // Receive the next value } }
Dieses Programm auf den Leonardo kompatiblen Microcontroller (Arduino/Genuino) hochladen.
Attachments
Step 7: Anschließen an Raspberry Pi - Computer Und Nutzen
Der Infrarot-Empfänger-in-Tastaturbefehl-Umwandler ist fertig und wird so hinter dem Fernseher versteckt, dass das Fernbedienungssignal ausreichend auf den IR-Sensor strahlt.
Step 8: Bilder Zur IR-Signalerfassung
- 00 Aufbau
- 01 Arduino-IRremote Lib kopieren
02 Arduino-IRremote Lib umbenennen
02b Arduino-IRremote Lib umbenennen in IRremote
03 Arduino-IRremote Lib prüfen
04 IRrecvDemo laden
05 Seriellen Anschluss bestimmen
06 Sketch hochladen
07 Seriellen Monitor oeffnen
08 Baud-Rate einstellen
09 HEX notieren
Step 9: Fazit
Mit dem modifizierbaren IR2KeyJW.ino Sketch kann auf Änderungen der notwendigen Tastaturbefehle (inkl. Kombinationen) einfach reagiert werden. Eine Änderung am Media-System ist nicht erforderlich. Somit muss beispielsweise kein LIRC im Hintergrund laufen.
Des Weiteren könnte das Arduino-IR-Modul zur PC Fernsteuerung umgeschrieben werden. Der größte Vorteil: nur noch ein Gerät zur Bedienung auf dem Tisch.
Danke an Massimo Banzi und Team http://www.arduino.cc für die Arduinoplatform.
Danke an http://www.sparkfun.com und http://www.adafruit.com für die guten Anleitungen.
Danke an Ken Shirriff von http://www.arcfn.com bzw. http://www.righto.com/ für das Programm.
Die Arduino-Platform wird für Europa von www.arduino.org (Arduino S.R.L - Italy) hergestellt.
Die Genuino-Platform wird von Partnern der www.arduino.cc (Arduino LLC) hergestellt.
Die Markenrechte liegen bei den Rechteinhaber.