serveur-web-led.py
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()