Raspberry Pi als Infrarot Sender und Empfänger nutzen, aber warum? Nun ja, mir fällt da sofort ein Beispiel ein: Wenn man sein Smart Home bereits mit einer Anwesenheitserkennung ausgestattet hat, ist es nur eine Frage der Zeit bis man (oder die Freundin) auf die Idee kommt, den Fernseher automatisch aus oder an schalten zu lassen. Da man nicht jeden Fernseher, Receiver oder Stereoanlage über das Netzwerk an- oder ausschalten kann, ist IR die alternative um die vorhandenen Geräte ins Smart Home zu Integrieren. Wenn man diesem Tutorial folgt lässt sich fast jedes gerät das eine Fernbedienung hat über den Raspberry steuern, ob Klimaanlage, LED-Stripes oder wie bereits erwähnt Multimedia Systeme. Eurer Kreativität sind keine Grenzen gesetzt.

Benötigte Hardware für dieses Tutorial

Raspberry Pi

Optionale Raspberry Hardware

Amazon EDIMAX EW-7811UN Wireless USB Adapter, 150 Mbit/s (nicht mehr erforderlich ab Raspberry Pi 3)* Prototype Shield for Raspberry Pi B+ Controller*
Reichelt Raspberry Pi – USB-WiFi-Dongle, 150 MBit/s (nicht mehr erforderlich ab Raspberry Pi 3)* Raspberry Pi Shield – Prototyp*
ELV EDIMAX EW-7811Un Nano-USB-WLAN-Adapter, 150 Mbps (nicht mehr erforderlich ab Raspberry Pi 3)* JOY-iT ProtoShield+ für Raspberry Pi*

Werkzeuge und Zubehör

Es wird natürlich entweder ein Lötkolben oder eine Lötstation benötigt. Ob Steckbrückenkabel oder Drahtbrücken ist Geschmacksache, ich habe beides 😉
Amazon Lötkolben Set, Vtin 60W 220V Lötkolben Kit Soldering Iron Set, Lötset mit Einstellbare Temperatur 200-450°C, 5 PCS Unterschiedliche Lötspitzen, Löten Ständer, Lötzinn für Verschiedentlich Repariert Nutzung* Transmedia Lötstation, elektronisch temperaturgesteuert, LCD-Anzeige, 5% Genauigkeit, Preis-Leistungssieger 2017* Goobay Lötzinn bleifrei; ø 0, 56 mm; 100 g* Aukru 40x 20cm female-female jumper wire Kabel Steckbrücken Drahtbrücken für Arduino Raspberry pi (weiblichen zu weiblichen)* Neuftech 140 teilig Set male-male Jumper Wire Kabel Steckbrücken für Breadboard Steckplatine*
Reichelt Lötkolben mit Temperaturkontrolle ZD-708, 30W* ELV LS-80D-II Digitale Lötstation, 80 W* Lötdraht, 100g Rolle, Ø 0,5mm, Sn60* Entwicklerboards – Steckbrückenkabel, 20 Pole, m/m, f/f, f/m, 25* Steckbrücken-Drahtbrücken-Set*
ELV Fixpoint Lötkolben-Set 30W 230V* WELLER-Lötstation, regelbar 200-450°C* ELV No-Clean Lötzinn bleifrei Sn99Cu1+ML, 0,5 mm, 100 g* Raspberry Pi Verbindungskabel-Set für Raspberry Pi, 20 Stück, je 25 cm* nicht verfügbar

Erforderliche Elektro-Bauteile

Amazon leider nicht verfügbar TSOP4838* Infrarotdiode leider nicht verfügbar Kohleschichtwiderstand 1/4W, 5%, 220 Ohm*
Reichelt Transistor NPN TO-92 45V 0,1A 0,5W* IR-Empfänger-Module TSOP4838 38 kHz* Infrarotdiode, 950 nm, 10°, 5 mm, T1 3/4* Kohleschichtwiderstand 1/4W, 5%, 220 Ohm*

Anschließen der Bauteile

Sieht alles furchtbar kompliziert aus, ist es aber nicht 😉

Empfangseinheit

TSOP4838

TSOP4838 Beinchenbelegung

Sendeeinheit

BC 547B + Kohleschichtwiderstand 1/4W, 5%, 220 Ohm

BC-547-B-025W-220-Ohm-837x1024
Transistor und Widerstand müssen verbunden werden, egal ob durch Steckverbindungen oder durch löten

LD 274-3

Bei der LED ist darauf zu achten, dass die Stromzufuhr an den Pluspol angeschlossen wird. Der Pluspol ist meist das längere der beiden Beinchen der LED.

Gesamter Schaltplan

Nicht verwirren lassen, der Transistor ist hier spiegelverkehrt wie auf dem Foto zu sehen.

Anschlussplan der Bauteile an den Raspberry Pi als Infrarot Sender + Empfänger
Links ist der TSOP4838, also der Empfänger. In der Mitte ist der BC 547B (Transistor) und rechts die LED.

Raspberry Pi als Infrarot Sender – Installation

Die Grundinstallation eines Raspberry Pi habe ich bereits hier im Blog erklärt. Ich verwende hierfür den Raspberry Pi, den ich auch für die Homebridge verwende. Zum Senden und Empfangen der Signale verwende ich die Software lirc. Beginnen wird mit der Installation des Empfängers

Empfänger-Installation

sudo apt-get install lirc -y
sudo nano /boot/config.txt
# For more options and information see
# http://www.raspberrypi.org/documentation/configuration/config-txt.md
# Some settings may impact device functionality. See link above for details

# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1

# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
#disable_overscan=1

# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16

# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720

# uncomment if hdmi display is not detected and composite is being output
#hdmi_force_hotplug=1

# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1

# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2

# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4

# uncomment for composite PAL
#sdtv_mode=2

#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800

# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on

# Uncomment this to enable the lirc-rpi module
dtoverlay=lirc-rpi,gpio_in_pin=23,gpio_out_pin=22

# Additional overlays and parameters are documented /boot/overlays/README

# Enable audio (loads snd_bcm2835)
dtparam=audio=on
sudo nano /etc/lirc/hardware.conf
# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS="--uinput"

#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD=false

#Don't start irexec, even if a good config file seems to exist.
#START_IREXEC=false

#Try to load appropriate kernel modules
LOAD_MODULES=true

# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="default"
# usually /dev/lirc0 is the correct setting for systems using udev
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"

# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""

sudo /etc/init.d/lirc restart
sudo reboot now

Testen von lirc

sudo /etc/init.d/lirc stop
mode2 -d /dev/lirc0

Die Ausgabe sollte wie folgt aussehen

mode2 -d dev lirc0

Falls keine Codes zu sehen sind, bedeutet das, dass der Empfänger nicht richtig angeschlossen oder falsch gelötet wurde.
Hat allerdings alles bis hier funktioniert, können wir das Sniffen mit STRG+C abbrechen.

Erstellen der Fernbedienungskonfiguration

Nun müssen wird die Fernbedienung des Gerätes anlernen, das wir später steuern möchten. In meinem Fall die Fernbedienung meines Phillips Sound Systems.

Phillips Fernbedienung

Die interne Namensgebung der Tasten einer anzulernenden Fernbedienung ist durch lirc vorgegeben. Mit dem Kommando

irrecord –list-namespace kann man sich die aktuell verfügbaren Tastennamen anzeigen lassen. Die Einschalttaste der Fernbedienung sollte man also, damit die Namensgebung halbwegs sinnvoll ist, mit dem von lirc vorgegebenen Tastennamen KEY_POWER belegen. Man könnte der Einschalttaste aber theoretisch auch jeden anderen Namen zuweisen… Unten sieht man wie ich dein Einschaltknopf meine Fernbedienung angelernt habe. Dies funktioniert für jede Fernbedienung nach dem gleichen Schema.

sudo su -
/etc/init.d/lirc stop
irrecord -d /dev/lirc0 ~/NAMEDERFERNBEDIENUNG.conf
Lirc Continue
Die erste Meldung können wir mit Enter bestätigen
Raspberry Pi als Infrarot Sender 1
Sobald man dieses Fenster mit Enter bestätigt, zielt man anschließend mit der Fernbedienung auf den Infrarotempfänger und drückt möglichst willkürlich tasten, bis die nächste Eingabeaufforderung zu sehen ist.
Raspberry Pi als Infrarot Sender 2
Und nach einer Weile…
Raspberry Pi als Infrarot Sender 3
…kann man den Namen für die erste anzulernende Taste wählen. Ich wähle hier die Ein/Ausschalttaste der Fernbedienung.
Raspberry Pi als Infrarot Sender 4
Nachdem man die Taste gedrückt gehalten hatte und das Signal vom Raspberry empfangen wurde, kann man die nächste taste anlernen
Raspberry Pi als Infrarot Sender 5
Wenn alle Tasten die man über den Raspberry senden möchte angelernt wurden, kann man statt den Namen für die nächste Taste einzugeben, einfach Enter drücken.
Raspberry Pi als Infrarot Sender 6
Danach muss man eine Beliebige Taste der Fernbedienung so schnell wie möglich drücken…
Raspberry Pi als Infrarot Sender 7
..und die Konfigurationsdatei wird angelegt

Fernbedienungs-Konfiguration in lircd.conf einfügen

Nun muss die Standardkonfigurationsdatei lircd.conf durch eure eben erstellte ersetzt werden, da der dienst sonst nicht fehlerfrei startet. Dazu gebt ihr folgende Befehle ein

rm /etc/lirc/lircd.conf
cp NAMEDERFERNBEDIENUNG.conf /etc/lirc/lircd.conf
# Please make this file available to others
# by sending it to <lirc@bartelmus.de>
#
# this config file was automatically generated
# using lirc-0.9.0-pre1(default) on Tue Apr 18 21:32:58 2017
#
# contributed by 
#
# brand:                       /root/NAMEDERFERNBEDIENUNG.conf
# model no. of remote control: 
# devices being controlled by this remote:
#

begin remote

  name  Phillips
  bits           21
  flags RC6|CONST_LENGTH
  eps            30
  aeps          100

  header       2702   841
  one           484   409
  zero          484   409
  gap          107818
  toggle_bit_mask 0x10000
  rc6_mask    0x10000

      begin codes
          KEY_POWER                0x0EEFF3
      end codes

end remote

2Te Fernbedienungskonfiguration an lircd.conf anfügen

Falls ihr mehr als eine Konfigurationsdatei hab, könnt ihr diese mit folgendem Befehl an die bestehende Konfigurationsdatei lircd.conf anfügen

cat NAMEDERFERNBEDIENUNG2.conf >> /etc/lirc/lircd.conf

Testen der Infrarot Kommandos

Zuerst den anfänglich beendeten Dienst lirc wieder starten

/etc/init.d/lirc start

Nun können wir mit dem Kommando

irsend SEND_ONCE NAMEDERFERNBEDIENUNG KEY_POWER

einmalig den befehl zum An/Ausschalten des Gerätes schicken. In meinem Fall gebe ich also ein irsend SEND_ONCE Phillips KEY_POWER

Hinweis: Zum Testen sollte man die Infrarot-LED des Raspberrys am besten direkt auf das Gerät richten.

Fehlerbehebung

Falls sich bei euch nach dem erfolgreichen ausführen des Kommandos irsend SEND_ONCE NAMEDERFERNBEDIENUNG KEY_POWER  nichts tut, hier eine kleine Guide zur Fehlerbehebung.

Sendet die Infrarot-LED Signale?

Dies testet ihr am besten, indem ihr den Raum abdunkelt euch eine Digitalkamera oder ein Smartphone nehmt, und die Diode der Fernbedienung durch die Kamera anguckt und auf der Fernbedienung tasten drückt. Wenn ihr auf dem Kameradisplay die Diode leuchten seht, wisst ihr sicher dass der Sensor eurer Kamera Infrarot sensibel ist.

Nun richtet ihr die Kamera auf die IR-Diode des Raspberry und führt das Kommando irsend SEND_START NAMEDERFERNBEDIENUNG KEY_POWER   aus. Dieses Kommando sendet über einen bestimmten Zeitraum dauerhaft das IR Signal, die LED sollte, durch eure Kamera betrachtet, schwach leuchten.

  • Falls die IR-LED nicht leuchtet, ist beim verlöten etwas schiefgegangen
  • Falls die IR-LED leuchtet, nimmt euer Gerät die Befehle nicht an (dann bitte die Fernbedienungskonfiguration neu erstellen) oder ist außer Reichweite.