🛠 Servir une page web depuis la Pico W (socket TCP + HTTP)
Objetivos
Una vez conectada al Wi-Fi (tuto de conexión), la Pico W es un nodo de red completo: sabe escuchar un puerto TCP y responder en HTTP. Vas a escribir un mini-servidor web con el módulo socket de MicroPython — el mismo principio que el ejemplo oficial picow_httpd del repositorio pico-examples (carpeta pico_w/wifi/), pero mucho más corto. La página mostrada podrá incluir más adelante botones para controlar GPIOs: es la base de cualquier interfaz de control embebida.
Material
- 1 × Raspberry Pi Pico W + firmware MicroPython
_picow - Red Wi-Fi 2,4 GHz (la tarjeta debe ser accesible desde tu PC)
- Consola serie a 115200 baudios (para leer la IP al iniciar)
- Un navegador web en la misma red
Código completo
# webserver.py — mini serveur HTTP sur la Pico W (MicroPython)
import machine, network, socket, time
def do_connect:
wlan = network.WLAN
wlan.active(True)
if not wlan.isconnected:
wlan.connect('my_ssid', 'my_password')
while not wlan.isconnected:
machine.idle
print('IP :', wlan.ipconfig('addr4'))
do_connect
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket
s.bind(addr)
s.listen(1)
print('ecoute sur port 80')
while True:
cl, remote = s.accept
req = cl.recv(100) # lit la requête HTTP
print('recu:', req[:40])
page = (b'HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n'
b'<h1>Bonjour depuis ma Pico W</h1>'
b'<p>Rafrichis-moi !</p>')
cl.write(page)
cl.close
Verificación esperada
La consola serie muestra la IP (por ejemplo, 192.168.1.42). Al apuntar el navegador a http://192.168.1.42/, la página se muestra y cada recarga hace que la solicitud recibida aparezca en la consola. El CYW43439 también puede funcionar como punto de acceso (SoftAP) con hasta 4 clientes — en este modo, es la propia Pico W la que distribuye la red (límite documentado del chip).
Errores frecuentes
- El navegador está en una red diferente (4G, VLAN de invitados): la tarjeta debe ser accesible en la misma LAN; verifica el ping antes de buscar un error.
- Bucle bloqueante
accept: solo una conexión a la vez; si un cliente mantiene la conexión abierta (algunos navegadores hacen pre-conexiones), los siguientes esperan — añade uncl.settimeouto atiende rápido y cierra correctamente. - Olvidar los
\r\nen la cabecera HTTP: el navegador muestra texto sin formato o entra en bucle; el separador de cabeceras es obligatorio. recv(100)y luego procesar toda la solicitud: suficiente para un GET simple, pero no cuentes con servir archivos así — lee la solicitud hasta los dobles\r\n\r\n.- Firewall del PC que bloquea, o router con aislamiento de clientes (AP isolation): dos causas clásicas de «IP no alcanzable por ping».
- Nada funciona en modo SoftAP: el CYW43439 limita el número de clientes (4) y tu PC debe estar conectado a la red emitida por la tarjeta.
Otros tutoriales para esta placa
- Faire clignoter la LED embarquée (elle est derrière la puce Wi-Fi !)
- Se connecter à un réseau Wi-Fi (station, WPA2/WPA3)
- Bouton et potentiomètre sans marcher sur le sans-fil (GPIO libres & ADC)
- Client HTTP : consommer une API depuis la Pico W
- Heure exacte via NTP : l'horloge temps réel des projets connectés
- Client MQTT : télémétrie IoT légère sur la Pico W
Ejemplos de código para esta placa
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython