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)
0 Kommentare