Diesen Sonnabend wollen einen Webserver programmieren. Dieser soll Messwerte von Sensoren als Webseite ausliefern, z.B. vom Feuchtigkeits- und Temperatursensor DHT11. Und über Buttons auf der Webseite sollen Kommandos an den Minicomputer geschickt werden können, zum Beispiel um eine Leuchtdiode an und aus zu schalten.

Wir verwenden dafür wieder den ESP32 mit Micropython. Aber es gibt auch eine Variante, mit der wir das ohne ESP32 direkt auf dem Computer ausprobieren können. Leider ist die Programmierung nur sehr ähnlich aber nicht exakt gleich.

Die Videokonferenz läuft Sonnabends von 9:00 bis 12:00 Uhr: https://meet.b-tu.de/digitech-wsw. Nach dem Mittagessen sind wir nach Absprache vielleicht auch noch aktiv.

Webserver zu Fuß: Lesen und Schreiben über Sockets

Mächtigere Webserver mit Unterstützung

Web-Frameworks (Rahmenwerke) sind spezielle Python Bibliotheken, die uns das Leben viel einfacher machen. Der Unterschied zu normalen Bibliotheken ist, dass wir nicht nur Unterprogramme der Bibliothek aufrufen: Das Framework ruft umgekehrt auch unsere Unterprogramme auf. Zum Beispiel, wenn eine neue Anfrage von einem Webseiten-Besucher empfangen wurde. Daher müssen wir uns nicht um die langweiligen Details kümmern.

ESP32: Picoweb oder MicroWebSrv2

Python auf Raspberry Pi: Flask oder Bottle

Mit der Thonny Entwicklungsumgebung können wir uns auch mit dem python auf einem Raspberry Pi verbinden. Dazu nehmen wird an, dass der Raspberry Pi mit dem WLAN verbunden ist und den Namen „raspberrypi“ hat. Dank mDNS finden wir seine Addresse als „raspberrypi.local“.

Bevor

ssh pi@raspberrypi.local
sudo apt update
sudo apt install python3-pip
pip3 install flask jedi thonny

Dann kann man Thonny auf dem eigenen Rechner starten. Im Menü Extras -> Optionen -> Interpreter wählen. Dort „Remote Python3 (SSH)“ auswählen und Rechnername, Benutzername und Passwort-Modus angeben. Wenn man nun mit dem roten STOP Knopf den Interpreter neu startet, verbindet sich Thonny mit dem Raspberry Pi und fragt nach dem Passwort. Dieses ist „raspberry“ falls man es noch nicht geändert hat.

Leider geht einiges mit Python via SSH nicht so richtig wie erwartet 🙁

Bilder ausliefern mit Picamera und Flask

from flask import Flask, Response
from picamera import PiCamera
from time import sleep
from io import BytesIO

camera = PiCamera(sensor_mode=5)
#camera.framerate = 30
#camera.exposure_mode = 'auto'
#camera.awb_mode = 'auto'

app = Flask(__name__)

def bildgenerator():
    while True:
        my_stream = BytesIO()
        camera.capture(my_stream, 'jpeg')
        yield b'--frame\r\n'
        yield b'Content-Type: image/jpeg\r\n\r\n'
        yield my_stream.getvalue()
        yield b'\r\n'
        # at most 25 fps
        sleep(.04)

@app.route('/bild')
def zeigeBild():
    return Response(
        bildgenerator(),
        mimetype='multipart/x-mixed-replace; boundary=frame')

app.run(host='0.0.0.0', port=5000, debug=False)

Hintergrund: yield in Python

  • python generators: yield, next(), yield from
Kategorien: DigitaltechnikTechnik