🛠 Servir une page web depuis la Pico W (socket TCP + HTTP)
Objectifs
Une fois connectée au Wi-Fi (tuto connexion), la Pico W est un nœud réseau complet : elle sait écouter un port TCP et répondre en HTTP. Tu vas écrire un mini-serveur web avec le module socket de MicroPython — le même principe que l'exemple officiel picow_httpd du dépôt pico-examples (dossier pico_w/wifi/), en beaucoup plus court. La page affichée pourra plus tard porter des boutons pour piloter des GPIO : c'est la base de toute interface de contrôle embarquée.
Matériel
- 1 × Raspberry Pi Pico W + firmware MicroPython
_picow - Réseau Wi-Fi 2,4 GHz (la carte doit être joignable depuis ton PC)
- Console série 115200 bauds (pour lire l'IP au démarrage)
- Un navigateur web sur le même réseau
Code complet
# 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
Vérification attendue
La console série affiche l'IP (par ex. 192.168.1.42). En pointant le navigateur sur http://192.168.1.42/, la page s'affiche et chaque rechargement fait défiler la requête reçue dans la console. Le CYW43439 peut aussi servir de point d'accès (SoftAP) jusqu'à 4 clients — dans ce mode, c'est la Pico W elle-même qui distribue le réseau (limite documentée de la puce).
Erreurs fréquentes
- Le navigateur tourne sur un réseau différent (4G, VLAN invités) : la carte doit être joignable sur le même LAN ; vérifie le ping avant de chercher un bug.
- Boucle bloquante
accept: une seule connexion à la fois ; si un client garde la connexion ouverte (certains navigateurs en préconnexion), les suivants attendent — ajoute uncl.settimeoutou sers vite et ferme proprement. - Oublier les
\r\ndans l'en-tête HTTP : le navigateur affiche du texte brut ou tourne en rond ; le séparateur d'en-têtes est obligatoire. recv(100)puis traitement complet de la requête : suffisant pour un GET simple, mais ne compte pas servir des fichiers avec ça — lis la requête jusqu'aux doubles\r\n\r\n.- Firewall du PC qui bloque, ou routeur avec isolation client (AP isolation) : deux causes classiques d'« IP ping-injoignable ».
- Rien ne passe en SoftAP : le CYW43439 limite le nombre de clients (4) et ton PC doit être connecté sur le réseau émis par la carte.
Autres tutoriels pour cette carte
- 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
Exemples de code pour cette carte
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython