IR Empfänger am Raspberry Pi unter OpenELEC
OpenELEC hat einen Treiber für einen IR Empfänger an einem GPIO Port bereits fest eingebaut und wird bm Start automatisch geladen.
dmesg
[ 5.199867] lirc_dev: IR Remote Control driver registered, major 248
[ 5.227879] lirc_rpi: module is from the staging directory, the quality is unknown, you have been warned.
[ 6.120921] lirc_rpi: auto-detected active high receiver on GPIO pin 18
[ 6.121321] lirc_rpi lirc_rpi.0: lirc_dev: driver lirc_rpi registered at minor = 0
[ 6.121343] lirc_rpi: driver registered!
...
[ 13.352620] input: lircd as /devices/virtual/input/input0
Anschluss
Test, ob Treiber geladen ist und an welchen GPIO empfängt bzw. sendet:
cat /sys/kernel/debug/gpio
GPIOs 0-53, bcm2708_gpio:
gpio-16 (led0 ) out hi
gpio-17 (lirc_rpi ir/out ) in lo
gpio-18 (lirc_rpi ir/in ) in hi
gpio-23 (sysfs ) in lo
gpio-24 (sysfs ) out hi
Auf GPIO 18 (Pin 12) wird die Empfänger Diode angeschlossen, an GPIO 17 (Pin 11) die Sende Diode (falls erwünscht).
Pin Pi | Funktion | Pin IR |
---|---|---|
1 | 3,3V | Vs |
12 | GPIO18 - Empfänger | OUT |
6 | GND | GND |
Anderen Pin / GPIO für lirc_rpi verwenden
Der lirc_rpi Treiber wird in der Datei /usr/lib/modules-load.d/lirc_rpi.conf
mit
lirc_rpi
geladen. Dem Treiber können Parameter beim Booten mitgegeben werde, welche die verwendeten GPIO festlegen. Eine Datei /storage/.config/modprobe.d/lirc_rpi.conf
anlegen mit der Zeile:
options lirc_rpi gpio_in_pin=[GPIO-IN] gpio_out_pin=[GPIO-OUT]
Also zum Beispiel Pin 21 (GPIO9) für eingehende und Pin 23 (GPIO11) für ausgehende Signale:
options lirc_rpi gpio_in_pin=9 gpio_out_pin=11
Rapsberry Pi 2
Anscheinend wird das Modul nicht mehr automatisch geladen. Abhilfe schafft der Eintrag
dtoverlay=lirc-rpi
Mit anderen Pins:
dtoverlay=lirc-rpi,gpio_out_pin=14,gpio_in_pin=15
in der Datei /boot/config.txt
. Editieren von config.txt
:
mount -o remount,rw /flash
nano /flash/config.txt
Danach
mount -o remount,ro /flash
und neu booten.
dmesg | grep 'lirc'
[ 3.667447] lirc_dev: IR Remote Control driver registered, major 248
[ 3.681240] lirc_rpi: module is from the staging directory, the quality is unknown, you have been warned.
[ 4.528984] lirc_rpi: module is from the staging directory, the quality is unknown, you have been warned.
[ 4.575834] lirc_rpi: auto-detected active low receiver on GPIO pin 18
[ 4.576185] lirc_rpi lirc_rpi: lirc_dev: driver lirc_rpi registered at minor = 0
[ 4.576199] lirc_rpi: driver registered!
[ 5.448860] input: lircd as /devices/virtual/input/input0
Test des Empfängers
Hilfreicher Thread aus dem Raspberry Forum: http://www.raspberrypi.org/forums/viewtopic.php?&t=26946.
Test, ob LIRC bereits Signale der FB verarbeitet:
irw
Mögliche Ausgaben:
9 0 KEY_8 devinput
9 0 KEY_8_UP devinput
6 0 KEY_5 devinput
6 0 KEY_5_UP devinput
5 0 KEY_4 devinput
5 0 KEY_4_UP devinput
9 0 KEY_8 devinput
9 0 KEY_8_UP devinput
6 0 KEY_5 devinput
6 0 KEY_5_UP devinput
5 0 KEY_4 devinput
5 0 KEY_4_UP devinput
16d 0 KEY_EPG devinput
16d 0 KEY_EPG_UP devinput
Test, ob überhaupt was ankommt
LIRC Dämon beenden und IR Device direkt abfragen:
killall lircd
mode2 -d /dev/lirc0
Tasten einer Fernbedienung sollten Ausgaben wie folgt erzeugen:
space 1010
pulse 940
space 488
pulse 479
space 530
pulse 430
space 538
...
Konfiguration von LIRC und XMBC/Kodi
Siehe Wiki Kodi/LIRC.
Mapping IR --> LIRC
Lirc mappt mit Hilfe der Konfigurationsdatei lircd.conf die Signale des IR Empfängers auf definierte Tastennamen. Die Konfigurationsdatei liegt üblicherweise unter /etc/lirc/lircd.conf, bei OpenELEC kann eine benutzerdefinierte Konfiguration unter /storage/.config/lircd.conf abgelegt werden.
begin remote
name /storage/.config/lircd.conf
bits 13
flags RC6|CONST_LENGTH
eps 30
aeps 100
header 2861 921
one 468 494
zero 468 494
pre_data_bits 24
pre_data 0x1BFF83
gap 106683
toggle_bit_mask 0x8000
rc6_mask 0x100000000
begin codes
KEY_1 0x1BFE
KEY_2 0x1BFD
KEY_3 0x1BFC
KEY_4 0x1BFB
KEY_5 0x1BFA
KEY_6 0x1BF9
KEY_7 0x1BF8
KEY_8 0x1BF7
KEY_9 0x1BF6
KEY_0 0x1BFF
KEY_EPG 0x1BD9
KEY_CONTEXT_MENU 0x1BA4
KEY_MENU 0x1BDB
KEY_INFO 0x1BE3
KEY_EXIT 0x1BDC
KEY_ESC 0x1BA3
KEY_UP 0x1BE1
KEY_LEFT 0x1BDF
KEY_OK 0x1BDD
KEY_RIGHT 0x1BDE
KEY_DOWN 0x1BE0
KEY_CHANNELUP 0x1BED
KEY_CHANNELDOWN 0x1BEC
KEY_BACK 0x1BA1
KEY_REWIND 0x1BEA
KEY_PLAY 0x1BE9
KEY_PAUSE 0x1BE7
KEY_FORWARD 0x1BEB
KEY_RECORD 0x1BE8
KEY_STOP 0x1BE6
KEY_NEXT 0x1BA2
KEY_VIDEO 0x1BB7
end codes
end remote
Die Datei kann interaktiv aufgezeichnet werden mit:
killall lircd
irrecord /storage/.config/lircd.conf
Eine Liste der Tastennamen erhält man mit:
irrecord --list-namespace
Mapping LIRC --> XBMC/Kodi
Die Tasten aus LIRC werden nun auf XBMC/Kodi Tasten umgewandelt. Das geschieht durch Angabe eines Mapping in der Datei /storage/.xbmc/userdata/Lircmap.xml.
<lircmap>
<remote device="devinput">
<!-- 0..9 -->
<one>KEY_1</one>
<two>KEY_2</two>
<three>KEY_3</three>
<four>KEY_4</four>
<five>KEY_5</five>
<six>KEY_6</six>
<seven>KEY_7</seven>
<eight>KEY_8</eight>
<nine>KEY_9</nine>
<zero>KEY_0</zero>
<!-- AV -->
<display>KEY_VIDEOS</display>
<!-- Guide, 16:9 -->
<guide>KEY_EPG</guide>
<title>KEY_CONTEXT_MENU</title>
<!-- Menu, Info, Exit -->
<menu>KEY_MENU</menu>
<info>KEY_INFO</info>
<back>KEY_EXIT</back>
<!-- Return -->
<back>KEY_ESC</back>
<!-- Left, Right, Up, Down, OK -->
<left>KEY_LEFT</left>
<right>KEY_RIGHT</right>
<up>KEY_UP</up>
<down>KEY_DOWN</down>
<select>KEY_OK</select>
<!-- +, - -->
<channelplus>KEY_CHANNELUP</channelplus>
<channelminus>KEY_CHANNELDOWN</channelminus>
<!-- Rewind, Play, Pause, Forward -->
<reverse>KEY_REWIND</reverse>
<play>KEY_PLAY</play>
<pause>KEY_PAUSE</pause>
<forward>KEY_FORWARD</forward>
<!-- Skip Left, Record, Stop, Skip Right -->
<skipminus>KEY_BACK</skipminus>
<record>KEY_RECORD</record>
<stop>KEY_STOP</stop>
<skipplus>KEY_NEXT</skipplus>
<!-- Volume Up,Down,Mute -->
<volumeplus>KEY_VOLUMEUP</volumeplus>
<volumeminus>KEY_DOLUMEDOWN</volumeminus>
<mute>KEY_MUTE</mute>
<!-- Power -->
<power>KEY_POWER</power>
<!-- Red, Gree, Blue, Yellow -->
<red>KEY_RED</red>
<green>KEY_GREEN</green>
<yellow>KEY_YELLOW</yellow>
<blue>KEY_BLUW</blue>
<!-- etc -->
<subtitle>KEY_SUBTITLE</subtitle>
<teletext>KEY_TEXT</teletext>
<playlist>KEY_LIST</playlist>
</remote>
</lircmap>
Die Standardbelegung ist hier zu finden: /usr/share/xbmc/system/Lircmap.xml
XBMC Kommandos stehen in remote.xml, siehe https://github.com/xbmc/xbmc/blob/master/system/keymaps/remote.xml
Die Namen der XBMC Tasten finde sich hier: http://wiki.xbmc.org/index.php?title=Action_IDs oder hier: https://github.com/xbmc/xbmc/blob/master/xbmc/input/ButtonTranslator.cpp
Links
- Wikiseite von Kodi zu LIRC
- Wikiseite von OpenELEC zu LIRC
- Seite des lirc_rpi Treiber
- Artikel im Netz http://www.pro-linux.de/artikel/2/1624/3,raspberry-pi-eine-erfolgsgeschichte.html