web_led.py

Raspberry Pi Model B (Rev 1, 2012) — Fiche carte · Fichier : web_led.py · Langage : Python · Usage : Commander une sortie GPIO depuis une page web locale (démon, contrôle simple)

Un serveur Flask minimal expose /on et /off pour piloter une LED sur GPIO17 depuis n'importe quel navigateur du réseau local. Sans Wi-Fi intégré, la connexion passe par Ethernet ou clé USB, avec une alimentation soignée. Écouter sur 0.0.0.0:8000, jamais exposer la carte sur Internet.

Matériel requis

Une Raspberry Pi Model B révision 1 (BCM2835, connecteur GPIO 26 broches, ports traversants d'origine, pas de connecteur P1 standard 40 broches). 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 ou clé USB), puis lancez-le avec python3 (ou bash). Ces cartes tournent souvent sous une ancienne Raspbian : gpiozero reste installable par apt. Les broches GPIO suivent le connecteur 26 broches du schéma officiel.

Variantes

Boutons radio pour plusieurs GPIO ; systemd pour un service ; mot de passe via flask-login avant toute exposition réseau. Révision 1 très modeste (256 Mo) : restez léger côté périphériques et vérifiez la tension d'alimentation.

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)

← Retour à la fiche