Raspberry Pi Fernbedienung: Infrarot Steuerung einrichten

Für verschiedene Anwendungen, wie z.B. das Mediacenter für den Raspberry Pi OpenELEC / KODI ist eine Steuerung via Infrarot Raspberry Pi Fernbedienung sehr nützlich. Diese kann genutzt werden um mit Kombinationen der Fernbedienung oder Infrarot LED den Pi zu steuern oder um Skripte und Anwendungen zu starten.

Zubehör

Folgendes Zubehör benutze ich:

Aufbau

  • GPIO 22 an den IR Empfänger (bitte Datenblatt beachten)
  • GPIO 23 als Basis des Transistors

 

Raspberry Pi Infrarot LED

Software – Raspberry Pi Fernbedienung

Ich benutze das Programm lirc. Der Vorteil daran ist, dass es unter Linux läuft und einfach damit zu arbeiten ist.
Also installieren wir lirc.

sudo apt-get install lirc -y

Nun müssen wir die /etc/modules Datei bearbeiten

sudo nano /etc/modules

und ans Ende der Datei folgendes hinzufügen:

lirc_rpi
lirc_dev

Mit STRG + O und STRG + X speichern und beenden.

Nun muss noch eine weitere Datei bearbeitet werden:

sudo nano /etc/lirc/hardware.conf

Diese bekommt folgenden Inhalt:

Infrarot Empfänger testen

Um erst einmal den Empfänger zu testen, kannst du eine normale Infrarot Fernbedienung nehmen und einige Tasten drücken. Aber erst einmal muss lirc gestoppt werden:

sudo /etc/init.d/lirc stop

und getestet.

sudo modprobe lirc_rpi

Anschließend kannst du lirc mittels

mode2 -d /dev/lirc0

starten und Tasten auf der Fernbedienung drücken. Eine Ausgabe auf der Konsole sieht etwa folgendermaßen aus:

space 16777215
pulse 9007
space 4440
pulse 620
space 504
pulse 660
space 470
pulse 630
space 494
pulse 613
...

Wenn du so etwas angezeigt bekommst, hat alles geklappt und du kannst mit STRG + C abbrechen. Solltest du nichts angezeigt bekommen, überprüfe die Verkabelung.

 

Raspberry Pi Fernbedienung registrieren

Wie du gesehen hast, sind die Codes einer Taste sehr kryptisch und schwer zu unterscheiden. Dafür hat lirc eine Möglichkeit die Tastencodes zu registrieren. Dazu muss zuerst lirc wieder gestoppt werden.

sudo /etc/init.d/lirc stop

Im folgenden wirst du nach der Belegung gefragt. Dies erfordert die Eingabe eines Keys. Um alle gültigen Keys anzuzeigen (du wirst sie gleich brauchen), gibst du folgendes ein:

irrecord --list-namespace

Nun nehmen wir auf. Schnapp dir also die Fernbedienung. Mit diesem Befehl speichern wir unsere Eingaben in der Konfigurationsdatei lirc-fernbedienung.conf (im Homeverzeichnis):

irrecord -d /dev/lirc0 ~/lircd-fernbedienung.conf

Hier musst du zwei mal mit Enter bestätigen, ehe es los geht. Als erstes müssen die Tasten erkannt werden. Drücke unterschiedliche Tasten für jeweils eine Sekunde, bis solch eine Meldung kommt:

Please enter the name for the next button (press to finish recording)

An dieser Stelle brauchst du die Codes, die du gerade ausgegeben bekommen hast. Ich möchte z.B. nur die Zahlen registrieren, also gebe ich KEY_0 ein (+ Enter) und drücke anschließend die 0 auf der Fernbedienung. Das muss für jede Taste, die später erkannt werden soll, wiederholt werden.
Bist du fertig, beende mit Enter (ohne Eingabe). Falls noch eine Anweisung kommt, folge dieser.

Als nächstes möchten wir der Konfiguration einen eigenen Namen geben, z.B. toshiba_remote. Dazu bearbeiten wir die Konfigurationsdatei:

sudo nano ~/lircd-fernbedienung.conf

In Zeile 17 kannst du den Namen anpassen. Mit STRG + O und STRG + X speichern und beenden.

Bevor wir unsere Konfigurationsdatei verschieben, machen wir noch ein Backup der alten Datei:

sudo mv /etc/lirc/lircd.conf /etc/lirc/lircd_original.conf

Jetzt können wir die Datei beruhigt verschieben

sudo cp ~/lircd-fernbedienung.conf /etc/lirc/lircd.conf

und starten anschließend lirc:

sudo /etc/init.d/lirc start

Wie man seine eigenen Codes (z.B. einer unbekannten Universalfernbedienung) einspeichert, habe ich in diesem Video gezeigt:

 

Infrarot LED testen

Mittels des Namen, den du gerade angegeben hast, kannst du dir die verfügbaren Befehle ausgeben lassen. Ich hatte meine Fernbedienung ja toshiba_remote genannt.

irsend LIST toshiba_remote ""

Anschließend kann man einen der aufgelisteten Befehle senden:

irsend SEND_ONCE toshiba_remote KEY_0

Indem man ein paar Optionen setzt, kann man auch Befehle mehrmals hintereinander senden, z.B.

#Verringert die Lautstärke 3 Sekunden lang
irsend SEND_START toshiba_remote KEY_VOLUMEDOWN; sleep 3; irsend SEND_STOP toshiba_remote KEY_VOLUMEDOWN

Schaue dazu am besten in die Hilfe von irsend (irsend --help)

Damit ist es nun möglich den TV anzuschalten, das Programm zu wechseln, etc.

Denkbar wäre sich so selbst eine All-in-One Raspberry Pi Fernbedienung zu bauen. Eine Fernbedienung sendet und die IR Diode sendet das entsprechende Signal an das jeweilige Gerät (z.B. Toshiba TV Fernbedienung an Sony Blueray Player).

79 Kommentare

  1. HuHu,

    im ersten Abschnitt steht „Diese kann genutzt werden um mit Kombinationen der Fernbedienung oder Infrarot LED den Pi zu steuern oder um Skripte und Anwendungen zu starten.“

    Wie kann ich denn jetzt dem Pi sagen, dass er bei Tastendruck auf die Fernbedienung ein Script startet?

    Antworten
    • Hi,
      dafür müsstest du z.B. ein Skript starten, welches dauerhaft auf IR Signale wartet und darauf reagiert (also eine Anwendung/Skript etc startet). Du kannst es etnweder mit screen im Hintergrund laufen lassen oder es im Autostart öffnen lassen.

      Antworten
      • HuHu,

        danke für die (unerwartet schnelle) Antwort.
        Inzwischen habe ich eine andere Möglichkeit gefunden:

        Eine lircrc-Datei erstellen,
        sudo nano /etc/lirc/lircrc
        Dort beispielsweise diesen Inhalt reinkopieren:
        begin
        button = Taste1
        prog = irexec
        config = sh /home/pi/aktion.sh
        flags = quit
        end

        Taste1 muss eine vorhandene Taste in der Datei lircd.conf sein.

        Mit
        irexec /etc/lirc/lircrc
        wird irexec gestartet. Wird jetzt die Taste1 auf der Fernbedienung gedrückt, startet das Script aktion.sh.

        Mit der Option -d wird der Daemon im Hintergrund gestartet
        irexec -d /etc/lirc/lircrc

        Wenn in der Datei /etc/init.d/lirc
        START_IREXEC=true
        steht, startet das sogar automatisch beim nächsten Systemstart wieder mit. (Wenn die Option -d für den Daemon verwendet wurde.)

        LG Simon

      • Hi Simon,
        Danke, dass du deinen Code geshared hast. lirc hat was das angeht wirklich viele Optionen und ist für IR Anwendungen die wohl beste Lösung. Sobald ich Zeit finde werde ich deinen Code testen und ins Tutorial einfügen 🙂

        LG Felix

    • Hallo, ich habe das Script ausprobiert klappt auch alles super, nur nach ein reboot muss ich den Daemon aber wieder manuell starten, weiß jemand eine Lösung?

      Gruß Dominik

      Antworten
  2. Hallo, Hallo,
    brauche mal unbedingt Hilfe! Ich habe alles so aufgebaut und installiert wie oben beschrieben, mehrere Fernbedienungen ausprobiert und mit Kamera auf Signal überprüft. Keine Fehlermeldung bei Software.: Trotzdem keine Meldung auf der Konsole. Was ich nicht verstehe ist, woher weiß der RPI dass GPIO 22 als Input arbeiten soll?
    Muss ich dazu noch ein Programm schreiben, um das zu definieren?

    Liebe Grüße
    Peter

    Antworten
    • Hi Peter,
      Kann es evtl an deinem IR Empfänger liegen? Ich hatte in der Vergangenheit auch ein paar Modelle, die die Codes der normalen Fernbedienungen nicht erkannt haben.
      GPIO 22/23 sind die vordefinierten GPIOs in lirc (zumindest gewesen, als ich das Tutorial geschrieben habe, sollte sich aber normalerweise nicht ändern).

      LG Felix

      Antworten
      • Hallo Felix,
        wahrscheinlich nicht, da ich zwei baugleiche Empfänger getestet haben. Bei beiden habe ich die Spannung während der Bedienung des IR Senders am Ausgang gemessen. Sie geht von 3,3 V auf ca. 2,4 V zurück. Da ein Multimeter nur den Mittelwert misst, kann das auf Grund der Pulsbreitenänderung durch die Modulation des 38 kHz Signals mit den Bitmustern (z.B. RC5) durchaus passen, d.h. es passiert etwas.
        Welche anderen Möglichkeiten gibt es, die Funktion des TSSP4P38, der Infrarotempfänger, den ich verwende, mit dem RPI zu testen.

        Karnevalistische Grüße aus Aachen
        Peter

    • Ja, das liegt daran das wir den Raspberry Pi 2 benutzen und hier der Raspberry Pi 1 benutzt wurde. Um es zum laufen zu bekommen, musste ich auch GPIO 18 für den IR Empfänger nutzen und wie in einem anderen Kommentar schon erwähnt, das hier:

      dtoverlay=lirc-rpi

      in die /boot/config.txt am Ende einfügen.

      Antworten
  3. Hallo, noch mal eine Frage:
    Ich habe jetzt durch die Probiererei alle config Dateien durcheinander gebracht und würde deshalb das LIRC noch mal neu installieren. Da ich aber blutiger Anfänger bin, weiß ich nicht, wie man LIRC wieder deinstalliert. Kann mir dabei jemand helfen?

    Liebe Grüße
    Peter

    Antworten
    • Hallo Peter,
      versuch es mal mit sudo apt-get remove lirc (anstatt von remove kannst du auch purge nehmen, dadurch werden globale Konfigurationen auch entfernt).
      Du findest hier auch noch zusätzliche Optionen für apt-get: wiki.ubuntuusers.de/apt/apt-get

      LG Felix

      Antworten
  4. Hallo,

    ich bekomme leider folgende Fehlermeldung:

    root@raspberry:~# mode2 -d /dev/lirc0
    mode2: could not open /dev/lirc0
    mode2: default_init(): Device or resource busy

    Antworten
  5. Hallo,

    ich habe in der /boot/config.txt folgendes hinzugefügt:
    dtoverlay=lirc-rpi,gpio_in_pin=23,gpio_out_pin=22
    Nun kommt die Fehlermeldung nichtmehr, aber beim Drücken von den Fernbedienungsknöpfen kommen keine Signale bei mode2 -d /dev/lirc0
    Soll ich dir ein Bild von meinem Breadboard senden?

    Antworten
  6. Hi ich habe alles so nach gebaut
    Habe anfangs GPIO 18 als input genommen ging einwandfrei
    GPIO 23 als Ausgang über einen Transistor incl Widerständen zu infrarot led
    Habe eine einfache aus dem Elektronikladen gekauft
    Das empfangen ging von anfang an aber das senden nicht
    Habe dann dtoverlay=lirc-rpi,gpio_in_pin=23,gpio_out_pin=22 in die /boot/config.txt eingebaut.
    den input auf 22 gelegt funktiniert auch nur das senden immer noch nicht
    Die Sende diode leuchtet dauernd (Mit HandyCam getestet) Aber sie flackert nicht beim senden .
    An GPIO 17 und 27 habe ich meine 433mhz sender & Empänger beide funktionieren einwandfrei
    Nur lirc senden geht nicht.
    Wie kann ich in der fehlersuche vorgehen
    Danke im voraus

    Antworten