Raspberry Pi Pico W – Wie installier ich einen Webserver mit Webseite?

von Eric-Oliver Mächler | Mai 27, 2024 | Allgemein | 0 Kommentare

Schlagwörter: Raspberry Pi

Wenn man ein Projekt mit Elektronik umsetzen muss, dann muss man nicht immer einen grossen Raspberry Pi 4 oder 5 einsetzen. So ein Gerät ist dann oft einfach zu gross oder zu Energiefressend. Meistens reicht es dann auch dass man einfach so ein kleines Pico einsetzt und davon gibt es ja 2 Versionen – einmal mit und einmal ohne Wlan Chip.

Heute zeige ich euch wie ihr auf einem Raspberry Pico W mit Micropython euch einen kleinen Webserver programmieren könnt und wie ihr da auch 2 Unterseiten einbauen könnt.

Mit diesem Server habt ihr jetzt die Möglichkeit dass ihr Geräte / Sensoren die an euer Pico W angeschlossen sind, direkt zu steuern.

Eine sehr praktische Sache also für Menus und Sensordaten Ausgaben.

Video

Micropython / Python

import network
import usocket as socket
import utime as time

WLAN_SSID = "XXX"
WLAN_PASSWORD = "YYYYY"

# WLAN-Verbindung einrichten
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WLAN_SSID, WLAN_PASSWORD)

# Warten, bis die Verbindung hergestellt ist
while not wlan.isconnected():
    pass

# IP-Adresse des Raspberry Pi Pico anzeigen
print("Verbunden mit WLAN. IP-Adresse:", wlan.ifconfig()[0])

# HTML-Inhalte für die verschiedenen Seiten
html = {
    "/": """
        <h1>Willkommen auf der Startseite!</h1>
        <a href="/page1">Seite 1</a><br>
        <a href="/page2">Seite 2</a>
    """,
    "/page1": """
        <h1>Dies ist Seite 1</h1>
        <a href="/">Zurück zur Startseite</a><br>
        <a href="/page2">Seite 2</a>
    """,
    "/page2": """
        <h1>Dies ist Seite 2</h1>
        <a href="/">Zurück zur Startseite</a><br>
        <a href="/page1">Seite 1</a>
    """
}

# Funktion zum Senden von HTTP-Antworten
def send_response(conn, content):
    response = "HTTP/1.0 200 OK\r\nContent-Type: text/html; charset=utf-8\r\n\r\n" + content
    conn.send(response)

# Funktion zum Verarbeiten eingehender Verbindungen
def handle_connection(conn):
    start_time = time.ticks_ms()  # Startzeit für die Verarbeitung der Anfrage
    request = conn.recv(1024).decode()
    print("Request:", request)

    # Extrahieren des Pfads aus der Anforderung
    path = request.split()[1]

    # Senden der entsprechenden Seite, falls vorhanden, sonst 404
    if path in html:
        send_response(conn, html[path])
    else:
        send_response(conn, "<h1>404 Not Found</h1>")

    conn.close()

    end_time = time.ticks_ms()  # Endzeit nachdem die Antwort gesendet wurde
    processing_time = time.ticks_diff(end_time, start_time)  # Gesamtverarbeitungszeit berechnen
    print("Request processed in:", processing_time, "ms")

# Webserver starten
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('', 80))
server.listen(5)

print("Webserver gestartet.")

# Auf eingehende Verbindungen warten und diese bearbeiten
while True:
    conn, addr = server.accept()
    print("Verbunden mit", addr)
    handle_connection(conn)

Da bei Divi 5 das Kommentar Modul einen Bug hat, habe ich diese Funktion deaktiviert. Es tut mir leid.

Wer gerne einen Kommentar hinterlassen möchte, der muss zur Zeit ausweichen auf Instagram oder LinkedIn. Jeder Beitrag wird dort auch veröffentlicht. Oder ihr schreibt mir eine eMail