Hardware über HTTP ansteuern

Der Raspberry Pi ist auch deshalb ein begehrter Kleincomputer, weil er die Interaktion mit angeschlossener Hardware sehr einfach macht. LEDs, Motoren, Nebelmaschine, Raketentriebwerke: prinzipiell lassen sich z. B. mit Python steuern, starten und regeln.

Ansteuern einer LED mit Python/Flask

Nachdem Sie nun wissen, wie Requests an einen Webserver mit Flask auf dem Raspberry ankommen, fehlt nicht viel, um diese Anfragen für die Interaktion mit angeschlossener Hardware zu nutzen. Dafür wird folgende einfache Schaltung vorgeschlagen:

Ansteuern einer LED mit Flask. Abbildung hergestellt mit fritzing. [Quelle zum Editieren in GitLab](https://collaborating.tuhh.de/itbh/oer/informatik/einfuehrung-in-die-informationstechnik-i-wise-2021_22/-/tree/main/content/de/einheiten/webanwendungen-mit-flask/hardware-schalten).
Ansteuern einer LED mit Flask. Abbildung hergestellt mit fritzing. Quelle zum Editieren in GitLab.

Der Quellcode

Das folgende Beispiel in Python zeigt, wie mithilfe von Flask der GPIO 17 und damit die LED geschaltet werden können, wenn bestimmte Parameter mit dem HTTP-Request zum Server geschickt werden. Das Codebeispiel finden Sie auch in GitLab.

 1#!/usr/bin/env python3
 2
 3# Importieren der notwendigen Module
 4from gpiozero import LED
 5from flask import Flask
 6from flask import request
 7
 8# Definieren einer Variable, die die aktuelle Datei zum Zentrum
 9# der Anwendung macht.
10app = Flask(__name__)
11
12# Definieren einer Variablen mit dem PIN, an den die LED
13# angeschlossen ist.
14# Belegung vgl. https://gpiozero.readthedocs.io/en/stable/recipes.html#pin-numbering
15led = LED(17)
16
17# Festlegen einer Route für die Homepage. Der String in den Klammern
18# bildet das URL-Muster ab, unter dem der folgende Code ausgeführt
19# werden soll. Hier ist es der Slash /, also die oberste Ebene.
20@app.route('/', methods=['GET'])
21def switch():
22    # Zuweisen des Parameters state aus dem Request an eine 
23    # lokale Variable
24    state = request.args.get('state', '')
25    # testweise Ausgabe
26    print(state)
27    # Fallunterscheidung: An oder aus?
28    if state == 'on':
29        # Schalten der LED
30        led.on()
31    elif state == 'off':
32        led.off()
33    else:
34        pass
35    # Mit jedem Request gibt es auch eine Response. Mit dem folgenden
36    # Konstrukt wird das HTML für die Seite an den Browser geschickt.
37    return '<a href="/?state=on">on</a> | <a href="?state=off">off</a>'
38
39if __name__ =='__main__':
40    app.run(host="0.0.0.0", debug=True)

Aufgaben und Fragestellungen

  1. Schließen Sie noch eine zweite LED an einem anderen GPIO an.
  2. Erweitern Sie das Programm so, dass Klicks auf die Links beide LEDs gleichzeitig schalten.
  3. Erweitern Sie das HTML in Z37 so, dass Sie jede LED einzelne schalten können. Die app.py müssen Sie dann ebenfalls verändern.
Zurück
Weiter