Raspberry Pi Infrarot Fernbedienung

GPIO

Raspberry Pi: Per IR Remote Befehle ausführen

Mit einer Raspberry Pi IR Remote (Infrarot Fernbedienung) können Signale übertragen werden, woraufhin Programme gestartet oder Aktionen ausgeführt werden. Damit kann man sein Mediencenter (KODI, etc.) fernsteuern oder es für die Hausautomatisierung (FHEM) verwenden.

Wie man LIRC einrichtet, Codes der Fernbedienung ausliest, abspeichert und anschließend jene Tasten mit Funktionen belegt, wird in diesem Tutorial behandelt.



Geplant ist meinerseits ein Raspberry Pi Roboter, welcher unter anderem mit einer Infrarot Fernbedienung ferngesteuert werden kann. Aber natürlich kann eine solche Fernsteuerung auch in allen anderen Projekten ihren Einsatz finden.

 

Raspberry Pi IR Remote & Zubehör

Ich verwende hier ein Set aus IR Empfänger und Fernbedienung.

Welche alternative IR Fernbedienung (Universalfernbedienung oder mitgelieferte) verwendet wird, spielt keine Rolle. Allerdings sollte optimal keine Fernbedienung für vorhandene Geräte gewählt werden (außer für Testzwecke), da ansonsten beide Geräte angesprochen werden (sofern in Reichweite).

 

Verbindung zwischen Raspberry Pi und Infrarot Empfänger

Raspberry Pi IR Remote Empfänger TSOP4838

TSOP4838: 1 = OUT, 2 = GND, 3 = VCC

Der Infrarot Empfänger hat genau 3 Pins: VCC, GND und den Datenpin. Falls du das Set, welches ich verwende, hast, dann wirst du feststellen, dass die Leitungen bereits beschriftet sind. Falls du ein Empfänger Modul wie den TSOP4838 (Datenblatt) verwendest, siehst du rechts die Belegung.

Wir schließen nun also VCC (Pin 3) vom IR Empfänger an 3.3V (Pin 1) des Raspberry Pi’s an, GND (Pin 2) an GND (Pin 6 vom Pi) und den Datenpin an einen freien GPIO des Raspberry Pi’s, wie z.B. GPIO17 (Pin 11).

Schematisch sieht der Aufbau dann folgendermaßen aus:

raspberry pi ir remote control Steckplatine

 

 

 

LIRC auf dem Raspberry Pi einrichten

Das beste Programm unter Linux Distributionen, welches Infrarot Signale auslesen kann, ist LIRC. Um es zu verwenden und einzurichten, müssen wir es zuerst installieren:

sudo apt-get install lirc --yes

Nun laden wir die benötigten Module:

sudo modprobe lirc_dev
sudo modprobe lirc_rpi gpio_in_pin=17 gpio_out_pin=23

Falls du anschließend eine folgende Fehlermeldung bekommst (modprobe: ERROR: could not insert 'lirc_rpi': No such device), liegt das daran, dass Modul noch nicht aktiviert ist. Dies machen wir im folgenden Schritt, wonach neu gestartet werden muss.

sudo nano /boot/config.txt

Ans Ende dieser Datei kommt folgende Zeile (gespeichert wird mit STRG+O, STRG+X):

Falls du einen anderen GPIO als 17 verwendest hast, musst du dies wieder anpassen. Der Pin zum Senden (Out) ist dafür gedacht, falls du mit dem Raspberry Pi auch IR Codes senden möchtest. Falls nicht, kann dieser auch weggelassen werden. Kam nach dem Laden der Module eine Fehlermeldung, ist es jetzt an der Zeit neu zu starten (sudo reboot).

Anschließend lassen wir uns das Device mittels ls -l /dev/lir* anzeigen. Der Output sollte so aussehen:

crw-rw---- 1 root video 245, 0 Jul  3 22:42 /dev/lirc0

 

Zuguterletzt tragen wir das Device noch in der Hardware Konfiguration von LIRC ein, damit es später verwendet werden kann:

sudo nano /etc/lirc/hardware.conf

Hier findest du einige leere Parameter („DEVICE“, „MODULES“, etc.), welche folgendermaßen angepasst werden:

# Arguments which will be used when launching lircd
LIRCD_ARGS="--uinput"
DRIVER="default"
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"

Nun können wir den Service neustarten, sodass alle Änderungen übernommen werden.

sudo /etc/init.d/lirc restart

 

Raspberry Pi IR Remote Control einrichten

Um LIRC und unsere Fernbedienung zu initialisieren, tippen wir folgendes ein:

sudo /etc/init.d/lirc stop
mode2 -d /dev/lirc0

Anschließend werden ein paar Tasten der IR Fernbedienung gedrückt. Nun sollte ein Output ähnlich zu folgendem erscheinen:

space 2207679
pulse 8992
space 4523
pulse 519
...

Die Codes werden also erkannt und wir können fortfahren. Falls keine Codes zu sehen sind, bedeutet das, dass entweder der Empfänger nicht richtig angeschlossen oder erkannt wurde (Neustart nicht vergessen?) oder dass die Codes der Fernbedienung nicht erkannt wurden, da es sich z.B. um eine 433Mhz Funkfernbedienung handelt.
Hat allerdings alles bis hier funktioniert kannst du diesen kleinen Test mit STRG+C abbrechen.

 

Wir haben nun zwei Möglichkeiten: Entweder wir suchen uns hier die Konfigurationsdateien für eine bereits existierende Fernbedienung eines Herstellers. Den entsprechenden Inhalt fügen wir dann in die Datei /etc/lirc/lircd.conf ein.

Alternativ nehmen wir die Codes der Fernbedienung selbst auf. Es gibt eine bestimmte Anzahl an vergebbaren Namen, welche mittels irrecord -l angezeigt werden können. Die Aufnahme wird folgendermaßen gestartet:

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

Ließ dir die Hinweise durch und starte danach mit zweimaligem Drücken der Enter-Taste. Folge außerdem den Anweisungen (verschiedene Tasten drücken), bis du die Namen für bestimmte Tasten vergeben kannst. Hier kannst du jeweils einen der vorher angezeigten Namen (z.B. KEY_1, KEY_VOLUMEUP, etc.) eingeben und anschließend die zugehörige Taste drücken. Sobald du alle benötigten Tasten abgespeichert hast, kannst du durch drücken der Enter Taste die Konfiguration fertigstellen.

Nun kopieren wir die erstellte Konfigurationsdatei noch in das LIRC Verzeichnis, damit es verwendet werden kann.

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

 

Um die Änderungen zu übernehmen, starten wir den Service erneut. Außerdem können wir mit irw die Codes erkennen und testen, ob alle richtig empfangen werden:

sudo /etc/init.d/lirc start
irw

Bei meiner kleinen Fernbedienung ergibt es folgende Ausgabe, wenn ich die Tasten nacheinander drücke:

0000000000ff6897 00 KEY_0 /home/pi/lircd.conf
0000000000ff30cf 00 KEY_1 /home/pi/lircd.conf
0000000000ff18e7 00 KEY_2 /home/pi/lircd.conf
0000000000ff7a85 00 KEY_3 /home/pi/lircd.conf
0000000000ff10ef 00 KEY_4 /home/pi/lircd.conf
0000000000ff38c7 00 KEY_5 /home/pi/lircd.conf
0000000000ff5aa5 00 KEY_6 /home/pi/lircd.conf
0000000000ff42bd 00 KEY_7 /home/pi/lircd.conf
0000000000ff4ab5 00 KEY_8 /home/pi/lircd.conf
0000000000ff52ad 00 KEY_9 /home/pi/lircd.conf
0000000000ffe01f 00 KEY_VOLUMEDOWN /home/pi/lircd.conf
0000000000ffa857 00 KEY_VOLUMEUP /home/pi/lircd.conf
0000000000ff22dd 00 KEY_PREVIOUS /home/pi/lircd.conf
0000000000ff02fd 00 KEY_NEXT /home/pi/lircd.conf
0000000000ffa25d 00 KEY_CHANNELDOWN /home/pi/lircd.conf
0000000000ff629d 00 KEY_CHANNEL /home/pi/lircd.conf
0000000000ffe21d 00 KEY_CHANNELUP /home/pi/lircd.conf
0000000000ffc23d 00 KEY_PAUSE /home/pi/lircd.conf

Übrigens: Falls du eine IR Sendediode angeschlossen hast, könntest du die eingespeicherten Codes auch senden (z.B. irsend SEND_ONCE /home/pi/lircd.conf KEY_0).

Wer sich LIRC genauer ansehen will, kann einen Blick in die Dokumentation werfen.

 

 

Infrarot Raspberry Pi Universalfernbedienung – Programme starten

Anschließend wollen wir ein Skript starten lassen, welches auf Signale wartet. Dafür gibt es verschiedene Möglichkeiten. In diesem Tutorial zeige ich die Verwendung mit irexec. Aber auch für Python gibt es eine eigene LIRC Bibliothek, falls jemand auch darüber Signale abfangen möchte.

Im Homeverzeichnis muss eine Konfigurationsdatei erstellt werden, in welcher wir zu übergebene Parameter festlegen (mehr Details dazu findest du hier und hier):

sudo nano ~/.lircrc

In meinem Beispiel erstelle ich Codes für das Programm irexec, welches wir anschließend aufrufen. Außerdem belege ich die Taste VOLUME_UP und erstelle einen Aufruf, falls KEY_0 und danach KEY_1 aufgerufen werden. Dies ist nur ein Ausschnitt und kann natürlich entsprechend erweitert werden (siehe die Links oben dazu):

Statt dem verwendeten echo ".." kann auch jeder andere Terminal Befehl verwendet werden (z.B. python skript.py). So lassen sich einfach Programme und Befehle auf Knopfdruck starten. Um auf IR Codes der Fernbedienung zu warten, müssen wir das Programm starten. Dazu einfach folgenden Befehl in das Terminal eingeben:

irexec

Die Ausgaben von echo ".." sollten also direkt nach Tastendruck angezeigt werden.

 

 

Automatisch im Hintergrund starten lassen

Um irexec nicht jedes Mal per Hand starten zu müssen, können wir den Daemon außerdem beim Start aufrufen. Dazu bearbeiten wir die Datei

sudo nano ~/.profile

und fügen ans Ende folgende Zeile an:

/usr/bin/irexec -d

In meinem Beispiel wird jedes Mal, wenn Taste 0 und 1 hintereinander gedrückt werden, ein Output an die Konsole geschickt und in eine Datei des Homeverzeichnisses (test.txt) geschrieben. Somit kannst du feststellen, ob nach einem Neustart auch alles reibungslos funktioniert, da jedes Mal eine weitere Zeile angehängt werden müsste.

 

Neben üblichen (Universal)Fernbedienungen haben auch die meisten neueren Smartphones eine Infrarot Sende-Diode, womit mit einer entsprechenden Fernbedienungs-App sich auch jene zur Steuerung des Raspberry Pi’s eignen.

Abschließend gibt es den Prozess der Einrichtung einer Taste auch noch als Video:

 



, , , , , , , , , , , ,


4 Kommentare

  1. Anonymous sagt:

    Hallo,

    Das Tutorial ist echt toll!! Weiter so.

    Jetzt die Frage 🙂 Wie bekomme ich es hin, dass beim Drücken der Power Taste (auf der Fernbedienung) das der Raspberry herunterfährt?

    Mfg

  2. Rainer sagt:

    Cooles Tutorial, danke.
    Habe den oben genannten IR Empfänger in meinem OSMC (Kodi) verbaut, war sehr erstaunt , dass 3 Pins anschliessen und die entsprechende Fernsteuerung, in meinem Fall die vom iPod aktiviert, angeschlossen und es hat alles fuktioniert. Das ohne Eintrag ind /boot oder Aufzeichnung von Keys, durch das Tutorial habe ich jetzt auch die Hintergrundinfo dazu.

    Rainer

  3. teetrinker sagt:

    Ich besitze mehere VS 1838B mit gleicher Anschlussbelegung wie der TSOP4838. Im Datenblatt gibt der Hersteller an das man zwischen VCC und OUT einen Widerstand von >20KOhm schalten soll. Dies nur als Tip für VS 1838B Besitzer 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!