Raspberry Pi Pico W als Webserver

Mit seiner WLAN-Unterstützung ist ein Raspberry Pi Pico W nicht nur als Client, sondern auch als Webserver in einem WLAN geeignet. Ein Webserver kann im Netzwerk auf Anfragen Daten zurücksenden. Und dabei hat ein Raspberry Pi Pico W einiges an Daten zu bieten. Beispielsweise die Zustände von GPIO-Eingängen und -Ausgängen, sowie digitale Werte an den ADC-Eingängen.

Bevor wir uns um den Programmcode für den Webserver kümmern, müssen wir noch die Entscheidung treffen, ob der Raspberry Pi Pico W als WLAN-Client in einem vorhandenen WLAN verbunden und erreichbar sein soll, oder ob er als eigenständiger WLAN Access Point betrieben werden soll.

Hinweis: Diese Webserver-Lösung ist kein vollständiger Webserver. Dafür ist der Programmcode nicht gemacht und auch nicht gedacht. Wer einen vollwertigen Webserver braucht, der sollte einen Mini-Computer, wie den Raspberry Pi mit Raspberry Pi OS, verwenden.

Raspberry Pi Pico W als WLAN-Client

Damit der Raspberry Pi Pico W als WLAN-Client dienen kann, muss er im Programmcode mit einem vorhandenen WLAN verbunden werden. Die Verbindung zum Webserver des Picos muss dann von einem anderen Client im selben Netzwerk erfolgen. Hierzu braucht man die IPv4-Adresse des Picos, die man in die Browser-Adresszeile eingeben muss.

Raspberry Pi Pico W als WLAN Access Point

Eine Alternative zum Betrieb als WLAN-Client ist der Betrieb als WLAN Access Point für ein eigenständiges WLAN. Der Nachteil hierbei ist, dass man sich mit einem anderen WLAN-Client zuerst mit dem Pico-WLAN verbinden und dann in der Browser-Adresszeile die IPv4-Adresse des Picos eingeben muss.

Programmcode für den Webserver

Der folgende Programmcode ist ohne Netzwerk-Verbindung nicht lauffähig. Da der Funk-Chip vom Mikrocontroller-Chip unabhängig ist, reicht es aber aus, vor diesem Programmcode einen Programmcode aufzurufen, der eine Verbindung zum WLAN herstellt oder einen WLAN-Access-Point erstellt.

# Bibliotheken laden
import socket
import utime as time

# HTML
html = """<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="shortcut icon" href="data:"><title>Raspberry Pi Pico</title></head><body><h1 align="center">Raspberry Pi Pico W</h1><p align="center">Verbindung mit %s</p></body></html>"""

# HTTP-Server starten
print('Server starten')
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
server = socket.socket()
server.bind(addr)
server.listen(1)
print('Server hört auf', addr)
print()
print('Beenden mit STRG + C')
print()

# Auf eingehende Verbindungen hören
while True:
    try:
        conn, addr = server.accept()
        print('HTTP-Request von Client', addr)
        request = conn.recv(1024)
        # HTTP-Request anzeigen
        print('Request:', request)
        # HTTP-Response senden
        response = html % str(addr)
        conn.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
        conn.send(response)
        conn.close()
        print('HTTP-Response gesendet')
        print()
    except OSError as e:
        break
    except (KeyboardInterrupt):
        break

try: conn.close()
except NameError: pass
server.close()
print('Server beendet')

Hinweis: Diese Webserver-Lösung kann nur eine Webseite ausliefern. Es handelt sich dabei um ein Demo und nicht mehr. Für einen konkreten Anwendungsfall sind gegebenenfalls Anpassungen und Erweiterungen notwendig.

Troubleshooting

Folgende oder eine ähnliche Fehlermeldung erscheint in der Kommandozeile:

Traceback (most recent call last):
File "<stdin>", line 57, in <module>
OSError: [Errno 98] EADDRINUSE

Was ist das Problem? Wenn sich in der genannten Zeile (line) das Kommando „server.bind(addr)“ befindet, dann könnte das daran liegen, dass man vorher einen Programmcode ausgeführt hat, der irgendwie noch aktiv im Speicher ist und die Ausführung dieses Programmcodes blockiert.
Man kann das dadurch lösen, in dem man die WLAN-Verbindung trennt, neu herstellt und anschließend den Programmcode erneut ausführt.

Webserver prüfen

  1. Raspberry Pi Pico W als WLAN-Client: Ob der Webserver auf dem Pico läuft und erreichbar ist, erfährt man, wenn man die IPv4-Adresse des Picos, die er beim WLAN-Verbindungsaufbau bekommen hat, in die Browser-Adresszeile eingibt.
  2. Raspberry Pi Pico W als WAP: Zuerst muss man sich mit dem WLAN des Picos verbinden und danach die IPv4-Adresse 192.168.4.1 (Standard) in die Browser-Adresszeile eingeben.

Stromsparmodus abschalten (im WLAN-Client-Betrieb)

Standardmäßig schaltet sich der Funk-Chip automatisch in den Stromsparmodus, wenn er nichts zu tun hat (Idle). Im Client-Betrieb ist das in Ordnung. Er kann dann aber keine eingehenden Verbindungen annehmen, was als Server aber notwendig wäre. Wenn der Pico als Server im WLAN nicht erreichbar ist, dann sollte man den Stromsparmodus abschalten.
Der Programmcode sollte bei der WLAN-Konfiguration noch folgende Angabe haben

wlan.config(pm = 0xa11140)

Hinweis: Wenn der Stromsparmodus ausgeschaltet ist, dann sollte dabei berücksichtigt werden, dass der Stromverbrauch über die Zeit erheblich größer sein wird. Unter Umständen schließt das einen Batterie-Betrieb aus.

Pro und Contra

Sollte man einen Raspberry Pi Pico W als Webserver verwenden? Und wenn ja, was sind die Vorteile oder Nachteile?

Nachteile

  • Der hier implementierte Webserver ist natürlich kein richtiger Webserver, sondern nur eine extrem abgespeckte Minimal-Version. Selbst wenn man eine andere Implementierung wählen würde, würde das nichts daran ändern. Wer einen richtigen Webserver braucht, der sollte zumindest einen Mini-Computer mit einem Linux-Betriebssystem verwenden.
  • Maßgeblich sind die Anforderungen im praktischen Einsatz. Nur weil es geht, heißt das nicht, dass es dann auch sinnvoll ist.
  • Professionellen Ansprüchen obliegt diese Lösung mit diesem Programmcode nicht. Insbesondere aus Sicherheitsgründen sollte diese Lösung nur in unbedenklichen Umgebungen verwendet werden. Also in einem Demo-Netz oder in einem privaten WLAN, was keinem typischen Angriffsziel entspricht.
  • Desweiteren verzichtet diese Lösung auf Sicherheitsmerkmale einer TLS-Verbindung (HTTPS). Einfach um die Komplexität zu reduzieren und weitere Fehlerquellen zu vermeiden.

Vorteile

  • Wenn man von einem Raspberry Pi Pico Daten übers Netzwerk anfordern möchte (Zustände, Werte, etc.) dann besteht immer auch die Frage, welche Voraussetzungen zur Anforderung und Darstellung hat die Gegenstelle. Was fast immer vorhanden ist, ist ein Webbrowser. Egal ob Smartphone, Tablet oder Desktop-System. Das ist in jedem Betriebssystem integriert. Und das kann auch jeder bedienen.
  • Da bietet es sich natürlich an, dass ein Pico auf der anderen Seite eine Webserver-Implementierung aufweist, die Daten an einen Webbrowser schicken kann.
  • Die Implementierung eines Webservers auf einem Raspberry Pi Pico ist der kleinste Aufwand, um eine Kommunikation zwischen zwei oder auch mehr Geräten zu ermöglichen.

Darf es ein bisschen mehr sein?

Ja, jetzt ist Dein Raspberry Pi Pico W als Webserver in Deinem WLAN erreichbar. Aber was können wir damit machen? Wie wäre es, wenn wir über den Webserver auf dem Pico die Onboard-LED ein- und ausschalten?

Weitere verwandte Themen:

Teilen:

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

Das "Elektronik-Set Pico Edition" ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.

  • LED: Einschalten, ausschalten, blinken und Helligkeit steuern
  • Taster: Entprellen und Zustände anzeigen
  • LED mit Taster einschalten und ausschalten
  • Ampel- und Lauflicht-Steuerung
  • Elektronischer Würfel
  • Eigene Steuerungen programmieren

Online-Workshop Mehr Informationen Elektronik-Set jetzt bestellen

Programmieren mit dem Raspberry Pi Pico
Online-Workshop

Programmieren mit dem Raspberry Pi Pico

Online-Workshop mit einer Einführung ins Physical Computing mit Leuchtdioden, Taster und Temperatursensor.

  • Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython ohne Vorkenntnisse
  • Optimaler Einstieg, um eigene Ideen zu verwirklichen und Steuerungen zu programmieren
  • Inklusive Elektronik-Set mit einem Raspberry Pi Pico, Zubehör und elektronischen Bauteilen

Für Ihre Fragen zu unseren Online-Workshops mit dem Raspberry Pi Pico besuchen Sie unseren PicoTalk (Online-Meeting). (Headset empfohlen)

Zum PicoTalk Mehr Informationen Am Online-Workshop teilnehmen

Elektronik-Set Pico Edition
Elektronik-Set Pico Edition

Hardware-nahes Programmieren mit dem Raspberry Pi Pico

Das "Elektronik-Set Pico Edition" ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.

  • LED: Einschalten, ausschalten, blinken und Helligkeit steuern
  • Taster: Entprellen und Zustände anzeigen
  • LED mit Taster einschalten und ausschalten
  • Ampel- und Lauflicht-Steuerung
  • Elektronischer Würfel
  • Eigene Steuerungen programmieren

Online-Workshop Mehr Informationen Elektronik-Set jetzt bestellen