38. Lektion: Webserver: Difference between revisions
| Line 100: | Line 100: | ||
</pre> | </pre> | ||
=== Beispiel=== | |||
<pre> | <pre> | ||
Revision as of 10:33, 7 December 2023
Webserver
Wlan einrichten
import network
# Wlan Verbindung herstellen
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('connecting to network...')
wlan.connect('ssid', 'key')
while not wlan.isconnected():
pass
print('network config:', wlan.ifconfig())
Das Webserver Packet phew
Für den Raspberry Pi Pico W gibt es ein Packet, das alles enthält, was zur Einrichtung eines Webservers auf dem Pico erforderlich ist. Es heißt "phew" und ist von Github unter https://github.com/pimoroni/phew zu beziehen. Das Archiv muss entpackt und dann das Unterverzeichnis "phew" ins Filesystem des Pico kopiert werden.
Der Webserver wird einfach gestartet. Es ist keine großartige Konfiguration erforderlich. Allerdings müssen vorher noch die Webseiten und ihre Routen definiert werden.
from phew import server # hier werden die auszuliefernden Webseiten definiert. Siehe nächste Codebox. server.run()
Webseiten generieren
Eine Webseite wird erstellt indem eine Funktion definiert wird, die den Inhalt des Response zurück gibt. Der Funktion muss request übergeben werden.
Damit der Server diese Funktion als Webseite erkennt muss sie entsprechend kenntlich gemacht werden. Dazu gibt es zwei Möglichkeiten:
Mit Decorator:
@server.route("/random", methods=["GET"])
def random_number(request):
import random
min = int(request.query.get("min", 0))
max = int(request.query.get("max", 100))
return str(random.randint(min, max))
Es muss dem Decorator die Route - die Zeichen, die in der URL hinter der IP-Adresse stehen - und die HTTP-Methode (GET oder POST) ünergeben werden. Die Definition folgt in der nächsten Zeile.
Mit Route-Tabelle:
# Webseiten definieren
def random_number(request):
import random
min = int(request.query.get("min", 0))
max = int(request.query.get("max", 100))
return str(random.randint(min, max))
def info_site(request):
return "<h1>Infoseite vom Raspberry Pi Pico W</h1>"
# Routing Tabelle
server.add_route("/random", random_number, methods=["GET"])
server.add_route("/info", info_site, methods=["GET"])
Response erzeugen
Der Response ist ein String der alle Informationen enthält die an den Client zurückgegeben werden sollen.
Innerhalb der Definition kann alles das gemacht werden, was auch in einer Funktion möglich ist. Der Return-Wert ist der Response. Dieser kann auf unterschiedliche Weise erzeugt werden.
Einfacher Text
In einer Variablen
Aus einer Datei
Wenn die Seite nicht existiert
Der Server gibt üblicherweise die der Route zugeordnete Webseite zurück. Wenn eine Webseite angefordert wird, die nicht existiert, wird die Servermethode catchall() aufgerufen.
@server.catchall()
def catch_all(request):
return "<h1>Hallo, diese Webseite gibt es nicht!</h1>", 404
# oder:
HTDOCS = 'htdocs/'
@server.catchall()
def catch_all(request):
return render_template(HTDOCS + 'error_404.html')
Beispiel
from phew.template import render_template
from os import stat
HTDOCS = 'htdocs/' # Hier ist der "/" wichtig, sonst funktioniert es nicht!
from phew import server
@server.route("/random", methods=["GET"])
def random_number(request):
import random
min = int(request.query.get("min", 0))
max = int(request.query.get("max", 100))
return str(random.randint(min, max))
@server.route("/info", methods=["GET"])
def info_site(request):
return "<h1>Infoseite vom Raspberry Pi Pico W</h1>"
@server.route("/test", methods=["GET"])
def test_site(request):
return render_template(HTDOCS + "html-test_001.html")
# return render_template("html-test_001.html")
# return '''
# <h1>Überschrift</h1>
# Dieses ist eine kleine HTML-Testseite.
# <br>
# Noch ist es nur ein einfacher Test!
# '''
# return render_template("html-test_001.html")
@server.catchall()
def catch_all(request):
return "<h1>Hallo, diese Webseite gibt es nicht!</h1>", 404
# return render_template(HTDOCS + index.html)
Lager
- Webserver
- https://github.com/jczic/MicroWebSrv2
- Raspberry Pi Pico
- MicroWebSrv - geht nicht!
- Andere Links mit Sockets:
- http://www.doctormonk.com/2022/09/a-better-web-server-for-raspberry-pi.html
- https://github.com/miguelgrinberg/microdot
- https://microdot.readthedocs.io/en/latest/intro.html
- https://wellys.com/posts/rp2040_microphyton_webserver/
- https://github.com/miguelgrinberg/microdot
- https://www.rasppishop.de/pico-w-als-webserver
- https://www.elektronik-kompendium.de/sites/raspberry-pi/2707131.htm
- https://www.youtube.com/watch?v=RN2k_0mrKxI
- https://www.youtube.com/watch?v=Me7VM2z3_f8
- https://draeger-it.blog/raspberry-pi-pico-w-programmieren-eines-webservers/
- https://hackaday.io/project/189675-raspberry-pi-pico-w-super-simple-webserver
- https://github.com/sciencedude1990/MicropythonPicoWebServer