web_led.py

Raspberry Pi 4 Model B (2019) — Board Sheet · File : web_led.py · Language : Python · Use case : Commander une sortie GPIO depuis une page web locale (démon, contrôle simple)

A minimal Flask server exposes /on and /off to drive an LED on GPIO17 from any LAN browser. With the board on Wi-Fi (USB-C 5 V/3 A obligatoire pour les deux ports USB 3 ; Wi-Fi 5 GHz, BT 5.0), grab the IP with hostname -I. It listens on 0.0.0.0:8000; never expose the board to the Internet.

Hardware

A Raspberry Pi 4 Model B (quad-core BCM2711 at 1.5 GHz, USB-C 5 V/3 A, dual micro-HDMI, 5 GHz Wi-Fi, 40-pin GPIO). LED + 330-ohm resistor, local network (Ethernet, Wi-Fi or USB dongle per model).

Wiring

LED on GPIO17 (pin 11) with resistor to GND. Nothing else but networking.

How it works

Each URL is a Flask route: the view calls led.on/off then re-renders with led.value. The single-thread server is fine for a demo.

Running it

Copy the script to the board (scp), then run it with python3 (or bash). Raspberry Pi OS Bookworm ships gpiozero; otherwise sudo apt install python3-gpiozero. Use a 5 V/3 A USB-C supply to avoid undervoltage throttling.

Variants

Radio buttons for several GPIOs; systemd unit as a service; add flask-login before any network exposure. Use the official 5 V/3 A USB-C supply: otherwise the USB 3 ports are throttled.

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)

← Back to the board