Um das komplette Konstrukt zu testen, geben Sie einfach die IP-Adresse des ESP32 in den Browser (Abbildung 3) ein. Wenn das Programm startet, wird die Netzwerkkonfiguration inklusive IP-Adresse Ihres ESP32 ausgegeben.
Listing 2
HTTP-Server
import network
import micropyserver
import time
interface = network.WLAN(network.STA_IF)
if not interface.isconnected():
print(stelle Verbindung her')
interface.active(True)
interface.connect('<YOUR-SSID>', '<YOUR-PASSWORD>')
while not interface.isconnected():
time.sleep(0.1)
print('.', end='')
print()
print(interface.ifconfig())
def home(request):
server.send("<HTML><HEAD><TITLE>ESP32</TITLE></HEAD>")
server.send("<BODY><H1>Webserver Homepage</H1></BODY></HTML>")
server = micropyserver.MicroPyServer()
server.add_route("/", home)
server.start()
Access Point
Bisher kam in den Beispielen ein vorhandenes WLAN zum Einsatz. Mit MicroPython lässt sich allerdings auch ein eigener Access-Point (AP) aufbauen. Dort läuft dann ein Webserver, mit dem eine LED angesteuert wird. In diesem Kontext bietet es sich geradezu an, ein Captive Portal [5] aufzusetzen. Dabei spielt die im Browser eingegebene URL keine Rolle, man landet stets auf derselben Seite.
Um das zu bewerkstelligen, benötigen Sie auf den ESP32 einen DNS-Server der alle Anfragen annimmt und immer mit der IP-Adresse des ESP32 antwortet. Tatsächlich gestaltet sich das Programmieren eines DNS-Server nicht allzu trivial. Deswegen greifen Sie erneut auf eine bestehende Bibliothek zurück:
$ mpremote mip install github:jczic/MicroDNSSrv/microDNSSrv.py
Das Beispielprogramm in Listing 3 erzeugt zuerst einen offenen Access-Point mit der SSID ESP32 (Zeile 8). Hierbei wird die IP-Konfiguration (Zeile 9) so angepasst, dass alle Anfragen immer zum ESP32 geschickt werden (Standard Gateway und Nameserver). Danach starten Sie den DNS-Server, der sämtliche Anfragen wieder auf die IP des ESP32 umleitet.
Anschließend wird in der Funktion home (Zeile 16) eine einfache HTTP-Seite zum Steuern der LED aufgebaut. Die Steuerung selbst erfolgt über die if-Abfrage am Anfang der Funktion. Hier fällt der Quellcode etwas speziell aus: Die zwei Links zum Steuern der LED erzeugen genau an der Position 12 im Request entweder eine 0 oder eine 1. Solang der Code unverändert bleibt, wird das so funktionieren. Doch Sie sollten bedenken, dass dieser Verarbeitungsweg sich zwar einfach implementieren lässt, aber nicht als optimal gilt. Den Rest des Programms kennen Sie schon aus den ersten Beispielen.
Listing 3
AP/Server
from microDNSSrv import MicroDNSSrv
import network
import micropyserver
import machine
led = machine.Pin(19, machine.Pin.OUT)
ap = network.WLAN(network.AP_IF)
ap.active(True)
ap.config(ssid="ESP32")
ap.config(password="ESP32")
ap.ifconfig(('192.168.42.1', '255.255.255.0', '192.168.42.1', '192.168.42.1'))
print(ap.ifconfig())
if MicroDNSSrv.Create( { "*" : "192.168.42.1" } ) :
print("MicroDNSSrv
started.")
else :
print("Error to starts MicroDNSSrv...")
def home(request):
if(request[12]=="1"):
led.on()
else:
led.off()
server.send("<HTML><HEAD><TITLE>ESP32</TITLE></HEAD>")
server.send("<BODY><H1>Webserver Homepage</H1><BR>")
server.send("<A href=/?VALUE=1>")
server.send("<DIV style= 'width: 300px; height: 200px; border: 1; background-color: green;'>")
server.send("</DIV></a><BR>")
server.send("<A href=/?VALUE=0>")
server.send("<DIV style= 'width: 300px; height: 200px; border: 1; background-color: red;'>")
server.send("</DIV></a><BR>")
server.send("</BODY></HTML>")
server = micropyserver.MicroPyServer()
server.add_route("/", home)
server.start()
Fazit
Netzwerkverbindungen unter MicroPython aufzubauen klappt ohne Probleme. Sie benötigen dazu lediglich eine passende Bibliothek. Dieser Text behandelt zwar überwiegend das gängige HTTP-Protokoll, das soll aber nicht bedeuten, dass es die einzige Möglichkeit der Netzwerkkommunikation unter MicroPython ist. Wenn Sie etwas tiefer einsteigen möchten, lässt sich in MicroPython auch eine rohe Socket-Verbindung umsetzen. Alles in allem ist das Thema Netzwerk in MicroPython gut abgedeckt. (csi)
Infos
- Dokumentation zu Mpremote: https://docs.micropython.org/en/latest/reference/mpremote.html
- HTTP-Fehlercodes: https://de.wikipedia.org/wiki/HTTP-Statuscode#1xx_%E2%80%93_Informationen
- Teapot-Fehlercode: https://datatracker.ietf.org/doc/html/rfc2324#section-2.3.2
- Details zu HTTP: https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol
- Captive Portal: Martin Mohr, “Da ist der Wurm drin”, RPG 07/2025, S. 14, https://www.raspi-geek.de/52215






