MicroPython kann von Haus aus Netzwerkverbindungen aufbauen. Einige Mikrocontroller bringen die passende Hardware sogar schon mit.
Der ESP32 gilt als prädestinierter Mikrocontroller für alle Experimente rund um Netzwerkverbindungen, da er ohne zusätzliche Hardware Wi-Fi-Verbindungen aufbauen kann. Obendrein empfiehlt er sich wegen seines hervorragenden Preisleistungsverhältnisses für Bastler. Als IDE dient für diesen Artikel Thonny.
Da es zum Testen der Netzwerkfähigkeiten von MicroPython keine spezielle Hardware braucht, wirkt der Testaufbau (Abbildung 1) relativ spartanisch: ein ESP32 Devkit auf einem Breadboard. Am ESP32 ist ein LED-Bargraph angeschlossen, damit es einige LED zum Ansteuern gibt.
Um auf dem aktuellen Stand zu sein, spielen Sie die jüngste Version von MicroPython auf den Controller. Navigieren Sie dazu in Thonny in den entsprechenden Dialog (Abbildung 2) und starten den Vorgang: Werkzeuge | Optionen | Interpreter.

Abbildung 2: Das Installieren einer aktuellen MicroPython-Version verlangt lediglich einige Mausklicks.
HTTP-Client
Hinter einem HTTP-Client steckt ein Programm, das Anfragen (Requests) per HTTP (Kasten “HTTP”) stellen kann. Webbrowser sind gängige Vertreter von HTTP-Clients. Um einen HTTP-Request absetzen zu können, muss eine Verbindung mit einem Netzwerk bestehen. Im Beispielfall handelt es sich um das vorhandene WLAN. Mit der in MicroPython enthaltenen Bibliothek Socket lässt sich mit ein wenig Aufwand ein HTTP-Client bauen.
HTTP
HTTP ist die Abkürzung für Hypertext Transfer Protocol. Es dient zur Datenübertragung im Internet. Bei HTTP handelt es sich um ein zustandsloses Protokoll, bei dem auf eine Anfrage (Request) immer eine Antwort (Response) erfolgt. Ein Client sendet einen Request und erhält von einen Server die Response.
Die Anfrage wie auch die Antwort bestehen aus einem Kopf (Header) und einem Körper (Body). Die zu übertragenden Informationen sind dabei im Body untergebracht. Bei Requests gibt es unterschiedliche Abfragemethoden, die beiden gebräuchlichsten sind GET und POST.
HTTP definiert etliche Fehlercodes, die sich grob in Gruppen einteilen lassen: 1xx Informationen, 2xx Erfolg – der bekannteste Vertreter ist hier wohl die 200 (ok) – 3xx Umleitungen, 4xx Client-Fehler und 5xx Server-Fehler. Auf Wikipedia [2] findet sich eine Übersicht aller Fehlercodes, die Ihnen beim Arbeiten mit HTTP begegnen können.
Ein erwähnenswerter Fehlercode ist in diesem Zusammenhang die Nummer 418 (I’m a teapot), der tatsächlich in den RFCs [3] definiert ist. Er zeigt, dass auch die Paragrafenreiter des Internets Sinn für Humor haben. Falls Sie sich intensiv mit dem Thema HTTP beschäftigen möchten, taugt der dazugehörige Wikipedia-Eintrag [4] sicher als Einstieg. Von der Lektüre der RFCs ist allerdings wegen ihrer Staubtrockenheit abzuraten.
Um sich das Leben etwas einfacher zu machen, arbeiten Sie mit einer bestehenden Bibliothek, um die HTTP-Anfragen zu stellen. Zum Installieren der Bibliothek setzen Sie das Tool mpremote [1] ein. Das Kommando pip install --user mpremote bringt das Werkzeug auf Ihr System. Daraufhin installieren Sie die Bibliothek auf dem ESP32:
$ mpremote mip install github:balloob/micropython-http-client/http_client.py
Bitte achten Sie darauf, dass Sie währenddessen keine andere Verbindung (zum Beispiel Thonny IDE und so weiter) zur MicroPython-Konsole geöffnet haben, da es sonst zu Fehlern kommt. Werfen Sie nun einen Blick auf das Beispielprogramm aus Listing 1. In den Zeilen 1 bis 3 werden alle nötigen Bibliotheken importiert. Die Zeilen 5 bis 14 bauen die Verbindung zum WLAN auf. Achten Sie bitte darauf, dass Sie hier Ihre eigenen Zugangsdaten verwenden.
Der eigentliche HTTP-Request wird in Zeile 16 abgesetzt. Zeile 17 zeigt den Body der Response an. Ich finde es spannend, zu sehen, wie viel Code die Google-Entwickler benötigen, um ein Logo und einfaches Textfeld mit Button auf dem Schirm zu zaubern. Was da alles im Hintergrund noch passiert, möchte ich gar nicht so genau wissen.
Mitunter verschluckt sich der ESP32 beim Aufbauen von WLAN-Verbindungen. Wenn Sie auf unerklärliche Fehler stoßen, lassen sie sich oft mithilfe eines Hardware Resets des Controllers beseitigen.
Listing 1
HTTP-Client
import network
import http_client
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())
response=http_client.get('http://www.google.de')
print(response.content)
HTTP-Server
Ein HTTP-Server beantwortet die Anfragen der Clients. Mit der Socket-Bibliothek könnten Sie ihn komplett selbst programmieren. Sie ahnen es jedoch sicher schon: Auch für den HTTP-Server gibt es eine Bibliothek. Die Installation funktioniert ähnlich wie beim Client:
$ mpremote mip install github:troublegum/micropyserver/micropyserver.py
Das Programm aus Listing 2 verbindet sich genau wie das erste Beispiel mit dem WLAN. Danach definieren Sie eine Funktion (Zeile 14), die der Server später aufruft. In ihr befindet sich der Code zum Erzeugen einer HTML-Seite. Der HTTP-Request wird als Parameter übergeben. Damit ist es möglich, Formulardaten zu verarbeiten. Zudem können Sie auf diese Weise eine beliebige Anzahl von Webseiten mit unterschiedlichem Verhalten anlegen.
Im Anschluss erzeugen Sie den konkreten Server. Damit der Server weiß, welche Inhalte er ausliefern soll, gibt sie die Funktion add_route() in der vorletzten Zeile vor. In unserem Fall wird die Funktion home() aufgerufen, sobald eine HTTP-Anfrage auf die Wurzel-URL (/) des Servers ankommt.







