Raspberry Pi Pico: Samsung-Fernseher mit IR-Transmitter steuern (einschalten und ausschalten)
Mit einem Raspberry Pi Pico lässt sich eine Fernbedienung für einen Fernseher realisieren. Als Beispiel steuern wir einen Samsung-Fernseher über Infrarot und verwenden dazu ein IR-Transmitter-Modul mit einer Infrarot-LED mit einer Wellenlänge von 940 nm, über die die Steuersignale an den Fernseher gesendet werden.
Damit der Fernseher die Signale korrekt erkennt, müssen diese mit der passenden Trägerfrequenz und dem richtigen Timing übertragen werden. Das IR-Transmitter-Modul allein erzeugt die dafür notwendige Modulation nicht. Deshalb übernimmt der Raspberry Pi Pico diese Aufgabe. Samsung-Fernseher verwenden typischerweise eine Infrarot-Trägerfrequenz von 38 kHz. Der Pico kann diese Frequenz mithilfe seiner PWM-Funktion (Pulsweitenmodulation) erzeugen und die Infrarot-LEDs entsprechend ansteuern.
Als Beispiel implementieren wir die Power-Funktion, mit der sich der Fernseher ein- und ausschalten lässt. Dazu erzeugt der Raspberry Pi Pico aus einem Hexcode das passenden Infrarot-Signal und sendet es über das Transmitter-Modul. Der Fernseher empfängt und interpretiert das Signal wie den Befehl einer herkömmlichen Samsung-Fernbedienung. Auf diese Weise verhält sich der Pico wie eine einfache Infrarot-Fernbedienung, die sich später um weitere Funktionen wie Lautstärkeregelung oder Programmwechsel erweitern lässt.
Aufbau und Bauteile

- IR-Transmitter
- Taster
- GPIO-Belegung (Pinout)
| Raspberry Pi Pico | IR-Transmitter | |
|---|---|---|
| Pin 21 | GPIO 16 | DAT (IN) |
| Pin 38 | GND | GND |
| Pin 37 | 3V3 | VCC |
Programmcode
Der Programmcode steuert einen Infrarot-Transmitter mit einem Raspberry Pi Pico, um einen Samsung-Fernseher per Tastendruck zu bedienen. Beispielhaft wird hier das Power-Kommando (Hexcode) zum Einschalten und Ausschalten verwendet.
Die auskommentierten IR-Codes können durch Aktivieren der entsprechenden Zeile für weitere Funktionen wie Lautstärke, Kanalwechsel oder Navigation verwendet werden. Diese IR-Codes sind aber nicht alle geprüft.
- Initialisierung der GPIOs für den Taster, den IR-Transmitter und die Onboard-LED.
- Per PWM-Signal wird ein 38-kHz-Trägersignal zur Übertragung der Kommandos per Infrarot erzeugt.
- Das Kommando, in Form eines 32-Bit-Hexcodes, wird per Infrarot 2 mal übertragen.
- Mit dem Taster wird das Senden des IR-Codes ausgelöst.
- Das Hauptprogramm mit der Endlosschleife überwacht den Taster. Nach dem Loslassen wird eine kurze Pause eingelegt, um Mehrfachauslösungen zu vermeiden.
# Bibliotheken laden
import machine
import time
# Konfiguration: GPIO-Pins
GPIO_BUTTON = 15
GPIO_IR_DAT = 16
GPIO_LED_ONBARD = 25
# Taster initialisieren
remote_button = machine.Pin(GPIO_BUTTON, machine.Pin.IN, machine.Pin.PULL_UP)
# Onboard-LED initialisieren
led = machine.Pin(GPIO_LED_ONBARD, machine.Pin.OUT, value=0)
# PWM für IR-Transmitter initialisieren
pwm = machine.PWM(GPIO_IR_DAT)
pwm.freq(38000) # 38 kHz (NEC/Samsung)
pwm.duty_u16(0)
# IR-Codes für Samsung-Fernseher (unvollständig und ungeprüft)
IR_CODE = 0xE0E040BF # Power
#IR_CODE = 0xE0E0E01F # VolumeUp
#IR_CODE = 0xE0E0D02F # VolumeDown
#IR_CODE = 0xE0E0F00F # Mute
#IR_CODE = 0xE0E0807F # Source
#IR_CODE = 0xE0E048B7 # ChannelUp
#IR_CODE = 0xE0E008F7 # ChannelDown
#IR_CODE = 0xE0E006F9 # Up
#IR_CODE = 0xE0E08679 # Down
#IR_CODE = 0xE0E0A659 # Left
#IR_CODE = 0xE0E046B9 # Right
#IR_CODE = 0xE0E016E9 # Enter
#IR_CODE = 0xE0E01AE5 # Return
#IR_CODE = 0xE0E058A7 # Menu
#IR_CODE = 0xE0E0F20D # Guide
#IR_CODE = 0xE0E0F807 # Info
#IR_CODE = 0xE0E0B44B # Exit
#IR_CODE = 0xE0E036C9 # Red
#IR_CODE = 0xE0E028D7 # Green
#IR_CODE = 0xE0E0A857 # Yellow
#IR_CODE = 0xE0E06897 # Blue
#IR_CODE = 0xE0E0E21D # Play
#IR_CODE = 0xE0E052AD # Pause
#IR_CODE = 0xE0E0629D # Stop
#IR_CODE = 0xE0E012ED # FastForward
#IR_CODE = 0xE0E0A25D # Rewind
# IR-Funktion: 38-kHz-IR-Träger einschalten
def mark(duration_us):
pwm.duty_u16(32768)
time.sleep_us(duration_us)
# IR-Funktion: IR-Träger ausschalten
def space(duration_us):
pwm.duty_u16(0)
time.sleep_us(duration_us)
# IR-Funktion: 32-Bit IR-Code senden
def send_code(code):
# Startsignal
mark(4500)
space(4500)
# 32 Bit, MSB zuerst
for i in range(31, -1, -1):
mark(560)
if code & (1 << i):
space(1690)
else:
space(560)
# Stop
mark(560)
pwm.duty_u16(0)
# Funktion: Taster verarbeiten
def send_command(code, name):
print(name)
# LED einschalten
led.value(1)
# IR-Befehl 2 mal senden
send_code(code)
time.sleep_ms(40)
send_code(code)
# kurze Entprellzeit
time.sleep_ms(100)
# LED ausschalten
led.value(0)
# Hauptprogramm
print("Fernbedienung bereit")
while True:
# Taster wird gerück
if remote_button.value() == 0:
send_command(IR_CODE, "POWER")
# Warten bis Taster losgelassen wird
while remote_button.value() == 0: time.sleep_ms(10)
time.sleep_ms(200)
# Verzögerung
time.sleep_ms(10)
Weitere verwandte Themen:
- Raspberry Pi Pico: MP3, Musik, Sprache und Audio
- Raspberry Pi Pico als Signalgenerator
- Raspberry Pi Pico: LED-Lichtschranke (Alarmanlage)
Elektronik-Sets für das Hardware-nahe Programmieren
Der Elektronik-Kompendium Club ist ein Online-Treffpunkt für Hobby-Elektroniker und Maker.
Wir wollen:
- Anregungen und Lösungen von echten Menschen bekommen
- Menschen zusammenbringen und gemeinsam wachsen
- Erfahrungen machen und teilen



