web_led.py
Un serveur Flask minimal expose /on et /off pour piloter une LED sur GPIO17 depuis n'importe quel navigateur du réseau local. La carte étant en Wi-Fi (puce I/O RP1, USB-C 5 V/5 A (27 W), deux ports CSI, connecteur JST pour caméra/ventilateur), l'IP se récupère avec hostname -I. Écouter sur 0.0.0.0:8000, jamais exposer la carte sur Internet.
Matériel requis
Une Raspberry Pi 5 (BCM2712 quad-core 2,4 GHz, puce I/O RP1, GPIO 40 broches, alimentation USB-C 5 V/5 A recommandée, deux ports caméra CSI). LED + résistance 330 ohms, réseau local (Ethernet, Wi-Fi ou clé USB selon le modèle).
Câblage
LED sur GPIO17 (broche 11) avec résistance vers GND. Rien d'autre que le réseau.
Fonctionnement
Chaque URL est une route Flask : la vue appelle led.on/off puis régénère la page avec l'état lu via led.value. Le serveur tourne en single-thread, suffisant pour un démon.
Exécution
Copiez le script sur la carte (scp), puis lancez-le avec python3. Sous Bookworm, gpiozero 2.x pilote les broches via la puce RP1 ; gardez gpiozero et python3-rpi.gpio à jour (sudo apt full-upgrade). Alimentation 5 V/5 A conseillée.
Variantes
Boutons radio pour plusieurs GPIO ; systemd pour un service ; mot de passe via flask-login avant toute exposition réseau. Alimentation 27 W (5 V/5 A) recommandée ; sans elle, l'USB se limite à 600 mA au total.
web_led.py
# web_led.py — page web locale pour allumer/eteindre une LED (Flask).
# Deps: sudo apt install python3-flask python3-gpiozero
from flask import Flask
from gpiozero import LED
app = Flask(__name__)
led = LED(17)
@app.route("/")
def index():
etat = "allumee" if led.value else "eteinte"
return (f"<h1>LED {etat}</h1>"
'<p><a href="/on">Allumer</a> | <a href="/off">Eteindre</a></p>')
@app.route("/on")
def on():
led.on()
return index()
@app.route("/off")
def off():
led.off()
return index()
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000)