serveur-web-led.py

Raspberry Pi Pico 2 W · Fichier : serveur-web-led.py · Langage : Python · Usage : Allumer une LED depuis une page web servie par la carte

La carte se connecte au Wi-Fi et devient un serveur web minimal : une page servie en HTTP brut affiche l'état de la LED et deux liens pour la commander depuis n'importe quel appareil du réseau local.

Matériel requis

Une Raspberry Pi Pico 2 W (RP2350 + radio Wi-Fi 2,4 GHz) avec MicroPython installé, alimentée par USB. Un réseau Wi-Fi 2,4 GHz ; LED externe + résistance 330 Ω.

Câblage

LED sur GP15 via 330 Ω vers GND. La LED utilisateur est portée par la puce radio : utiliser une LED externe.

Fonctionnement

network.WLAN(sta) associe la carte au point d'accès ; socket bind/listen/accept attend les requêtes HTTP. L'URL demandée (/on, /off) pilote la broche, la réponse HTML est renvoyée immédiatement.

Exécution

Installer le MicroPython « Pico 2 W » (BOOTSEL + .uf2), copier le script via Thonny. Comme sur la Pico W, la LED utilisateur n'est pas sur un GPIO : utiliser une LED externe pour les sorties.

Variantes

Ajouter un relevé de capteur dans la page (température interne), ou servir plusieurs broches avec /broche/etat.

serveur-web-led.py

# Mini serveur web MicroPython : la page affiche l'etat de la LED
# et propose des liens /on et /off. Aucune bibliotheque externe.
import network
import socket
import time
from machine import Pin

WIFI_SSID = "votre-ssid"
WIFI_PASS = "votre-cle"

led = Pin(15, Pin.OUT)   # LED externe sur GP15

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WIFI_SSID, WIFI_PASS)
for _ in range(40):
    if wlan.isconnected():
        break
    time.sleep_ms(500)
print("Adresse IP :", wlan.ifconfig()[0])

serveur = socket.socket()
serveur.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
serveur.bind(("0.0.0.0", 80))
serveur.listen(2)
print("Serveur pret sur le port 80")

while True:
    client, adresse = serveur.accept()
    requete = client.recv(200).decode("utf-8", "ignore")
    if "GET /on" in requete:
        led.value(1)
    elif "GET /off" in requete:
        led.value(0)
    etat = "ALLUMEE" if led.value() else "ETEINTE"
    page = ("<h1>LED " + etat + "</h1>"
            "<a href='/on'>Allumer</a> | <a href='/off'>Eteindre</a>")
    reponse = ("HTTP/1.0 200 OK
Content-Type: text/html

" + page)
    client.send(reponse.encode())
    client.close()

← Retour à la fiche