serveur-web-led.py

Raspberry Pi Pico W · Archivo : serveur-web-led.py · Lenguaje : Python · Uso : Allumer une LED depuis une page web servie par la carte

La placa se conecta al Wi-Fi y se convierte en un servidor web mínimo: una página servida en HTTP crudo muestra el estado del LED y dos enlaces para controlarlo desde cualquier aparato de la red local.

Hardware

Una Raspberry Pi Pico W (RP2040 + chip radio Wi-Fi de 2,4 GHz) con MicroPython instalado, alimentada por USB. Una red Wi-Fi de 2,4 GHz; LED externo + resistencia de 330 Ω.

Cableado

LED a GP15 mediante 330 Ω a GND. El LED de usuario está en el chip de radio: usa un LED externo.

Funcionamiento

network.WLAN(sta) asocia la placa al punto de acceso; socket bind/listen/accept espera las peticiones HTTP. La URL pedida (/on, /off) controla el pin y la respuesta HTML se devuelve al instante.

Ejecución

Instala la versión MicroPython « Pico W » (BOOTSEL + .uf2) y copia el script vía Thonny. Como el LED de usuario lo gestiona el chip de radio, los ejemplos de salida usan un LED externo.

Variantes

Añade una lectura de sensor a la página (temperatura interna), o sirve varios pines como /pin/estado.

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()

← Volver a la ficha