Einrichtung des Infrarot Empfängers

Also, mit den Grundlagen haben wir uns nun beschäftigt, jetzt geht’s ans Eingemachte. Keine Sorge, so schlimm ist es gar nicht. Wir wollen unser Wissen ja nun aber auch praktisch am Raspberry Pi anwenden. Zu aller erst müssen wir dafür ein Programm installieren. Für das gesamte Arbeiten mit dem Raspberry Pi gibt es ein Programm mit dem wunderbaren Namen LIRC, dass es das für uns die Infrarot Signale in für uns verwendabre codes Umrechnet. LIRC steht für Linux Infrared Remote Control und heißt übersetzt: Linux Infrarot Bedienungs Kontrolle. Doch wie gesagt müssen wir erstmal etwas Software installieren:

$ sudo apt install lirc ir-keytable

Wenn du noch kein Python und Pip installiert hast, müssen wir das auch eben noch nachholen:

$ sudo apt install python3 pip

Jetzt installieren wir die Python Bibliothek, welche wir brauchen um die Eingaben der Fernbedieung auszulesen.

$ sudo pip install evdev

Damit dein Pi auch weiß auf welchem Pin der Infrarot-Sensor liegt, müssen wir noch etwas in der boot config einstellen:

$ sudo nano /boot/config.txt

Füge am Ende der Datei diesen Block hinzu:

dtoverlay=gpio-ir,gpio_pin=17
dtoverlay=gpio-ir-tx,gpio_pin=27
dtoverlay=rc-6

Jetst muss der Pi einmal neu gestartet werden, damit auch alle Änderungen übernommen werden:

$ sudo reboot

Daten mit Raspberry Pi auslesen

Bevor wir anfangen können, müssen wir zuerst unseren Infrarot Empfänger an unseren Raspberry Pi anschließen.

GPIO Pins am PiAnschlüsse IR Empfänger
GNDGND / –
VCCVCC / +
GPIO 17Signal / S

Dazu müssen wir natürlich auch noch die IR Fernbedienung zum Laufen bekommen. Wenn du die beigelegte Fernbedienung benutzen willst, musst du dafür einfach die Knopfzellenbatterie einlegen, bzw. den kleinen Schnipsel entfernen. Wenn du dann die Kamera App auf einem Smartphone öffnest, solltest du die IR LED erkennen, wenn Tasten gedrückt werden. Dazu kommt, dass der IR Empfänger auch eine eingebaute LED hat, die anfängt zu leuchten, wenn der Empfänger etwas empfängt.

Zunächst müssen wir herrausfinden, unter welchem pfad der infrarot empfänger erreichbar ist. Dazu lassen wir uns einmal alle erkannten Infrarot Geräte auflisten:

sudo ir-keytable

Bei uns sieht das so aus:

Found /sys/class/rc/rc1/ with:
	Name: gpio_ir_recv
	Driver: gpio_ir_recv
	Default keymap: rc-rc6-mce
	Input device: /dev/input/event6
	LIRC device: /dev/lirc1
	Attached BPF protocols: 
	Supported kernel protocols: lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp imon 
	Enabled kernel protocols: lirc rc-6 
	bus: 25, vendor/product: 0001:0001, version: 0x0100
	Repeat delay = 500 ms, repeat period = 125 ms

In der Augabe sollte ein Gerät mit dem namen gpio_ir_recv auftauchen, das ist der, den wir brauchen. In unsem Beipiel ist der Sensor unter der ID rc1 erreichbar. Außerdem müssen wir uns noch das Input device merken, in unserem Beispiel ist das /dev/input/event6.

Jetzt müssen wir nur noch den richtigen Treiber für den Sensor laden, damit wir ihn gleich nutzen können. (Das musst du nach jedem neustarten deines PIs machen, da sich die ID auch mal ändern kann.) Außerdem wollen wir natürlich noch kontrollieren, ob wir auch Daten auf dem Raspberry Pi empfangen. Das können wir alles zusammen mit einem Befehl im Terminal machen:

sudo ir-keytable -p all -v -t -s rc1

(Achte dabei auf darauf, dass der letzte Parameter -s rc1 mit deiner Sensor ID übereinstimmt.)
Nach dem Ausführen des Befehls und dem Bedienen der IR Fernbedienung solltest du das Drücken der einzelnen Tasten im Terminal sehen. Dort werden dir unter anderem die Keycodes der einzelnen Tasten in Hexadecimal angezeigt. Du kannst das Programm jederzeit mit Strg+C beenden.

LIRC mit Python

test.py

Jetzt wollen wir uns aber ja die Keycodes nicht nur anzeigen lassen, sondern auch in Python nutzen können. Dazu gibt es hier ein kuzes Script zum testen: (Achte daruf, in Zeile 4 das den Pfad zum Input Device gegebenenfalls anzupassen.)

import time
from evdev import InputDevice, categorize, ecodes

dev = InputDevice('/dev/input/event6')
print(dev)

try:
  for event in dev.read_loop():
    print(categorize(event))
    if event.type == 4:
      print('keycode: ', event.value)
    time.sleep(.01)

except KeyboardInterrupt:
  exit(0)
$ sudo python3 test.py

Wenn du das Programm jetzt ausführst und die Tasten auf der Fernbedienung drückst, sollten jetzt die Ausgaben zu sehen sein.