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.

    Comments

    author
    tschaerni made it! (author)2016-09-18

    Relativ gutes tutorial, hab mir auch einen Empfänger gebastelt. Leider sendet mein Fernseher ungefähr auf der gleichen Frequenz IR Signale aus welcher mein Empfänger empfängt... vielleicht kann ich noch eine Abschirmung basteln. btw. ich hab das ganze mal auf Github hoch geladen --> https://github.com/tschaerni/arduino-stuff/blob/master/IR_to_keyboard/IR_to_keyboard.ino

    author
    JensLab made it! (author)2015-11-14

    @AdrienL3: Es ist richtig dieses Tutorial muss gelesen werden. Alle wichtigen Schritte sind bebildert. Für weiterführende Infos sind entsprechende Links im Text.
    So wird der Microcontroller mit der Arduino-Ide programmiert. Siehe dazu: https://www.arduino.cc/en/Guide/HomePage

    author
    AdrienL3 made it! (author)2015-11-13

    guter Tutorial.aber ich finde es fehlen mehr Fotos für besser zu verstehen PS in welcher Sprache programmierst du den Program?

    temp_-1170232101.jpg
    author
    DIY Hacks and How Tos made it! (author)2015-10-03

    Great raspberry pi project.