serveur-web-led.py

Raspberry Pi Pico 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 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()

← Retour à la fiche