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 W (RP2040 + puce 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 W » (BOOTSEL + .uf2), copier le script via Thonny. La LED utilisateur étant portée par la puce radio, les exemples de sortie utilisent une LED externe.
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()