Home   Artikel   Archiv   Forum   Impressum  
Artikel vom 12.10.2001
Autor: Ronny Ziegler
Languages: en nl
Artikel bewerten:

Printer Druckversion
Helfen Sie mit!
 

LIRC - Infrarot Empfänger

Infrarot Mittlerweile wird beinahe jedes technische Gerät mit einer eigenen Infrarot-Fernbedienung ausgestattet. Vom CD-Player über Fernseher, Videorecorder bis hin zum Garagentor.
Da will der Computer natürlich in nichts nachstehen ...

Geld Sparen

Auch der PC versteht mittlerweile Infrarot-Signale. So besitzen viele neuere Laptops einen Infrarot-Port über den mit anderen Geräten oder auch anderen Laptops Daten ausgetauscht werden können.
Auch TV-Karten werden teilweise mit einer eigenen Fernbedienung geliefert, zumeist aber nur gegen einen saftigen Aufpreis gegenüber der Version ohne Fernbedienung.

Aber der typische Linux-Benutzer ist bekanntlich sparsam und handwerklich geschickt, also ist es nicht verwunderlich, daß sich im Internet Soft- und Hardwarelösungen für dieses Problem zum Selberbasteln finden lassen.
Fernbedienungen hat man sowieso viel zu viele zuhause rumliegen und zusammen mit einem PC kann man nun auch die Funktionstasten frei Programmieren.

Schnell per Knopfdruck zur nächsten MP3 wechseln, Ton lauter stellen, oder einfach nur das TV-Programm in kwintv wechseln? Kein Problem! Den Einsatzmöglichkeiten sind mal wieder keine Grenzen gesetzt. Neben dem simplen Starten von Programmen, sind sogar Maus-Events per Fernbedienung simulierbar, also könnte man auch den Web-Browser per Tastendruck steuern.
Mehr Sinn macht dann schon eher der Einsatz bei einer Fernbedienung bei Präsentationen. Mittels Fernbedienung kann man dann zur nächsten Folie wechseln, die der an den Projektor angeschlossene Laptop an die Wand projiziert. Das Podium wird staunen...

Die Treiber zu Benutzung einer Fernbedienung für den Linux-PC existiert schon seit längerer Zeit, so daß es kaum erstaunt, daß viele Multimedia-Anwendungen bereits spezielle Unterstützungen für die Fernbedienungssoftware bieten. Die Programme bieten dann spezielle Befehle, die direkt interpretiert und ausgeführt werden können, ohne daß sich der Anwender mit Details herumschlagen muß.

Hardware basteln

Vor dem Einsatz der Fernbedienung steht erstmal das Beschaffen des Infrarotempfängers.
Im Handel erhältliche Infrarotempfänger, welche an den seriellen Port angeschlossen werden, kosten häufig über 70 DM und funktionieren auch nicht besser als die selbstgebaute Variante, die schon für knappe 15 DM zu beschaffen ist.

Außerdem wird derartigen Produkten (wenn überhaupt) nur Windows-Software beigelegt, und warum sollten wir für so etwas mitbezahlen ?

Die benötigten Bauteile sind weder exotisch noch teuer und sollten in jedem noch so unaufgeräumten Elektronik-Handel erhältlich sein. Notfalls bekommt man die Bauteile auch bei "Conrad Elektronik", für den die entsprechenden Bestell-Nummern angegeben sind.

Einkaufsliste
ProduktBestell-Nummer
Widerstand 4,7 kOhm z.B. 41 83 31
Kondensator 10 µF z.B. 46 82 31
Kondensator 100nF z.B. 45 33 58
IR-Empfänger Modul 78L05 17 10 77
Diode 78L05 16 22 80
Spannungswandler 78L05 18 30 24
9-polige serielle Buchse
(evtl. mit Kabel)
 
Lötplatine  

Mit etwas Geschick sollte es auch für den unerfahrenen Elektronikbaster möglich sein, die Bauteile auf einer Platine entsprechend dem Schaltplan anzulöten.
Vom seriellen Kabel werden nur 3 Pins benötigt. Trotzdem ist es praktisch, sich ein serielles Verlängerungskabel (9-Pin) zu kaufen, und das Kabel in der Mitte zu durchtrennen, und z.B. per Widerstandsmeßgerät die zu den Pins gehörenden Kabel ausfindig zu machen.
Die Pins sind zumeist auf dem Stecker durchnummeriert.

Die benutzten Verbindungen des Infrarotempfängers mit dem seriellen Stecker sind

9-Pin (Sub-D Stecker)
RTS 7 Request To Send (Spannungsversorgung)
GND 5 Ground (Erdung)
DCD 1 Data Carrier Detect (IR-Signal)


Die entsprechende Schaltung des Empfängers ergibt sich aus folgendem Schaltplan:

Schaltplan
( download EPS-File )

Im fertigen Zustand könnte das dann folgendermaßen aussehen:

Bausatz

Die resultierende Schaltung kann sehr kompakt ausfallen, je nach technischem Geschick des Bastlers. Es empfiehlt sich, die Lötplatine in ein kleines Gehäuse einzubauen. Man kann u.U. den Infrarot-Empfänger auch direkt am Gehäuse der PCs anbringen.

Besonders platzsparend ist ein Empfänger, den man auf der Homepage der LIRC-Projektes zu sehen bekommt. Der eigentliche Empfänger findet hier sogar Platz im seriellen Stecker.

Software Installation

Sobald man seinen Empfänger fertig gebaut hat, möchte man natürlich dringend wissen, ob er denn auch funktioniert. Dafür muß man zunächst einmal die benötigte Software installieren. Diese findet man auf der Homepage des LIRC Projektes (Linux Infrared Remote Control) unter http://www.lirc.org. Die aktuelle Version der Software ist 0.6.3, man sollte bei Problemen mit der Software aber durchaus in Betracht ziehen, die neueste CVS-Version zu holen oder zumindest (wer sich mit CVS nicht auskennt) den letzten Snapshot der Software (unter http://www.lirc.org/software/snapshots/).

Nach dem Entpacken der Software ins /tmp-Verzeichnis

  >> tar zxvf lirc-0.6.3.tar.gz -C /tmp
  
muß die Software kompiliert werden:
  >> cd /tmp/lirc-0.6.3
  >> ./configure
  
Nun erscheint ein Konfigurationsfenster, in dem einige Einstellungen gemacht werden müssen:

LIRC Konfiguration

Unter dem Menüpunkt "driver configuration" wird eingestellt, um was für einen Typ von Infrarot-Empfänger es sich handelt. Bei unserer selbstgebauten Variante ist der erste Menüpunkt "Home-brew ..." auszuwählen. Daraufhin ist einzustellen, an welchen seriellen Port, und unter welchem Interrupt der Empfänger angesprochen wird. Als nächstes will LIRC noch wissen, ob wir auch Infrarotsignale senden wollen. Da wir aber keine Transmitterdiode eingebaut haben, sollte der Menüpunkt "With transmitter diode" leer bleiben. Der Punkt 2 "Software generated carrier" kann durchaus aktiviert bleiben.

Daraufhin landen wir wieder im Hauptmenü und sollten uns nun um den dortigen 2. Menüpunkt "Software Configuration" kümmern. Da wir später auch X-Applikationen mit der Fernbedienung steuern möchten, muß der erste Menüpunkt "Compile tools for X-Windows" aktiviert werden. Der Rest sollte deaktiviert bleiben.

LIRC Software Konfiguration

Nun landet man wieder im Hauptmenü. Hier können wir nun den 3. Menüpunkt auswählen: "Save configuration & run configure".

Ist das configure-Skript ohne Fehlermeldung durchgelaufen (eventuell gibt es eine Warnung aus, daß der serielle Port nicht als Modul im Kernel implementiert ist, sondern fest einkompiliert wurde), kann man beginnen, das Softwarepaket zu kompilieren:

  >> make
  
Abschließend, wenn das Kompilieren ohne Fehler durchgalaufen ist, kann man als user "root" die Programme installieren:
  >> su 
  [passwort]
  >> make install
  
Da LIRC ein Kernelmodul benutzt und auch ansonsten sehr hardwarenah arbeitet, kann es bei gepatchten Kernelversionen beim Kompilieren der Software zu Problemen führen. So funktioniert lirc z.B. nicht zusammen mit dem der SuSE 7.0 beiliegenden Kernel 2.2.16, bei dem es sich auch um eine gepatchte Version handelt.

Lirc benutzt ein eigenes Device, um mit der angeschlossenen Hardware zu kommunizieren. Unter Umständen (distributionsabhängig) existiert dieses Device mit dem Namen /dev/lirc schon, ansonsten muß man es (als root) selbst erzeugen

  >> mknod /dev/lirc c 61 0
  
Dabei gibt das "c" an, daß es sich um ein Charakter-Device handelt (diese Einstellung betrifft die Art der Kommunikation mit der Hardware) und die beiden Zahlen bestimmen die Major und Minor-Nummer unter der das Device Kernel-intern angesprochen wird.

Nach all diesem Aufwand können wir endlich den selbstgebauten Empfänger testen. Am einfachsten funktioniert dies unter X mit dem Programm xmode2, welches auch im Unterverzeichnis tools von lirc liegen sollte.

  >> xmode2
  
Auf dem X-Server erscheint nun ein Fenster, in dem das von dem Infrarotempfänger ausgelesene Signal aufgezeichnet wird. Richten Sie Ihre Fernbedienung auf den Empfänger, und sie sollten die ausgelesenen Pulse erkennen können:

xmode2 output

Sollten Sie einzelne Peaks in dem Fenster sehen, die nicht von Ihrer Fernbedienung stammen, handelt es sich zumeist um Signale die vom äußeren Lichteinfall stammen.

Kleiner Tip: Testen Sie mal alle in ihrem Haus befindlichen Fernbedienungen aus, und Sie werden feststellen, wie viele verschiedene Sorten von Signalarten (korrekter: Protokolltypen) existieren.

Nachhilfestunden

Es gibt eine darart große Fülle an Fernbedienungen, daß wohl keine Software alle Modelle kennen könnte. Zwar gibt es bereits eine Reihe an Konfigurationsdateien für verschiedene Fernbedienungen auf der Web-Seite von LIRC http://www.lirc.org/remotes/, aber es ist Glückssache, ob Ihr Modell auch in dieser Liste vorhanden ist.
Deshalb kommt LIRC mit einem eigenen Lern-Programm, mit dessen Hilfe man die Fähigkeiten seiner eigenen Fernbedienung der Software beibringen kann. Das benötigte Programm hat den Namen irrecord und befindet sich im daemons-Unterverzeichnis von lirc. Für jede Fernbedienung, die man zusammen mit lirc einsetzen möchte, kann man nun eine eigene Konfigurationsdatei erstellen. Die Lizenz des Programms verpflichtet jeden Benutzer, die entstandene Konfigurationsdatei an den Autor des Programms zu schicken. So kann der Autor den Pool an unterstützten Fernbedienungen ständig vergrößern.

Damit beim Lernen der Fernbedienung keine Fehler durch Störsignale auftreten, sollte der Emfpänger möglichst gut vor ungewolltem Lichteinfall geschützt werden. Der Autor empfiehlt sogar, das Erlernen der Fernbedienung in einem dunklen Raum auszuführen.

Das Programm ruft man nun auf mittels:

  >> irrecord /tmp/remote1.config
  
Nach einigen Informationstexten für den User, muß die Software ersteinmal herausbekommen, um was für einen Typ von Fernbedienung es sich handelt (es wird versucht, den benutzten Protokolltyp zu erkennen). Dafür muß man möglichst alle Knöpfe mal drücken (weitere Informationen entnimmt man der Ausgabe des Programms).

Im nächsten Schritt müssen die einzelnen Tasten der Fernbedienung benannt werden (keine Leerzeichen benutzen). Über diese Namen können später die Tasten in der Konfiguratonsdatei angesprochen werden. Nach der Benennung der Tasten, muß jeweils die zugehörige Taste einige Male gedrückt werden.

Sind alle Tasten benannt, kann man das Programm mit Drücken der Enter-Taste ohne Eingabe eines Namens beenden.
Die erstellte Konfigurationsdatei befindet sich nun unter /tmp/remote1.config und sollte nach /usr/local/etc/lircd.conf kopiert werden.


Möchte man mehrere Fernbedienungen benutzen, muß man für jede Fernbedienung eine eigene Konfigurationsdatei erstellen und diese abschließend zu einer Datei zusammenfügen:
  >> cat config1 config2 >config
  

In der erstellten Konfiguration /usr/local/etc/lircd.conf befinden sich nun neben einigen Informationen über den Typ der Fernbedienung auch die sog. Codecs der einzelnen Tasten. Hier kann man immer dann nachschauen, wenn man die Namen der Tasten, die man unter irrecord eingegeben hat, vergessen hat:

/usr/local/etc/lircd.conf
Konfigurationsdatei für Onkyo RC-223S
  [...]
        begin codes
            Volume_down              0x000000000000601F
            Volume_up                0x000000000000205F
            Audio_Mute               0x000000000000502F
            Class                    0x0000000000002956
            Tuner_Next               0x000000000000007F
            Tuner_Prev               0x000000000000403F
            CD_Next                  0x0000000000005C23
            CD_Prev                  0x0000000000003C43
            CD_Stop                  0x0000000000001C63
            CD_Disc                  0x0000000000001D62
            CD_Pause                 0x0000000000007C03
            CD_Play                  0x0000000000006C13
            DeckA_Rew                0x000000000000255A
            DeckA_Forw               0x000000000000453A
            DeckA_Stop               0x0000000000005926
            DeckA_Rec                0x000000000000057A
            DeckA_Play               0x0000000000003946
            DeckA_PlayRev            0x0000000000007906
            DeckB_Play               0x000000000000542B
            DeckB_PlayRev            0x000000000000344B
            DeckB_Stop               0x000000000000641B
            DeckB_Rec                0x0000000000000C73
            DeckB_Forw               0x0000000000004C33
            DeckB_Rev                0x0000000000002C53
            Phono                    0x0000000000002857
            CD                       0x0000000000004837
            Tuner                    0x0000000000006817
            Tape1                    0x0000000000000877
            Tape2                    0x000000000000700F
            Sleep                    0x0000000000005D22
            Power                    0x000000000000106F
        end codes
  
  end remote
  


Konfiguration

Das Bekanntmachen einer (oder mehrerer) Fernbedienungen erfolgt systemweit über die soeben erstellte /usr/local/etc/lircd.conf. Die eigentliche Konfiguration, welcher Befehl bei welcher Taste ausgeführt werden soll, kann jeder User für sich selbst vornehmen. Dafür erstellt er in seinem Home-Verzeichnis eine Datei namens .lircrc. In dieser wird unter anderem festgelegt, welcher Befehl bei welcher Taste ausgeführt werden soll. Als erstes Beispiel sollte man eine Konfigurationsdatei der folgenden Art verwerden (Die Namen der Buttons können bei Ihnen natürlich anders sein):

~/.lircrc
  begin
    	prog   = irexec	
    	button = CD
    	config = xmms & 
          mode   = xmms	
  end
  
  begin
    	prog   = irexec	
    	button = Sleep
    	config = xterm & 
  end
  
  


Zum Abschluß müssen nun noch einige Programme gestartet werden wie etwa der Daemon lircd (befindet sich im Unterverzeichnis lirc-0.6.3/daemons/lircd). Dieser muß vom User root gestartet werden.


Es kann sogar der IR-Empfänger an einem anderen PC angeschlossen werden, als denjenigen, wo später die Programme laufen. Die Kommunikation zwischen Hardware und den Programmen ist nämlich auch übers Netzwerk möglich.
Die Software zum Auslesen der Konfigurationsdatei und zum späteren Ausführen der den Buttons zugeordneten Befehle findet man unter lirc-0.6.3/contrib. Dort führt man als normaler User (derjenige, in dessen Home-Verzeichnis sich die Konfigurationsdatei .lircrc befindet) das Skript
  >> ./lircs -c
  
aus. Von nun an laufen alle Programm wie gewünscht, und das Drücken der Taste "CD" auf der Fernbedienung startet nun xmms, die Taste "Sleep" öffnet ein Terminalfenster.

Fine-Tuning

Die wohl wichtigsten Programme, die man mit der Fernbedienung steuern möchte, sind MP3-Player und TV-Applikationen.
Für xmms gibt es mittlerweile ein Plugin, welches die Benutzung einer Fernbedienung ermöglicht. Das Plugin findet man unter http://sourceforge.net/project/showfiles.php?group_id=5444"

Nach dem Kompilieren der Software muß man die erzeugten Libraries, die sich im .libs-Unterverzeichnis befinden, entweder ins globale Pluginverzeichnis von xmms kopieren oder in das lokale Pluginverzeichnis (~/.xmms/Plugins). Nach einem Neustart von xmms kann man dann im Preferences-Menü das neue Plugin aktivieren:

XMMS-Plugin konfiguration

Die von XMMS nun verstandenen Befehle, die man direkt in der LIRC-Konfigurationsdatei benutzen kann, lauten nun

LIRC-XMMS Plugin Befehle
      PLAY                            ONE
      STOP                            TWO
      PAUSE                           THREE
      PLAYPAUSE                       FOUR
      NEXT [<tracks>]           FIVE
      PREV [<tracks>]           SIX
      SHUFFLE                         SEVEN
      REPEAT                          EIGHT
      FWD [<sec>]               NINE
      BWD [<sec>]               ZERO
      VOL_UP [<percent>]        SETPOS
      VOL_DOWN [<percent]          QUIT
      BAL_LEFT [<percent>]      LIST
      BAL_RIGHT [<percent>]     SELECT <chars>
      BAL_CENTER         		    PLAYLIST_CLEAR             
      PLAYLIST_ADD <file>
  


Xawtv unterstützt (zumindestens in neueren Versionen) standardmäßig LIRC und benötigt kein zusätzliches Plugin. Die neuste Version von xawtv findet man unter http://bytesex.org/xawtv/.
Die Befehle, die von xawtv verstanden werden, sind dabei exakt dieselben, die auch mittels des beiliegenden Programms xawtv-remote an ein laufendes xawtv-Programm übergeben werden können. Die für eine Fernbedienung interessanten Befehle sind hierbei:

xawtv-Befehle
  setstation [ <name> | <nr> | next | prev | back ]
  setchannel [ <name> | next | prev ]
  setinput [ <input> | next ]
  capture [ on | off | overlay | grabdisplay ]
  volume [ inc | dec | mute | <n> ]
  snap [ jpeg | ppm ] [ full | win | widthxheight ] <file-name> ]
  movie file <filename> | start | stop
  fullscreen
  msg text
  quit   
  keypad n
  


Nähere Informationen zu den einzelnen Befehlen findet man in der Manpage zu xawtv-remote.

Auszüge aus eine Beispielkonfiguration könnten dann folgendermaßen aussehen:

~/.lircrc
  begin
    	prog   = irexec	
    	button = CD
    	config = xmms & 
          mode   = xmms	
          flags = once
  
  end
  
  begin
    	prog   = irexec	
    	button = Tuner
    	config = xawtv  & 
          mode   = xawtv	
          flags = once
  end
  
  begin
    	prog   = irexec	
    	button = Sleep
    	config = xlock & 
  end
  
  
  begin xmms
    begin
      prog = xmms
      button = CD_Play
      config = PLAY
    end
    begin
      prog = xmms
      button = CD_Pause
      config = PAUSE
    end
    begin
      prog = xmms
      button = CD_Stop
      config = STOP
    end
  [...]
  end xmms
  
  begin xawtv
    begin
            prog   = xawtv
            button = DeckA_Play
            config = setstation next
    end
    begin
  	prog   = xawtv
  	button = DeckA_PlayRev
  	config = setstation prev
    end
    begin
  	prog   = xawtv
  	button = DeckA_Rec
  	config = fullscreen toggle
    end
  [..]
  end xawtv
  


Da Fernbedienungen notorisch zu wenige Knöpfe besitzen, unterstützt LIRC eine Mehrfachbelegung der einzelnen Tasten. Der Eintrag

          mode   = xmms	
  
bewirkt, daß LIRC beim Drücken der CD-Taste in den xmms-Modus geht, und nun diejenigen Befehle ausführt, die in dem Bereich
  begin xmms
   [... hier die Tastenbelegungen ...]
  end xmms
  
definiert wurden.
Dieselben Tasten könnten auch unter einem anderen Mode definiert sein, dann alledings mit einem anderen Funktionsaufruf. Dazu muß man zuerst die zum Mode gehörige Taste drücken, und die Funktionstasten werden entsprechend neu von LIRC interpretiert.

automatisch starten

Zum automatischen Starten des Daemons empfiehlt sich, wie immer, die Benutzung eines Init-Skriptes. Zwar liegen im LIRC-Unterverzeichnis contrib schon einige Beispiel-Init-Skripte, allerdings empfiehlt es sich, wegen dem nicht nur distributionsabhängigen, sondern sogar versionsnummernabhängigen Aufbau dieser Dateien ein bestehendes Init-Skript der eigenen Distribution zu kopieren und an eigene Bedürfnisse anzupassen, anstatt ein vorgefertigtes zu benutzen.

Das Init-Skript sorgt dann dafür, daß nach jedem Booten der lirc-Daemon gestartet wird. Zusätzlich müssen noch von entsprechenden Usern die Programme irxevent und irexec --daemon gestartet werden, welche die den Tasten zugeordneten Befehle ausführen. Dies übernimmt normalerweise das Skript lircs, welches sich im Unterverzeichnis contrib befindet.

Dieses Skript sollte nicht als root gestartet werden, sondern als User, der auch die entsprechende .lircrc-Konfigurationsdatei in seinem Home-Verzeichnis besitzt.
Ob der Befehl

  lircs -c
  
nun schon beim Booten, oder erst beim Starten des X-Servers aufgerufen werden soll, ist abhängig von den Einsatzgebieten der Fernbedienung, und davon, ob der Rechner ein Mehrbenutzersystem ist oder nur von einer einzelnen Person in Anspruch genommen wird.

Platziert man den Befehl mit im Init-Skript, so erzwingt man die Ausführung des Befehls mit den entsprechenden User-Rechten durch

  su Nichtrootuser -c "umask 022; /pfad/zu/lircs -c"
  
Ansonsten muß der Befehl lircs -c einfach der ~/.xinitrc des jeweiligen Users hinzugefügt werden, damit das Programm beim Starten der grafischen Oberfläche automatisch mitgestartet wird.

Die Erzeugung von X-Ereignissen (Events) wie das simulierte Drücken einesMausknopfes mittels LIRC ist recht umständlich.
Deshalb verschieben wir dies auf einen Nachfolgeartikel, der dann in der siebenten Ausgabe des Linux NetMag erscheinen wird.


Links
Homepage von LIRC: http://www.lirc.org
Ein Artikel über LIRC im c't Magazin: http://www.heise.de/ct/00/18/208/




Anmerkungen zu diesem Artikel


Bisher keine Kommentare


Eigene Anmerkung eintragen