🛠 Point d'accès & provisioning Wi-Fi par navigateur (mode SoftAP)

Raspberry Pi Pico W · avance · Schéma : IMG-pico-w-avance-3-picow-softap-provisioning.svg — Pico W emettant son propre reseau Wi-Fi, smartphone connecte a ce reseau affichant le formulaire de configuration, puis fleche de bascule vers le reseau domestique, zone keep-out antenne respectee par le boitier

Objetivos

¿Cómo desplegar 50 Pico W en casas de personas que no leen los registros serie? La respuesta oficial: el provisionamiento mediante navegador, ejemplo destacado de pico_w/wifi/ en pico-examples (punto de acceso + página web de configuración). El principio: la tarjeta emite su propia red (el CYW43439 acepta un SoftAP con hasta 4 clientes), el usuario se conecta desde su teléfono, introduce las credenciales de la red objetivo en un formulario servido por la tarjeta, y luego la tarjeta cambia al modo estación. Construirás la misma secuencia en MicroPython con network.WLAN(network.WLAN.IF_AP).

Material

Código completo

# provisioning.py — SoftAP + formulaire + bascule station (MicroPython)
import machine, network, socket, time

FORM = (b'HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n'
        b'<form method=POST>SSID<input name=s><br>'
        b'<input name=p type=password><br>'
        b'<button>Go</button></form>')

def parse_form(req):
    kv = req.split(b'\r\n\r\n', 1)[-1].decode.split('&')
    d = dict(x.split('=', 1) for x in kv if '=' in x)
    return d.get('s', ''), d.get('p', '')

ap = network.WLAN(network.WLAN.IF_AP)   # mode point d'accès (max 4 clients)
ap.ifconfig = ('192.168.4.1', '255.255.255.0', '192.168.4.1', '8.8.8.8')
ap.config(ssid='PICO-SETUP', key='provision123')   # WPA2, canal par défaut
ap.active(True)
print('reseau PICO-SETUP emis sur 192.168.4.1')

srv = socket.socket
srv.bind(socket.getaddrinfo('192.168.4.1', 80)[0][-1])
srv.listen(1)
srv.settimeout(120)                      # fenêtre de config de 2 minutes
try:
    cl, _ = srv.accept
    req = cl.recv(1024)
    if b'POST' in req:
        ssid, pwd = parse_form(req)
        cl.write(b'HTTP/1.0 200 OK\r\n\r\nConfig ok, au revoir')
        cl.close
        ap.active(False)                 # coupe le SoftAP
        sta = network.WLAN             # retour en station
        sta.active(True)
        sta.connect(ssid.replace('%20', ' '), pwd.replace('%20', ' '))
        for _ in range(60):
            if sta.isconnected: break
            machine.idle
        print('IP finale :', sta.ipconfig('addr4'))
finally:
    srv.close

Verificación esperada

En el primer arranque sin configuración conocida, la red PICO-SETUP aparece en el teléfono; una vez enviado el formulario, la tarjeta emite el mensaje de éxito, cierra el SoftAP y se une a la red doméstica — la IP final se muestra una vez conectada. Es exactamente el flujo del ejemplo oficial en C (que, por su parte, sirve una página real con listas de redes escaneadas).

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales