Flask auf Raspberry Pi
Webkommunikation mit Flask auf Raspberry Pi Zero
Was ist Flask?
Flask ist ein minimalistisches Python-Webframework, das sich ideal für kleine Projekte und IoT-Anwendungen eignet. Es funktioniert so:
Grundprinzip: 1. Routing: URL-Pfade werden Python-Funktionen zugeordnet 2. Templates: HTML-Dateien werden dynamisch generiert 3. Request-Handling: Verarbeitung von GET/POST-Requests 4. REST-API: Daten können im JSON-Format ausgetauscht werden
Installation auf Raspberry Pi
So installierst du Flask auf dem Raspberry Pi Zero:
# Aktualisiere das System sudo apt update && sudo apt upgrade -y # Installiere Python und Pip sudo apt install python3 python3-pip -y # Installiere Flask pip3 install flask # Firewall für Port 5000 freigeben (optional) sudo ufw allow 5000
Beispielprojekt: Webinterface
Eine vollständige Anwendung mit Buttons, Slidern und Live-Daten:
HTML/JavaScript (templates/index.html):
<!DOCTYPE html> <html> <head> <title>Pi Control</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body> <button onclick="send(1)">Btn1</button> <button onclick="send(2)">Btn2</button> <button onclick="send(3)">Btn3</button> <button onclick="send(4)">Btn4</button> <input type="text" id="textInput"> <button onclick="sendText()">Senden</button> <input type="range" min="-100" max="100" value="0" id="slider" oninput="updateSlider(this.value)"> <span id="sliderValue">0%</span> <div id="response"> {% for msg in messages %} <p>{{ msg }}</p> {% endfor %} </div> <script> function send(btn) { $.get('/button?nr=' + btn); } function sendText() { $.post('/text', {text: $('#textInput').val()}); } function updateSlider(val) { $('#sliderValue').text(val + '%'); $.post('/slider', {value: val}); } </script> </body> </html>
Python-Code (app.py):
from flask import Flask, render_template, request, jsonify app = Flask(__name__) messages = [] @app.route('/') def index(): return render_template('index.html', messages=messages) @app.route('/button') def handle_button(): btn_nr = request.args.get('nr') messages.append(f"Button {btn_nr} gedrückt") return jsonify(status="ok") @app.route('/text', methods=['POST']) def handle_text(): text = request.form['text'] messages.append(f"Text: {text}") return jsonify(status="ok") @app.route('/slider', methods=['POST']) def handle_slider(): value = request.form['value'] messages.append(f"Slider: {value}%") return jsonify(status="ok") if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
Starten der Anwendung
# Dateistruktur erstellen mkdir -p ~/flask-app/templates # HTML- und Python-Dateien in die Ordner kopieren # Anwendung starten python3 app.py # Im Browser öffnen: # http://[PI-IP]:5000
Wichtige Tipps
- Verwende
host='0.0.0.0'
für Netzwerkzugriff - Für Produktivbetrieb
debug=False
setzen - Bei Problemen Firewall-Einstellungen prüfen
- Für Auto-Start: Systemd-Service einrichten