Steuerung mit einer Infrarot-Fernbedienung und LIRC

  • 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

    1. ein Raspberry Pi
    2. eine IR-Fernbedienung
    3. eine Infrarot-Empfänger-Diode
    4. 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:


    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)

    Code
    sudo nano /boot/config.txt
    Code
    # Uncomment this to enable infrared communication.
    dtoverlay=gpio-ir,gpio_pin=17


    4.) Die Software und die Konfiguration

    a) LIRC

    Installation des lirc Paketes:

    Code
    sudo apt update
    sudo apt install lirc


    Es werden damit u.a. einige Konfigurationsdateien angelegt in /etc/lirc/.


    Diese werden nun angepasst an den Raspberry Pi:

    Code
    sudo nano /etc/lirc/lirc_options.conf
    Code
    Orignal:
        driver = devinput
        device = auto
    
    Neu:
        driver = default
        device = /dev/lirc0


    Da der devinput Treiber nicht verwendet wird, sollte er auch komplett deaktiviert werden:

    Code
    cd /etc/lirc/lircd.conf.d
    sudo mv devinput.lircd.conf devinput.lircd.conf.dist


    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:

    Code
    /etc/lirc/lircd.conf.d/my_remote.conf


    Falls tatsächlich keine passende Datei zu finden ist, kann man sie sich auch selbst erzeugen durch "Aufnehmen" von Tastendrücken:

    Code
    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):


    Wenn nun eine passende .conf Datei vorliegt, muss LIRC neu gestartet werden, um die Änderungen einzulesen:

    Code
    sudo systemctl restart lircd


    Testen lässt sich die Fernbedienung dann im Terminal/Shell mit:

    Code
    irw


    ==> einfach ein paar Tasten drücken und schauen, ob etwas von irw angezeigt wird.


    irw dann mit Strg-C stoppen.


    Beispielausgabe:


    Bei technischen Problemen könnte noch dieses Testkommando helfen:

    Code
    mode2 -d /dev/lirc0


    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.

    Code
    mkdir -p .config
    nano ~/.config/lircrc


    Dort eintragen (gekürztes Beispiel):


    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

    Code
    irexec

    Beenden mit Strg-C


    Natürlich ist es sinnvoller, irexec immer automatisch im Hintergrund laufen zu haben.

    Das geht so:

    Code
    sudo nano /etc/systemd/system/irexec.service

    Dort eintragen:


    Jetzt noch aktivieren und starten:

    Code
    sudo systemctl enable --now irexec.service
    sudo systemctl status irexec.service


    Das ergibt eine Ausgabe ähnlich wie (sollte es...):

    Code
    ● 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!

    Edited 4 times, last by simonz ().

  • Post by Oscar1981 ().

    This post was deleted by hyle: obsolet ().
  • Post by simonz ().

    This post was deleted by hyle: obsolet ().
  • Moin

    irrecord will nicht:

    Irgend welche Ratschläge?

  • Grüße,


    Google sagt dazu:

    https://github.com/raspberrypi/linux/issues/3857

    Quote

    lirc_rpi is no longer supported - use gpio_ir instead.

    https://progpi.de/lirc-steueru…aspberry-buster-bullseye/


    Ich kann dir aber nicht sagen wie aktuell das alles ist.


    Ansonsten noch hier:

  • Ansonsten noch hier:

    Das ist doch dieser Beitrag. ;)

    Vielleicht hilft dir das weiter.

    Nein im letzten Beitrag steht ja auch das es mit bullsey nicht mehr funktioniert.


    Ich bin zwar jetzt soweit gekommen das irrecord startet, aber eine Aufzeichnung einer neuen lirc.conf funktioniert nicht da ich ein timeout bekomme (als würde der Empfänger nicht reagieren).

  • Das ist doch dieser Beitrag. ;)

    Nein im letzten Beitrag steht ja auch das es mit bullsey nicht mehr funktioniert.


    Ich bin zwar jetzt soweit gekommen das irrecord startet, aber eine Aufzeichnung einer neuen lirc.conf funktioniert nicht da ich ein timeout bekomme (als würde der Empfänger nicht reagieren).

    Ich wollte dir damit auch nicht sagen, dass es noch funktioniert.


    RPi und Co sind Sachen im ständigen Wandel. Das ist nicht wie DIN xyz, die 1975 verabschiedet wurde.


    Wenn in Debian nun gpio-ir angesagt ist, solltest du dich anpassen. Es ist halt so.

    "Wer nur Nägel kennt, hält jedes Stück Materie für einen Hammer."
    (einschließlich mir)

  • Wenn in Debian nun gpio-ir angesagt ist, solltest du dich anpassen. Es ist halt so.

    Hilft nur nicht weiter wenn es dann nicht mehr funktioniert.

    Ich bekomme ja überhaupt keine Signale rein. das auf gpio-r umgestellt wurde ist ja nicht neu, damals ging es ja auch noch.

  • Ich habe es jetzt zwar hinbekommen das ich meine FB einlesen konnte, aber ich finde die Datei jetzt nicht.


    gestartet hatte ich irrecord mit:

    Code
    sudo irrecord -n -d /dev/lirc1  /etc/lirc/lircd.conf.d/my_remote.conf

    dann sollte die doch unter

    Code
    /etc/lirc/lircd.conf.d/

    liegen?

  • Habe sie zwar jetzt gefunden, aber aufgezeichnet wurde nichts.

  • Hallo Gorcon


    Nein. Ist ein Axas E4HD Ultra.


    wenn es keine fertige .conf für dein Gerät gibt, bleibt wohl nur irrecord zum laufen zu bekommen.


    Du benutzt das USB Infrared Toy aus deinen anderen Thread: https://forum-raspberrypi.de/forum/thread/58045-per-raspberry-pi-lirc-conf-erzeugen/ ?


    Das USB-Teil kann wohl mit zwei verschiedenen Treibern ir_toy oder cdc_acm laufen und macht dann auch unterschiedliche Geräteschnittstellen /dev/lircX oder /dev/ttyACMX.

    Was sagt bei dir lsusb ? Und wenn du das Teil gerade angesteckt hast, danach die Ausgabe sudo dmesg | tail -n 12 und sudo journalctl -ekg usbcore ?


    Ein Blick in die offizielle und aktuelle Anleitung kann manchmal auch hilfreich sein:

    https://www.lirc.org/html/configuration-guide.html


    Gruß Martin

  • Hat sich erledigt. Habe es mit WinLIRC unter Win 7 hinbekommen. Mit dem Raspi konnte ich nur RAW nutzen aber das brachte mir nichts.


    PS: in der Anleitung muss man zum einlesen zwingend lirc1 als device nutzen. Mit Lirc0 geht es nicht.

  • > Habe es mit WinLIRC unter Win 7 hinbekommen.

    Na Bravo!


    Dann hilf den anderen Leuten die nach einer config fuer diese Fernsteuerung suchen. Veroeffentliche dein File auf einer Website, so dass sie es finden.