Die Tage fiel mir beim Aufräumen eine alte Apple Remote in die Hände, die seit Jahren in einer dunklen Kiste ihr Dasein fristete. Dabei fiel mir ein, dass auch noch irgendwo ein IR-Empfänger sein musste, den ich mir vor vielen vielen Jahren mal für den Betrieb am seriellen Anschluss zusammengelötet hatte. Das wäre doch ideal, um damit den MPD auf meinem Raspberry Pi B+ zu steuern, dann müsste ich nicht immer umständlich über die Handy-App den Radio-Stream ein- und ausschalten. Also, den IR Empfänger rausgesucht, mit einem USB-Seriell-Adapter, den ich auch noch da hatte, angeschlossen und ausprobiert. Leider habe ich das ganze darüber nicht zum laufen bekommen. Ein Freund, der bei solchen Sachen etwas mehr Erfahrung hat, meinte dazu, dass über diese USB-Seriell-Adapter so einiges nicht funktioniert, aber ich habe doch ein wenig meine jugendlichen Lötkünste in Verdacht, die eventuell zu einem Kurzschluss geführt haben.
Das Ding passte auf diese Art immerhin genau in das Gehäuse eines RS-232-Steckers. Da es so aber nicht funktionierte, beschloss ich den IR-Empfänger herauszulöten und direkt mit den GPIO-Pins des Raspberry Pi zu verbinden.
Empfänger anschließen
Die Belegung der Pins des TSOP 1738 Empfängers war leicht herauszufinden und Berichte wie man solche Empfänger mit dem Pi verbindet gibt es im Netz zu hauf. Allerdings musste ich mir die Informationen an so vielen Stellen zusammensuchen und noch mehr herumprobieren, dass ich mir das ganze fürs nächste Mal zusammenstelle.
Der Anschluss an den Pi ist sehr simpel. VCC an Pin 2, GND an Pin 6 und Data an Pin 12 (Das ist GPIO 18, den brauchen wir später noch).
Pi Konfigurieren
Als nächstes die Software installieren:
sudo apt install lirc mpc
lirc ist der Linux Infrared Remote Control Daemon, der im Hintergrund läuft und auf Signale einer Fernbedienung wartet. Diese Signale kann er dann interpretieren und auf verschiedenste Art und Weise weitergeben. mpc ist ein Kommandozeilentool zum Steuern des Music Player Daemons mpd.
Um die GPIO-Pins nutzen zu können musste ich noch einen Eintrag in der boot.txt ändern.:
dtoverlay=lirc-rpi,gpio_in_pin=25
Die Zeile war bereits vorhanden, sie war aber auskommentiert. Die # am Anfang entfernen, SD-Karte wieder in den Pi und wieder starten. Der Parameter gpio_in_pin=25 legt fest auf welchem GPIO-Pin der Empfänger angeschlossen ist. Standardmäßig ist das GPIO18 (Entspricht Pin 12), ich habe den Empfänger jedoch an Pin 22 angeschlossen (Entspricht GPIO25).
Als nächstes das lirc_rpi Kernel-Modul konfigurieren. Dazu die Datei /etc/modules in einem Editor öffnen und diese Zeile einfügen:
lirc_rpi gpio_in_pin=25
Hier den Pin angeben an dem die Data-Leitung des Empfängers angeschlossen ist.
Konfiguration von lirc
/etc/lirc/hardware.conf
LIRCD_ARGS="--uinput" LOAD_MODULES=false DRIVER="default" DEVICE="/dev/lirc0" MODULES="lirc_rpi" LIRCD_CONF="" LIRCMD_CONF=""
Danach kann man prüfen ob der Empfänger funktioniert.
sudo service lirc restart mode2
Das Tool mode2 gibt, wenn alles korrekt konfiguriert ist, Meldungen aus sobald Signale von einer Fernbedienung ankommen. Mit Hilfe von irrecord kann man diese Signale aufzeichnen, es gibt aber auch bereits für viele Fernbedienungen vorhandene Konfigurationen zum Herunterladen. Für meine Apple Remote A1156 habe ich so eine Konfiguration heruntergeladen und nur die Button-Namen etwas angepasst. Die Namen der Buttons müssen später mit den Bezeichnungen in der Konfiguration von irexec übereinstimmen.
/etc/lirc/lircd.conf
begin remote name Apple_A1156 bits 8 flags SPACE_ENC eps 30 aeps 100 header 9065 4484 one 574 1668 zero 574 547 ptrail 567 repeat 9031 2242 pre_data_bits 16 pre_data 0x77E1 post_data_bits 8 post_data 0xC5 gap 37600 toggle_bit 0 ignore_mask 0x80ff begin codes KEY_PLAYPAUSE 0x20 # Was: play KEY_VOLUMEUP 0xD0 KEY_NEXT 0xE0 # Was: ffwd KEY_PREVIOUS 0x10 KEY_VOLUMEDOWN 0xB0 # Was: minus KEY_MENU 0x40 # Was: menu end codes end remote
/etc/lirc/lircrc
begin prog = irexec button = KEY_PLAYPAUSE config = mpc toggle repeat = 0 end begin prog = irexec button = KEY_PREVIOUS config = mpc prev repeat = 0 end begin prog = irexec button = KEY_NEXT config = mpc next repeat = 0 end begin prog = irexec button = KEY_VOLUMEUP config = mpc volume +2 repeat = 1 end begin prog = irexec button = KEY_VOLUMEDOWN config = mpc volume -2 repeat = 1 end
Zu guter letzt:
sudo service lirc restart
Jetzt lässt sich der MPD mit der Fernbedienung steuern.
Hallo Gerald,
Danke für deine umfangreiche Anleitung..
Ich bin schon länger auf der Suche nach einer Möglichkeit mit dem Raspi meine vorhandenen zahlreichen IR-Fernbedienung/Tastaturen wiederzubeleben.
Hab schon einige Anleitungen gefunden und mich aber an deiner orientiert. Hab aber damit Probleme.. (ähnlich wie auch bei anderen Anleitungen)
Ich habe eine Raspi Zero W
Ich nutze Raspbian Stretch in der aktuellen Version
Als Empfangsdiode habe ich eine unbekannte aus einem HTPC ausgebaute mit der “passenden” Fernbedienung.
Ich komme aber zu keinem Erfolg.
was mir bei deiner Anleitung auffällt, du schreibst von einer “boot.txt”.
Diese Datei gibt es bei mir nicht… Meinst du vielleicht die “/boot/config.txt” ?
Die Befehle zum Test führen bei mir nur zu Fehlermeldungen:
pi@raspberrypi:/boot $ sudo service lirc restart
Failed to restart lirc.service: Unit lirc.service not found.
pi@raspberrypi:/boot $ mode2
Using driver devinput on device auto
Cannot initiate device Auto
Hast du da noch ne Idee dazu ??
Danke
Danke für die hilfreiche Anleitung.
Allerdings sollte man beachten: der TSOP 1738 arbeitet mit 5V (wie du ihn ja auch angeschlossen hast) – die GPIO-Pins jedoch mit 3,3V.
Wenn man Glück hat, geht das ne Weile gut, im schlimmsten Fall zerstört es jedoch den PI.
Also besser: einen logic level converter oder Spannungsteiler dazwischen schalten. Letzteres lässt sich ganz einfach mit zwei Widerständen realisieren. (Z.B. 2k2Ohm zwischen TSOP Output und GPIO-PIN & 3k3Ohm zw. GPIO und GND.)
Oder alternativ (wenn man den TSOP1738 nicht eh schon rumliegen hat) sollte man einen TSOP4838 verwenden und direkt an 3,3V betreiben.
Hahaha, klasse! Ich bin hier gerade gelandet, weil ich hier einen TSOP1738 in meiner Elektronikkiste gefunden habe, der ziemlich genau die Deiner aussieht. Leider kann ich keine Bilder schicken. Der kommt nun an den RPi.