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.

    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.