Skip to content

Technik Blog

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

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

MicroPython mit ESP32: steuern von LEDs via HTTP-Request

Posted on 5. August 20246. Januar 2025 by Stefan Draeger

In diesem Beitrag möchte ich dir gerne zeigen, wie du via HTTP-Request LEDs am ESP32 D1 R32 mit MicroPython steuern kannst. Im letzten Beitrag hatte ich dir bereits erläutert, wie man einen HTTP Webserver aufsetzt und eine kleine Webseite ausliefert. Nun möchte ich dir zeigen, wie man Aktoren steuern kann.

MicroPython mit ESP32: steuern von LEDs via HTTP-Request
Dieses Video auf YouTube ansehen.

Das Gute daran ist, dass du statt LEDs auch Relais anklemmen kannst, um andere Geräte zu schalten. Relais funktionieren ähnlich wie LEDs im Code, was dieses Beispiel sehr einfach aufzubauen und zu programmieren macht. In diesem Beitrag zeige ich dir, wie du LEDs und Relais über HTTP-Requests steuern kannst. Dies ermöglicht dir eine einfache Steuerung deiner Geräte über das Internet oder ein lokales Netzwerk.

Inhaltsverzeichnis

  • Benötigte Ressourcen für den Nachbau
  • Aufbau der Schaltung
    • Testen der Schaltung
  • Webseite zum Steuern der LEDs und des Relais
    • Schritt 1 – erstellen einer lokalen Webseite
    • Schritt 2 – Ablegen der Webseite auf den Mikrocontroller
    • Schritt 3 – Programm auf dem Mikrocontroller erstellen
      • Ablage der Zugangsdaten in der Datei secrets.py
      • Schritt 3.1 – Aufbau einer WLAN-Verbindung
      • Schritt 3.2 – Laden der Webseite
      • Schritt 3.3 – Auslesen der aktuellen Status der GPIOs
    • Schritt 4 – Request vom Client auswerten
      • Schritt 4.1 – aktivieren eines GPIOs
      • Schritt 4.2 – ersetzen der Platzhalter durch Status der GPIOs
  • Ausblick auf den nächsten Beitrag zu MicroPython mit ESP32 & HTTP-Request

Benötigte Ressourcen für den Nachbau

Wenn du das kleine Projekt nachbauen möchtest, dann benötigst du:

  • einen ESP32 D1 R32*
    • ein Micro USB-Datenkabel*
  • ein Relais Shield*
  • drei Breadboardkabel*, weiblich-männlich
  • drei 5 mm LEDs*
  • drei 220 Ohm Vorwiderstände*
  • sechs Breadboardkabel, männlich-männlich
  • ein 400 Pin Breadboard*
Bauteile für die Schaltung - ESP32 D1 R32 mit LEDs und Relais
Bauteile für die Schaltung – ESP32 D1 R32 mit LEDs und Relais

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!

Aufbau der Schaltung

Der ESP32 D1 R32 hat den Vorteil, dass dieser im Format des Arduino UNO R3 / R4 ist und somit die meisten Multifunktionalen Shields drauf passen. Jedoch möchte ich in diesem Beitrag eine kleine Schaltung an diesem aufbauen.

Es gibt Shields welche über LEDs und ein Relais verfügt, hier zum Beispiel das YwRobot Easy Module MIX V1*. Dieses hatte ich dir bereits im Beitrag Arduino Lektion #101: Multifunktionales Shield “Easy Module MIX V1” von YwRobot anhand des Arduino vorgestellt.

Multifunktionales Shield von YwRobot
Multifunktionales Shield von YwRobot

Nachfolgend möchte ich dir jedoch zeigen, wie du die kleine Schaltung mit den LEDs und dem Relais auf einem 400 Pin Breadboard aufbaust.

Schaltung - ESP32 D1 R32 LED und Relais
Schaltung – ESP32 D1 R32 LED und Relais

Testen der Schaltung

Bevor wir mit der Programmierung beginnen, testen wir die Schaltung, ob dieses so funktioniert, dazu schreiben wir ein einfaches kleines Programm, welches die LEDs und das Relais aktiviert und deaktiviert.

# importieren der Module für den Zugriff auf
# die GPIOs
import machine
# importieren des Modules für den Zugriff auf
# die Funktionen für Zeit
import time

# rote LED am GPIO17 angeschlossen
ledRot = machine.Pin(17, machine.Pin.OUT)
# grüne LED am GPIO16 angeschlossen
ledGruen = machine.Pin(16, machine.Pin.OUT)
# gelbe LED am GPIO14 angeschlossen
ledGelb = machine.Pin(14, machine.Pin.OUT)
# Relais am GPIO12 angeschlossen
relais = machine.Pin(12, machine.Pin.OUT)

# Funktion zum setzen eines neuen Status des GPIOs
def setState(state):
    ledRot.value(state)
    ledGelb.value(state)
    ledGruen.value(state)
    relais.value(state)    

# Alle GPIOs / Komponenten deaktivieren
setState(0)

try:
    # Wiederhole 20x
    for index in range(20):
        # Alle GPIOs / Komponenten aktivieren
        setState(1)
        # eine Pause von 500ms
        time.sleep(0.5)
        # Alle GPIOs / Komponenten deaktivieren
        setState(0)
        # eine Pause von 500ms
        time.sleep(0.5)
            
except KeyboardInterrupt:
    # Alle GPIOs / Komponenten deaktivieren
    setState(0)

Der Code lässt die GPIOs der LEDs und des Relais 20x Ein-/Ausschalten.

Webseite zum Steuern der LEDs und des Relais

Es gibt wie oft im Leben mehrere Lösungen, nachfolgend möchte ich dir eine Lösung vorstellen, in welcher wir die Webseite auf dem Mikrocontroller ablegen und bei jedem Aufruf der IP-Adresse des Gerätes ausgeliefert wird.

Die Webseite enthält für jede Komponente eine Schaltfläche sowie eine kleine Leuchte welche den Zustand dieser Komponente bzw. den dahinterliegenden GPIO visualisiert.

Schritt 1 – erstellen einer lokalen Webseite

Im ersten Schritt erstellen wir die kleine Webseite mit dem Dashboard. Die Bilder für die Visualisierung des Status der GPIOs habe ich von der Seite iconfinder.com geladen (dort kann man nicht nur Suchen, sondern auch einen Filter auf Free & free for commercial use setzen).

Webseite – Dashboard zum Steuern der LEDs & des RelaisHerunterladen

Die kleinen PNG-Dateien habe ich in der Größe von 48px x 48px heruntergeladen und mit der Seite www.base64-image.de in Base64 Zeichenketten umgewandelt, dieses macht es einfacher die Bilder in die Seite zu integrieren.

Schritt 2 – Ablegen der Webseite auf den Mikrocontroller

Zum Programmieren verwende ich wie so oft für MicroPython Thonny dieses kostenfreie Tool kannst du dir unter thonny.org für Windows, Linux und macOS herunterladen.

Über dieses Tool kannst du die HTML-Datei auf den Mikrocontroller ablegen.

Dazu klickst du im oberen Bereich des Explorers auf die Datei und wählst aus dem Kontextmenü (rechte Maustaste) den Eintrag „Upload to /“.

Es ist empfehlenswert, dass zu diesem Zeitpunkt kein Programm läuft, so dauert der Upload nicht so lange.

Schritt 3 – Programm auf dem Mikrocontroller erstellen

Zunächst benötigen wir die Imports für den Aufbau der WiFi-Verbindung und zum ansteuern der GPIOs vom Mikrocontroller.

import network
import socket
from secrets import *

from machine import Pin

Ablage der Zugangsdaten in der Datei secrets.py

Die SSID sowie das Passwort lege ich in der Datei secrets.py ab, welche ebenso importiert wird. Du könntest diese Werte auch direkt in den Code schreiben.

wifi_ssid = "xxxx"
wifi_password = "yyyy"

Schritt 3.1 – Aufbau einer WLAN-Verbindung

Damit die Verbindung zum lokalen WLAN Netzwerk hergestellt werden kann, benötigen wir die SSID sowie das Passwort.

# Aufbau der WiFi-Verbindung zum WLAN
connection = network.WLAN(network.STA_IF)
connection.active(True)
connection.connect(wifi_ssid, wifi_password)

Schritt 3.2 – Laden der Webseite

Da die Webseite als HTML-Datei auf dem Mikrocontroller abgelegt wurde, müssen wird diese einmal einlesen und in eine Variable verpacken. In einem weiteren Abschnitt würden wir die darin befindlichen Platzhalter mit Werten ersetzen.

website = ''
with open('website.html', 'r') as file:
   for line in file.readlines():
      website += line

Schritt 3.3 – Auslesen der aktuellen Status der GPIOs

Bevor die Seite ausgeliefert wird, werden alle Status der GPIOs (von den LEDs und dem Relais) ausgelesen und auf die jeweiligen CSS-Klassen gemappt.

ledRotClass = classImgOn if ledRot.value() == 1 else classImgOff
ledGruenClass = classImgOn if ledGruen.value() == 1 else classImgOff
ledGelbClass = classImgOn if ledGelb.value() == 1 else classImgOff
relaisClass = classImgOn if relais.value() == 1 else classImgOff

Schritt 4 – Request vom Client auswerten

Wenn der Benutzer der Webseite eine Schaltfläche klickt, dann wird ein Ajax Request abgesendet. Bei einer positiven Rückantwort wird die Seite neu geladen und der aktuelle Status ist sichtbar. Für jede Schaltfläche wird ein Index beginnend bei 0 übergeben und im Code ausgewertet. Dazu wird lediglich geprüft, ob im Response ein Text enthalten ist.

data = r.decode('utf-8')
print(data)
currentState = -1
component = None
handleRequest = False
if '/toggle=0' in data:
   currentState = ledRot.value()
   component = ledRot
   handleRequest = True
if '/toggle=1' in data:
   currentState = ledGelb.value()
   component = ledGelb
   handleRequest = True
if '/toggle=2' in data:
   currentState = ledGruen.value()
   component = ledGruen
   handleRequest = True
if '/toggle=3' in data:
   currentState = relais.value()
   component = relais
   handleRequest = True

Schritt 4.1 – aktivieren eines GPIOs

Wenn ein definierter Text im Request erkannt wurde, dann wird der entsprechende GPIO aktiviert bzw. deaktiviert.

if handleRequest:
   if currentState == 0:
      component.value(1)
   else:
      component.value(0)

Schritt 4.2 – ersetzen der Platzhalter durch Status der GPIOs

In der Variable website befindet sich der Inhalt der Datei website.html in welchem wiederum wieder Platzhalter enthalten sind, welche wir durch die jeweiligen Style-Klassen ersetzen.

keyLedRotClass = '{ledRotClass}'
keyLedGelbClass = '{ledGelbClass}'
keyLedGruenClass = '{ledGruenClass}'
keyRelaisClass = '{relaisClass}'
        
website = website.replace(keyLedRotClass, ledRotClass);
website = website.replace(keyLedGelbClass, ledGelbClass);
website = website.replace(keyLedGruenClass, ledGruenClass);
website = website.replace(keyRelaisClass, relaisClass);

Ausblick auf den nächsten Beitrag zu MicroPython mit ESP32 & HTTP-Request

Im nächsten Beitrag möchte ich dir zeigen, wie du für dein Smarthome einen Shelly steuerst und auslesen kannst. Die Shelly Geräte haben den Vorteil, dass diese eine öffentliche API haben und somit sehr einfach anzusteuern sind.

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

  • 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}