4.4.3 Netzwerk-Ein-/Ausgabe (Webserver, HTTP)

Ein- und Ausgabebefehle Beschreibung
recv() Empfängt Daten über das Netzwerk (z.B. von einem Webclient).
send() Sendet Daten über das Netzwerk (z.B. an einen Webclient).

📡 Eingabe und Ausgabe über das Netzwerk

Der Pi Pico kann Daten über das Netzwerk empfangen und senden, wenn er als Webserver oder Client verwendet wird. Dies ermöglicht beispielsweise die Fernsteuerung über einen Webbrowser.

Einfaches Beispiel: Daten über das Netzwerk empfangen und verarbeiten

Hier simulieren wir eine einfache Server-Client-Interaktion, bei der der Pi Pico als Server fungiert und Daten von einem Webclient (Browser) empfängt.

# Webserver zur Steuerung einer LED am Pi Pico
# J. Thomaschewski, 04.09.2024
import network
import socket
import time

# WLAN-Zugangsdaten
SSID = 'Ihr_WLAN_Name'
PASSWORD = 'Ihr_WLAN_Passwort'

# WLAN verbinden
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)

# Warten, bis das WLAN verbunden ist
while not wlan.isconnected():
    print("Verbindung zum WLAN wird hergestellt...")
    time.sleep(1)

print(f"WLAN verbunden: {wlan.ifconfig()}")

# Webserver starten
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
server = socket.socket()
server.bind(addr)
server.listen(1)
print(f"Listening on {addr}")

# Server wartet auf Verbindungen
while True:
    client, client_addr = server.accept()
    print(f"Client verbunden von {client_addr}")

    # Daten vom Client empfangen
    request = client.recv(1024)
    print(f"Request: {request}")

    # Antwort an den Client senden
    response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nHallo von Pi Pico!"
    client.send(response)
    client.close()

In diesem Beispiel fungiert der Pi Pico als einfacher Webserver, der Anfragen von einem Browser entgegennimmt und darauf antwortet. Dies zeigt, wie der Pi Pico Daten aus dem Netzwerk empfangen und verarbeiten kann.

So führen Sie das Beispiel aus

Damit dieses Beispiel funktioniert, muss Ihr Pi Pico W über WLAN verbunden sein. Die einfachste Methode dafür ist es, das eigene Smartphone als WLAN-Hotspot zu verwenden:

Schritt-für-Schritt-Anleitung

  1. Hotspot am Smartphone aktivieren

    • Öffnen Sie die Einstellungen auf Ihrem Smartphone.
    • Suchen Sie den Menüpunkt „Mobiler Hotspot“ oder „Persönlicher Hotspot“.
    • Aktivieren Sie den Hotspot und vergeben Sie einen Netzwerknamen (SSID) und ein sicheres Passwort.
  2. Zugangsdaten im Programm eintragen

    • Ersetzen Sie im Quelltext die Platzhalter:
      SSID = 'Ihr_WLAN_Name'       # z. B. "iPhone von Lisa"
      PASSWORD = 'Ihr_WLAN_Passwort'
      
      durch die tatsächlichen Zugangsdaten Ihres Hotspots.
  3. Programm auf den Pi Pico übertragen

    • Starten Sie Thonny.
    • Verbinden Sie Ihren Pi Pico W mit dem Computer.
    • Übertragen Sie den Code auf den Pico und führen Sie ihn aus.
  4. IP-Adresse merken

    • Sobald die Verbindung erfolgreich ist, gibt das Programm die IP-Adresse Ihres Pi Pico W im Terminal aus:
      WLAN verbunden: ('192.168.123.45', '255.255.255.0', ...)
      
  5. Im Browser auf dem Smartphone aufrufen

    • Öffnen Sie den Webbrowser auf dem Smartphone, das den Hotspot bereitstellt.
    • Geben Sie die angezeigte IP-Adresse in die Adresszeile ein (z. B. http://192.168.123.45).
    • Sie sollten nun die Nachricht „Hallo von Pi Pico!“ im Browser sehen.

Diese Vorgehensweise funktioniert am zuverlässigsten, da sowohl der Pi Pico W als auch das Smartphone im selben Netzwerk sind – ganz ohne WLAN-Router.

Besseres Beispiel: Daten über das Netzwerk empfangen und verarbeiten

# Webserver zur Steuerung einer LED am Pi Pico
# J. Thomaschewski, 04.09.2024
import network
import socket
from machine import Pin

# LED-Pin definieren
led = Pin('LED', Pin.OUT)

# WLAN verbinden
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('WLAN-SSID', 'WLAN-PASSWORD')

# Warten auf die Verbindung
while not wlan.isconnected():
    pass

print('Netzwerkverbindung hergestellt')
print('IP-Adresse:', wlan.ifconfig()[0])

# Server starten
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
server = socket.socket()
server.bind(addr)
server.listen(1)
print(f"Listening on {addr}")

# Server läuft und wartet auf Anfragen
while True:
    client, client_addr = server.accept()
    print(f"Client verbunden von {client_addr}")

    # Anfrage vom Client empfangen
    request = client.recv(1024)
    request = str(request)
    print(f"Request: {request}")

    # LED ein- oder ausschalten basierend auf der Anfrage
    if '/led_on' in request:
        led.on()
        response = "LED ist AN"
    elif '/led_off' in request:
        led.off()
        response = "LED ist AUS"
    else:
        response = "Unbekannter Befehl"

    # Antwort an den Client senden
    client.send("HTTP/1.1 200 OK\r\n")
    client.send("Content-Type: text/html\r\n\r\n")
    client.send("<html><body><h1>{}</h1></body></html>".format(response))
    client.close()

Versuchen Sie das Beispiel zu verstehen

Analysieren Sie den Sourcecode und versuchen Sie das Beispiel zu verstehen, bevor Sie es installieren.