🛠 Point d'accès & provisioning Wi-Fi par navigateur (mode SoftAP)
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
- 1 × Raspberry Pi Pico W + firmware MicroPython
_picow(alimentada por batería o USB autónomo) - Un smartphone
- Caja no metálica o ventana con zona despejada sobre el área de la antena (zona de exclusión de 14 × 9 mm — la hoja de datos prohíbe el metal encima)
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
- Olvidar desactivar el AP después del provisionamiento: la tarjeta permanece en modo mixto y consume las plazas de cliente (4 máx.) — cambio limpio AP off / STA on.
- Caracteres codificados en URL en la contraseña (
%20,%26…): un formulario HTML lo codifica todo — decodifica antes deconnect, si no, falla la asociación de forma incomprensible. - Caja metálica o Pico W colocada debajo de un router: la antena PCB necesita su zona de exclusión despejada; el metal cercano degrada la ganancia y el ancho de banda (documentado).
- Falta de persistencia: este script reinicia el provisionamiento en cada arranque — en producción, guarda las credenciales en un archivo flash y solo inicia el AP si el connect de estación falla.
- Forzar al teléfono a permanecer en la red de la tarjeta: algunos sistemas operativos cambian automáticamente a la red Wi-Fi con Internet en cuanto PICO-SETUP no tiene puerta de enlace — avisa en la interfaz de usuario o utiliza un portal cautivo.
- En el SDK de C, el mismo flujo se apoya en el escaneo (
cyw43_wifi_scan_results) para listar las redes — el ejemplo oficial de provisionamiento AP es el punto de partida recomendado.
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)
- Servir une page web depuis la Pico W (socket TCP + HTTP)
- Client HTTP : consommer une API depuis la Pico W
- Heure exacte via NTP : l'horloge temps réel des projets connectés
Ejemplos de código para esta placa
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython