Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Gartenautomation
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Deutsch
  • English
Menu

Infrarot-Fernbedienung mit dem ESP32 und MicroPython auslesen: Ein Anfängerleitfaden

Posted on 15. Oktober 202310. März 2024 by Stefan Draeger

In diesem kurzen Beitrag möchte ich dir zeigen, wie du eine Infrarot-Fernbedienung am ESP32 mit MicroPython auslesen kannst. Ich werde dich Schritt-für-Schritt mitnehmen und dir somit alles aufzeigen, was du benötigst, um später mit der Fernbedienung Aktoren wie LEDs, LED-Streifen, Motoren, Servos etc. zu steuern.

Programmieren einer Infrarot-Fernbedienung am ESP32 mit MicroPython
Dieses Video auf YouTube ansehen.

Inhaltsverzeichnis

  • Benötigte Ressourcen für den Aufbau der Schaltung am ESP32
  • Aufbau der Schaltung am ESP32
  • Aufbau der Schaltung am AZ-Delivery ESP32 mit LEDs
  • Vorbereitung des ESP32
  • Programmieren in der Thonny IDE
    • Auslesen der IR-Fernbedienung
    • steuern von LEDs mit einer Infrarot-Fernbedienung am ESP32 mit MicroPython

Benötigte Ressourcen für den Aufbau der Schaltung am ESP32

Für unsere Schaltung benötigen wir:

  • einen ESP32*,
  • ein Micro-USB-Datenkabel*,
  • ein Infrarot Funk Fernbedienung Set*

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Zum Testen der Fernbedienung verwende ich hier zusätzlich drei verschiedenfarbige LEDs inkl. Vorwiderstand.

Aufbau der Schaltung am ESP32

Das IR-Remote Modul K022 verfügt über drei Pins (GND, VCC, Signal), welche wie nachfolgend an den ESP32 angeschlossen werden.

Schaltung - ESP32 mit Infrarot-Empfänger (KY022)
Schaltung – ESP32 mit Infrarot-Empfänger (KY022)

Aufbau der Schaltung am AZ-Delivery ESP32 mit LEDs

In meinem Fall nutze ich den AZ-Delivery ESP32, welcher im Formfaktor des Arduino UNO daher kommt. Zusätzlich implementiere ich noch vier farbige LEDs, welche ich später einzeln schalten möchte.

ESP32 mit LEDs und IR-Empfänger (KY022)
ESP32 mit LEDs und IR-Empfänger (KY022)

Vorbereitung des ESP32

Wenn du wie ich den ESP32 für viele Experimente und Schaltungen verwendest, dann ist es ratsam, bevor man mit der Schaltung und vor allem Programmierung beginnt, ein leeres Programm auf den Mikrocontroller zu spielen.

Im Fall von MicroPython ist dieses recht einfach, denn wir können hier einfach eine leere PY-Datei mit der Thonny IDE hochladen.

Programmieren in der Thonny IDE

Das Programm erzeuge ich in der Thonny IDE welche du unter https://thonny.org/ für macOS, Windows und auch Linux kostenfrei herunterladen kannst.

Zum Auslesen der IR-Fernbedienung benötigen wir eine Bibliothek, diese kannst du dir vom GitHub Repository peterhinch / micropython_ir als ZIP-Datei herunterladen.

Wenn du die ZIP-Datei heruntergeladen und entpackt hast, dann musst du den Ordner „ir_rx“ in den Ordner lib auf dem ESP32 kopieren.

Auslesen der IR-Fernbedienung

Auf dem Markt gibt es diverse Sets mit ebenso verschiedenen IR-Fernbedienungen. In meinem Fall nutze ich eine kleine einfache Fernbedienung, welche wie nachfolgend aufgebaut ist.

einfache IR Fernbedienung für den Arduino
einfache IR Fernbedienung für den Arduino
TasteCodeTasteCode
POWER69MODE70
MUTE71PLAY/PAUSE68
BACK64NEXT67
EQ7–21
+9022
repeat25U/SD13
112224
39448
528690
777882
974

Der MicroPython Code zum auslesen der IR-Fernbedienung:

#Import der benötigten Module
from machine import Pin, freq
from ir_rx.print_error import print_error
#Für die IR-Fernbedienung benötige ich das Modul NEC-16
#ggf. musst du hier den Import anpassen.
from ir_rx.nec import NEC_16

#IR-Receiver am Pin GPIO14 angeschlossen
pin_ir = Pin(14, Pin.IN)

#Funktion um den Code der Taste auszuwerten,
#hier können wir später mit einem Switch oder einer
#If-Bedienung auf die Tasten reagieren.
def decodeKeyValue(data):
    print(data)

#Funktion welche bei einem Tastendruck auf
#der IR-Fernbedienung ausgeführt werden soll.
def callback(data, addr, ctrl):
    #Wenn keine gültigen Daten empfangen wurden
    #dann soll nichts passieren.
    if data < 0:
        pass
    else:
        #Wenn jedoch gültige Daten empfangen wurden,
        #dann soll die Funktion decodeKeyValue mit
        #diesen aufgerufen werden.
        print(decodeKeyValue(data))

#Definieren das, dass IR-Modul am Pin 14 angeschlossen ist,
#zusätzlich wird noch ein Callback angegeben welcher aufgerufen wird,
#wenn eine Taste betätigt wird.
ir = NEC_16(pin_ir, callback)
#Im Fehlerfall soll die das Modul "print_error" angesteuert werden
ir.error_function(print_error)

#Try-Except Block
try:
    #starten einer leeren Endlosschleife
    while True:
        pass
#Wenn das Programm über Strg + C oder
#über die IDE abgebrochen wird, wird ebenso
#die Verbindung zum IR-Modul geschlossen.
except KeyboardInterrupt:
    ir.close()

steuern von LEDs mit einer Infrarot-Fernbedienung am ESP32 mit MicroPython

Nachfolgend nun ein kleines Programm zum steuern von LEDs via IR-Fernbedienung am ESP32.

Du kannst statt LEDs auch andere Aktoren wie Servomotoren, Motoren (am Motorshield) ansteuern.

#Import der benötigten Module
from machine import Pin, freq
import machine
from ir_rx.print_error import print_error
#Für die IR-Fernbedienung benötige ich das Modul NEC-16
#ggf. musst du hier den Import anpassen.
from ir_rx.nec import NEC_16

#LEDs 
ledRot = Pin(18, Pin.OUT)
ledGruen = Pin(12, Pin.OUT)
ledBlau = Pin(23, Pin.OUT)
ledGelb = Pin(19, Pin.OUT)

#IR-Receiver am Pin GPIO14 angeschlossen
pin_ir = Pin(14, Pin.IN)

powerOn = False
ledRotOn = False

ledGruenOn = False
ledBlauOn = False
ledGelbOn = False

#Funktion zum aktivieren des Codes
#die LEDs gruen, blau und gelb
#lassen sich nur aktivieren wenn die
#rote LED leuchtet.
def togglePower():
    global powerOn, ledRot
    powerOn = not powerOn
    ledRot.value(powerOn)

#Funktion für die grüne LED
def toggleLEDGruen():
    #laden der globalen Felder
    global powerOn, ledGruen, ledGruenOn
    #prüfen ob das Feld powerOn WAHR / True ist
    if powerOn:
        #umkehren des Status der LED
        ledGruenOn = not ledGruenOn
        #zuweisen des neuen Status zum Pin
        ledGruen.value(ledGruenOn)

def toggleLEDBlau():
    global powerOn, ledBlau, ledBlauOn
    if powerOn:
        ledBlauOn = not ledBlauOn
        ledBlau.value(ledBlauOn)

def toggleLEDGelb():
    global powerOn, ledGelb, ledGelbOn
    if powerOn:
        ledGelbOn = not ledGelbOn
        ledGelb.value(ledGelbOn)

#Funktion um den Code der Taste auszuwerten,
#hier können wir später mit einem Switch oder einer
#If-Bedienung auf die Tasten reagieren.
def decodeKeyValue(data):
    global ledGruen, ledGruenOn, ledBlau, ledBlauOn, ledGelb, ledGelbOn
    if data == 69: #Taste POWER
        togglePower()
    elif data == 12: #Taste 1 - grüne LED
        toggleLEDGruen()
    elif data == 24: #Taste 2 - blaue LED
        toggleLEDBlau()
    elif data == 94: #Taste 3 - gelbe LED
        toggleLEDGelb()
    else: #alle anderen Tasten
        print("Taste nicht belegt!")

#Funktion welche bei einem Tastendruck auf
#der IR-Fernbedienung ausgeführt werden soll.
def callback(data, addr, ctrl):
    #Wenn keine gültigen Daten empfangen wurden
    #dann soll nichts passieren.
    if data < 0:
        pass
    else:
        #Wenn jedoch gültige Daten empfangen wurden,
        #dann soll die Funktion decodeKeyValue mit
        #diesen aufgerufen werden.
        decodeKeyValue(data)

#Definieren das, dass IR-Modul am Pin 14 angeschlossen ist,
#zusätzlich wird noch ein Callback angegeben welcher aufgerufen wird,
#wenn eine Taste betätigt wird.
ir = NEC_16(pin_ir, callback)
#Im Fehlerfall soll die das Modul "print_error" angesteuert werden
ir.error_function(print_error)

#Try-Except Block
try:
    #initial die LEDs deaktivieren
    ledRot.off()
    ledGruen.off()
    ledBlau.off()
    ledGelb.off()
    #starten einer leeren Endlosschleife
    while True:
        pass
#Wenn das Programm über Strg + C oder
#über die IDE abgebrochen wird, wird ebenso
#die Verbindung zum IR-Modul geschlossen.
except KeyboardInterrupt:
    ir.close()

4 thoughts on “Infrarot-Fernbedienung mit dem ESP32 und MicroPython auslesen: Ein Anfängerleitfaden”

  1. JoKa sagt:
    27. Oktober 2023 um 16:14 Uhr

    Hallo, lässt sich das einfach auf die ESP8266-NodeMCU übertragen?
    Was müsste ich ändern?
    ESP32 ist im Moment nur als ESP32-CAM vorhanden.

    Antworten
    1. Stefan Draeger sagt:
      29. Oktober 2023 um 07:34 Uhr

      Hi,

      das sollte auch auf einem ESP8266 laufen. Schaue ich mir gerne mal an.

      Gruß,
      Stefan

      Antworten
  2. JoKa sagt:
    30. Oktober 2023 um 13:08 Uhr

    Hi Stefan,
    danke für die Rückmeldung.
    Habe inzwischen was zum 8266 gefunden:
    https://github.com/crankyoldgit/IRremoteESP8266/wiki#ir-receiving
    Es funktioniert ! Ich musste nur ‚const uint32_t kBaudRate = 115200;‘
    auf 9600 setzen. Mein PC ist wohl zu lahm.
    Bei 115200 kommt nur wirres Zeug zurück .
    Gruß,
    JoKa

    Antworten
  3. Pingback: MicroPython mit ESP32: IR-Signale empfangen und verarbeiten - Technik Blog

Schreibe einen Kommentar Antworten abbrechen

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

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen
Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

link zu Fabook
link zu LinkedIn
link zu YouTube
link zu TikTok
link zu Pinterest
link zu Instagram
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}