🛠 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

Objectifs

Comment déployer 50 Pico W chez des gens qui ne lisent pas les logs série ? Réponse officielle : le provisioning par navigateur, exemple phare de pico_w/wifi/ dans pico-examples (access point + page web de configuration). Le principe : la carte émet son propre réseau (le CYW43439 accepte un SoftAP jusqu'à 4 clients), l'utilisateur s'y connecte depuis son téléphone, saisit les identifiants du réseau cible dans un formulaire servi par la carte, puis la carte bascule en station. Tu construiras le même enchaînement en MicroPython avec network.WLAN(network.WLAN.IF_AP).

Matériel

Code complet

# 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('réseau 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

Vérification attendue

Au premier boot sans configuration connue, le réseau PICO-SETUP apparaît sur le téléphone ; le formulaire saisi, la carte émet le message de succès, ferme le SoftAP et rejoint le réseau domestique — l'IP finale s'affiche une fois connectée. C'est exactement le flux de l'exemple officiel C (qui, lui, sert une vraie page avec listes des réseaux scannés).

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels