TSOP 1738 IR Empfänger am Raspberry Pi GPIO

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.

Veröffentlicht von

Gerald Schneider

Diplom-Informatiker (DH) in Rostock. Ich blogge über Entwicklung, Internet, mobile Geräte und Virtualisierung.

3 Gedanken zu „TSOP 1738 IR Empfänger am Raspberry Pi GPIO“

  1. 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

  2. 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.

  3. 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert