classe WLAN – contrôle des interfaces WiFi intégrées

La classe WLAN pilote les radios WiFi embarquées des OpenMV Cam modernes. La même classe encapsule deux pilotes sous-jacents différents selon le MCU WiFi de la carte :

  • CYW43 (module WiFi Infineon CYW43xxx Murata). Utilisé par l’OpenMV Cam N6, l’OpenMV Cam RT1062, l’Arduino Portenta H7, l’Arduino Nicla Vision et l’Arduino Giga R1 WiFi.

  • NINA W10 (u-blox NINA-W10 / ESP32-WROOM). Utilisé par l’Arduino Nano RP2040 Connect.

Les deux pilotes exposent les mêmes noms de méthodes mais diffèrent par quelques arguments et par l’ensemble des clés config() acceptées. Les différences sont signalées ci-dessous.

Les caméras OpenMV équipées d’un ancien shield WiFi WINC1500 (M4 / M7 / H7 / H7 Plus / Pure Thermal) utilisent WINC à la place.

Exemple d’utilisation

import network

# Enable the station interface and connect to a WiFi AP.
nic = network.WLAN(network.WLAN.IF_STA)
nic.active(True)
nic.connect("your-ssid", "your-key")
while not nic.isconnected():
    pass

print(nic.ipconfig("addr4"))

Constructeurs

class network.WLAN(interface_id: int = WLAN.IF_STA) None

Crée un objet d’interface WLAN.

interface_id sélectionne l’interface sur laquelle opérer :

  • WLAN.IF_STA – mode station / client. Se connecte à un point d’accès en amont avec connect(). C’est la valeur par défaut.

  • WLAN.IF_AP – mode point d’accès. Configurez le point d’accès avec config() et acceptez les connexions des clients.

La même radio physique sert les deux interfaces ; construire l’une n’empêche pas l’autre.

Méthodes

active(is_active: bool | None = None) bool

Active ou désactive la radio WiFi.

Sans argument, renvoie l’état actuel – True lorsque la radio est active, False sinon.

active(True) alimente le MCU WiFi, charge son micrologiciel (CYW43 récupère le blob de micrologiciel depuis la mémoire flash ; NINA valide la version du micrologiciel actuellement programmée) et active le netif lwIP de cette interface. Toutes les autres méthodes – connect(), scan(), ipconfig() et les autres – exigent que l’interface soit active.

active(False) remet la radio hors tension. Sur l’interface STA, cela dissocie également du point d’accès actuel et libère le netif.

connect(ssid: str, key: str | None = None, *, security: int = -1, bssid: bytes | None = None, channel: int = -1) None

Associe l’interface STA au point d’accès indiqué.

ssid – le SSID du réseau (chaîne ou octets).

key – mot de passe / clé pré-partagée. Passez None pour un réseau ouvert.

security (mot-clé uniquement) – l’une des constantes SEC_*. -1 (la valeur par défaut) effectue une sélection automatique : SEC_OPEN lorsque key est vide, SEC_WPA_WPA2 sinon.

bssid (mot-clé uniquement, CYW43 uniquement) – restreint l’association au point d’accès ayant cette adresse MAC de 6 octets. Ignoré par le pilote NINA.

channel (mot-clé uniquement) – canal radio préféré. Par défaut « laisser le pilote choisir ».

disconnect() None

En mode STA, dissocie du point d’accès actuellement associé. L’interface reste active ; appelez à nouveau connect() pour vous réassocier, ou active() (False) pour mettre complètement la radio hors tension. Sans effet lorsqu’aucune association n’est en cours.

isconnected() bool

En mode STA, renvoie True lorsqu’une association à un point d’accès est établie et qu’une adresse IPv4 a été obtenue par DHCP (ou attribuée de façon statique via ipconfig()). Renvoie False tant que la liaison est encore en phase d’authentification/d’association/de DHCP.

En mode AP, renvoie True lorsqu’au moins une station a rejoint le réseau.

scan(*, passive: bool = False, ssid: bytes | None = None, bssid: bytes | None = None) List[Tuple[bytes, bytes, int, int, int, int]]

Recherche les points d’accès à proximité et renvoie une liste de 6-uplets :

  • [0] SSID (octets ; vide pour les réseaux masqués).

  • [1] BSSID (MAC de 6 octets, bytes). Convertissez avec binascii.hexlify().

  • [2] Numéro de canal.

  • [3] RSSI en dBm.

  • [4] Mode de sécurité (l’une des constantes SEC_*).

  • [5] Réservé (toujours 1).

Tous les arguments nommés sont réservés au CYW43 :

  • passive – si True, utilise un balayage passif au lieu du balayage actif par requête de sonde par défaut.

  • ssid – restreint le balayage à un seul SSID.

  • bssid – restreint le balayage à un seul BSSID.

Le balayage n’a de sens que sur une interface STA.

status() int
status(param: str) Any

Interroge l’état de la connexion.

Sans argument, renvoie l’état de la liaison sous forme d’un petit entier (codage spécifique au pilote – une valeur vraie signifie « associé »).

Avec un argument de type chaîne :

  • "rssi" – en mode STA, renvoie le RSSI actuel en dBm.

  • "stations" – en mode AP, renvoie une liste des stations connectées. CYW43 renvoie [(mac_bytes,), ...] ; NINA renvoie [ip_string, ...].

ifconfig(config: Tuple[str, str, str, str] | None = None) Tuple[str, str, str, str] | None

Lit ou définit les paramètres IPv4 de l’interface sous forme d’un 4-uplet de chaînes en notation décimale pointée (ip, subnet, gateway, dns).

Note

Préférez ipconfig() pour le nouveau code

nic.ipconfig(addr4="192.168.0.4/24", gw4="192.168.0.1")
network.ipconfig(dns="8.8.8.8")
ipconfig(param: str) Any
ipconfig(**kwargs: Any) None

Lit ou définit les paramètres IPv4 / IPv6 de l’interface. Le pilote CYW43 délègue à l’implémentation lwIP standard et prend en charge l’ensemble complet des clés documentées dans AbstractNIC.ipconfig(). Le pilote NINA implémente un sous-ensemble plus restreint par interface – dhcp4 et has_dhcp4 (en lecture seule), ainsi que addr4 et gw4 pour la lecture / l’écriture.

config(param: str) Any
config(**kwargs: Any) None

Lit ou définit les paramètres d’interface spécifiques au WiFi.

Avec un unique argument positionnel de type chaîne, renvoie la valeur de ce paramètre. Avec des arguments nommés, définit un ou plusieurs paramètres à la fois – les changements qui affectent un AP en cours d’exécution provoquent l’arrêt puis le redémarrage automatiques de l’AP.

Exemple

# Set up the access-point name and channel.
ap.config(ssid="My AP", channel=11)
# Query params one at a time.
print(ap.config("ssid"))
print(ap.config("mac"))

Pilote CYW43 – paramètres lisibles :

  • "antenna" – sélecteur d’antenne (entier).

  • "channel" – canal actuel.

  • "ssid" / "essid" – le SSID actuel (chaîne).

  • "security" – le mode d’authentification de l’AP (l’une des constantes SEC_*).

  • "mac" – adresse MAC de l’interface (6 bytes).

  • "pm" – valeur de gestion de l’alimentation.

  • "txpower" – puissance d’émission en dBm.

  • "hostname" – nom d’hôte DHCP/mDNS. Obsolète ; utilisez network.hostname() à la place.

Pilote CYW43 – paramètres modifiables :

  • antenna=<int> – sélecteur d’antenne.

  • channel=<int> – canal de l’AP.

  • ssid=<str> / essid=<str> – SSID de l’AP.

  • key=<str> / password=<str> – clé pré-partagée de l’AP.

  • security=<int> – mode d’authentification de l’AP (l’une des constantes SEC_*).

  • pm=<int> – mode de gestion de l’alimentation (l’une des valeurs PM_NONE, PM_PERFORMANCE, PM_POWERSAVE).

  • monitor=<int> – active le mode moniteur / réception de tout le trafic multicast.

  • txpower=<int> – puissance d’émission en dBm.

  • trace=<int> – masque binaire de traçage interne du pilote.

  • hostname=<str> – nom d’hôte DHCP/mDNS. Obsolète ; utilisez network.hostname() à la place.

Pilote NINA – paramètres lisibles :

  • "ssid" – le SSID actuel (chaîne).

  • "security" – le mode d’authentification de l’AP.

  • "mac" / "bssid" – adresse MAC de l’interface (6 bytes).

  • "fw_version" – un 3-uplet (major, minor, patch).

Pilote NINA – paramètres modifiables : l’appel est transmis à connect() et accepte les mêmes arguments nommés (ssid, key, security, channel). Valide uniquement sur l’interface AP.

deinit() None

Effectue un cycle d’alimentation du MCU WiFi et libère toutes les ressources détenues par le pilote (tampons de micrologiciel, netif lwIP, bus SPI/SDIO). Après cet appel, l’objet WLAN doit être reconstruit avant utilisation. Utilisez ceci plutôt que active() (False) lorsque vous avez besoin d’une réinitialisation complète (par exemple, avant de reprogrammer le micrologiciel de la radio ou pour récupérer d’un état de pilote bloqué). CYW43 uniquement.

send_ethernet(buf: bytes) None

Injecte la trame Ethernet brute buf directement dans le chemin d’émission du pilote, en contournant la pile IP. Destiné aux consommateurs purement de niveau L2 – pontage, protocoles EtherType personnalisés et similaires. La trame doit inclure les adresses MAC source/destination et l’EtherType (sans FCS – le matériel l’ajoute). CYW43 uniquement.

ioctl(cmd: int, buf: bytearray) None

Émet une commande de contrôle spécifique au pilote. cmd est le code ioctl numérique défini par le micrologiciel de la radio sous-jacente et buf est un tampon modifiable utilisé à la fois pour la charge utile de la commande et pour la réponse. L’ensemble des valeurs cmd valides est spécifique au pilote et non portable entre CYW43 et NINA. Utilisé principalement par les scripts de test bas niveau et le code de mise en service des puces.

Constantes

IF_STA: int

Identifiant de l’interface station / client. À passer au constructeur pour sélectionner le mode STA.

IF_AP: int

Identifiant de l’interface point d’accès. À passer au constructeur pour sélectionner le mode AP.

SEC_OPEN: int

Valeur de sécurité pour un réseau non chiffré. Disponible sur les deux pilotes.

SEC_WPA_WPA2: int

Valeur de sécurité pour WPA / WPA2 avec clé pré-partagée. Valeur par défaut lorsqu’une clé est fournie à connect(). Disponible sur les deux pilotes.

SEC_WPA3: int

Valeur de sécurité pour WPA3 (SAE) avec clé pré-partagée. CYW43 uniquement.

SEC_WPA2_WPA3: int

Valeur de sécurité pour le mode de transition WPA2 / WPA3. CYW43 uniquement.

SEC_WEP: int

Valeur de sécurité pour WEP (Wired Equivalent Privacy). Fournie pour la compatibilité avec les anciens points d’accès – le WEP est cryptographiquement compromis et ne devrait pas être utilisé dans les nouveaux déploiements. NINA uniquement.

OPEN: int

Alias de rétrocompatibilité pour SEC_OPEN. Le nouveau code devrait utiliser SEC_OPEN. NINA uniquement.

WEP: int

Alias de rétrocompatibilité pour SEC_WEP. Le nouveau code devrait utiliser SEC_WEP. NINA uniquement.

WPA_PSK: int

Alias de rétrocompatibilité pour SEC_WPA_WPA2. Le nouveau code devrait utiliser SEC_WPA_WPA2. NINA uniquement.

PM_NONE: int

À passer à config(pm=...) pour désactiver la gestion de l’alimentation WiFi. CYW43 uniquement.

PM_PERFORMANCE: int

À passer à config(pm=...) pour activer une gestion de l’alimentation WiFi optimisée pour les performances. CYW43 uniquement.

PM_POWERSAVE: int

À passer à config(pm=...) pour activer une gestion de l’alimentation WiFi optimisée pour une autonomie maximale de la batterie. CYW43 uniquement.