Tutorial: Raspberry Pi, Infrarot-Fernbedienung und LIRC
Mit dem Raspberry Pi ist es einfach möglich, beliebige Funktionen mittels einer herkömmlichen Infrarot-Fernbedienung anzusteuern.
Im Netz gibt es dazu viele Anleitungen, die aber oft schon (sehr) veraltet sind und nicht mehr funktionieren.
Deshalb hier eine aktuelle Beschreibung (April 2022).
Voraussetzungen
- ein Raspberry Pi
- eine IR-Fernbedienung
- eine Infrarot-Empfänger-Diode
- etwas Software (LIRC) und ein bisschen Konfiguration
1.) Der Raspberry
Ich habe es aktuell (04/2022) mit einem Raspberry Pi 2B in Betrieb und zusätzlich mit einem Zero2W getestet.
Betriebssysteme: Der 2B hat ein aktuelles Buster und der Zero2W ein aktuelles Bullseye installiert.
2.) Die Fernbedienung(en)
LIRC unterstützt sehr viele Fernbedienungen, siehe
Falls aber die eigene nicht dabei sein sollte: Auch kein Problem, siehe weiter unten.
Hier im Tutorial habe ich eine Pinnacle_RC1144201 verwendet.
3.) Die IR-Empfänger-Diode
z.B. eine Vishay TSOP31238
Diese wird mit ihren drei Anschlüssen an die GPIO-Kontakte angeschlossen, bei mir:
- Pin 1 (3,3V)
- Pin 6 (Ground)
- Pin 11 (GPIO 17)
Bei anderen Empfängern oder Implementierungen mag das abweichen. Bitte das Datenblatt lesen!
Hier einfach einmal die Ausgabe von pinout bzgl. der GPIO-Pins:
3V3 (1) (2) 5V
GPIO2 (3) (4) 5V
GPIO3 (5) (6) GND
GPIO4 (7) (8) GPIO14
GND (9) (10) GPIO15
GPIO17 (11) (12) GPIO18
GPIO27 (13) (14) GND
GPIO22 (15) (16) GPIO23
3V3 (17) (18) GPIO24
GPIO10 (19) (20) GND
GPIO9 (21) (22) GPIO25
GPIO11 (23) (24) GPIO8
GND (25) (26) GPIO7
GPIO0 (27) (28) GPIO1
GPIO5 (29) (30) GND
GPIO6 (31) (32) GPIO12
GPIO13 (33) (34) GND
GPIO19 (35) (36) GPIO16
GPIO26 (37) (38) GPIO20
GND (39) (40) GPIO21
Display More
Um den verwendeten Pin bzw. den Anschluss dem Raspi bekannt zu geben, ist folgender Eintrag in der /boot/config.txt erforderlich:
(einfach das '#' am Zeilenanfang entfernen)
4.) Die Software und die Konfiguration
a) LIRC
Installation des lirc Paketes:
Es werden damit u.a. einige Konfigurationsdateien angelegt in /etc/lirc/.
Diese werden nun angepasst an den Raspberry Pi:
Da der devinput Treiber nicht verwendet wird, sollte er auch komplett deaktiviert werden:
b) Die Konfiguration der Fernbedienung für LIRC
Auf http://lirc.sourceforge.net/remotes gibt es eine lange Liste von fertigen Konfigurationsdateien für unterstützte Fernbedienungen.
Davon bitte die Passende herunterladen und sinnvoll benannt (muss mit .conf enden!) ablegen:
Falls tatsächlich keine passende Datei zu finden ist, kann man sie sich auch selbst erzeugen durch "Aufnehmen" von Tastendrücken:
irrecord --list-namespace # listet die möglichen Tastencodes auf
sudo irrecord -d /dev/lirc0 /etc/lirc/lircd.conf.d/my_remote.conf
irrecord führt im Dialog durch den Aufnahmeprozess.
(Eventuell muss diese generierte Datei noch manuell nachgearbeitet werden. Siehe man irrecord.)
Ein einfaches Beispiel (gekürzt):
begin remote
name Pinnacle_RC1144201
...
begin codes
power 0x6E2D
menu 0x6EE7
mute 0x6E1E
stop 0x6E2B
play 0x6ED1
pause 0x6E2C
...
Display More
Wenn nun eine passende .conf Datei vorliegt, muss LIRC neu gestartet werden, um die Änderungen einzulesen:
Testen lässt sich die Fernbedienung dann im Terminal/Shell mit:
==> einfach ein paar Tasten drücken und schauen, ob etwas von irw angezeigt wird.
irw dann mit Strg-C stoppen.
Beispielausgabe:
pi@pi02:~ $ irw
000000037feb6e2b 00 stop Pinnacle_RC1144201
000000037feb6e2b 01 stop Pinnacle_RC1144201
000000037feb6e2b 02 stop Pinnacle_RC1144201
000000037feb6e2b 03 stop Pinnacle_RC1144201
000000037feb6e0c 00 2 Pinnacle_RC1144201
000000037feb6e0c 01 2 Pinnacle_RC1144201
000000037feb6e0c 02 2 Pinnacle_RC1144201
000000037feb6e0c 00 2 Pinnacle_RC1144201
000000037feb6e0c 01 2 Pinnacle_RC1144201
000000037feb6e09 00 5 Pinnacle_RC1144201
...
Display More
Bei technischen Problemen könnte noch dieses Testkommando helfen:
c) irexec
LIRC liefert unter anderem das Programm irexec mit.
irexec kommuniziert mit dem im Hintergrund laufenden LIRC-Dämon und erhält Informationen über die gedrückte Taste.
Um die jeweilge Taste mit einer Aktion zu verknüpfen, wird eine Konfigurationsdatei gefüllt: ~/.config/lircrc.
Dort eintragen (gekürztes Beispiel):
begin
prog = irexec
remote = Pinnacle_RC1144201
button = power
config = echo "power" >> /home/pi/rc-test.txt
repeat = 0
end
begin
prog = irexec
remote = Pinnacle_RC1144201
button = pause
config = echo "pause" >> /home/pi/rc-test.txt
repeat = 0
end
Display More
Die im Beispiel konfigurierten Kommandos ("config") sind natürlich hier nur Testeinträge!
Sowohl die Bezeichnung der Fernbedienung ("remote") als auch die der Knöpfe ("button") müssen mit denen aus der Konfiguration
der Fernbedienung wie weiter oben beschrieben übereinstimmen!
Damit irexec seine Arbeit aufnehmen kann, muss es auch laufen...
Testweise reicht ein
Beenden mit Strg-C
Natürlich ist es sinnvoller, irexec immer automatisch im Hintergrund laufen zu haben.
Das geht so:
Dort eintragen:
[Unit]
Description=irexec service
After=network.target
[Service]
ExecStart=/usr/bin/irexec /home/pi/.config/lircrc
WorkingDirectory=/home/pi
StandardOutput=inherit
StandardError=inherit
Restart=always
User=pi
[Install]
WantedBy=multi-user.target
Display More
Jetzt noch aktivieren und starten:
Das ergibt eine Ausgabe ähnlich wie (sollte es...):
● irexec.service - irexec service
Loaded: loaded (/etc/systemd/system/irexec.service; disabled; vendor preset: enabled)
Active: active (running) since Sun 2022-04-10 11:00:03 CEST; 58min ago
Main PID: 1494 (irexec)
Tasks: 1 (limit: 410)
CPU: 131ms
CGroup: /system.slice/irexec.service
└─1494 /usr/bin/irexec /home/pi/.config/lircrc
Apr 10 11:00:03 pi02 systemd[1]: Started irexec service.
Viel Spaß mit LIRC und der Fernbedienung.
Der Fantasie sind keine Grenzen gesetzt!