class WINC – pilote du shield WiFi

La classe WINC pilote le module WiFi 802.11 b/g/n Atmel WINC1500 du shield WiFi OpenMV. Disponible sur les OpenMV Cam M4, M7, H7, H7 Plus et Pure Thermal (les cartes STM32 pour lesquelles le shield WiFi a été conçu). Pour les cartes dotées d’un WiFi intégré (OpenMV Cam N6, OpenMV Cam RT1062, Arduino Giga), utilisez plutôt WLAN.

Exemple – se connecter à un point d’accès et afficher l’adresse

import network

wlan = network.WINC()
wlan.connect("SSID", "KEY", security=network.WINC.WPA_PSK)

print("status:    ", "connected" if wlan.isconnected() else "off")
print("rssi:      ", wlan.rssi(), "dBm")
print("interface: ", wlan.ifconfig())
print("netinfo:   ", wlan.netinfo())

Exemple – ouvrir un point d’accès ouvert et attendre un client

import network

wlan = network.WINC(mode=network.WINC.MODE_AP)
wlan.start_ap("OpenMV-Cam", security=network.WINC.OPEN, channel=6)

print("waiting for a station to associate...")
print(wlan.wait_for_sta(timeout=None))

Constructeurs

class network.WINC(mode: int = WINC.MODE_STA) None

Crée un objet pilote WINC et active le shield WiFi.

mode sélectionne le mode de fonctionnement dans lequel le module démarre :

Note

En mode AP, le WINC1500 présente des limitations matérielles :

  • Un seul client peut se connecter à la fois.

  • Seules les sécurités OPEN ou WEP sont prises en charge.

  • Un bug du micrologiciel du module WiFi fait que tous les sockets liés cessent de fonctionner lorsque le client se déconnecte. Définissez un délai d’expiration sur le socket serveur afin qu’il lève une exception que vous pouvez utiliser pour le rouvrir.

Méthodes

active(is_active: bool | None = None) bool

Active ou désactive le shield WiFi.

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

active(True) effectue la poignée de main du micrologiciel WINC1500 via SPI et active la radio dans le mode configuré. C’est une opération sans effet si l’interface est déjà active. connect() l’appelle automatiquement si cela n’a pas encore été fait ; pour toute autre méthode (scan(), rssi(), netinfo(), …), vous devez d’abord appeler active(True).

active(False) éteint à nouveau la radio (le WINC repasse en mode BSP uniquement) et libère les broches SPI.

connect(ssid: str, key: str | None = None, *, security: int = WINC.WPA_PSK, channel: int = 1) None

Associe au réseau WiFi ssid en utilisant le mot de passe key, le mode de sécurité security (l’une des valeurs OPEN, WPA_PSK ou la constante 802.1X) sur le canal radio channel. security et channel sont passés uniquement par mot-clé.

Après la connexion, utilisez le module socket pour ouvrir des ports TCP/UDP.

Cette méthode bloque jusqu’à ce que l’association aboutisse ou échoue.

config(ssid: str, key: str | None = None, *, security: int = WINC.WPA_PSK, channel: int = 1) None

Alias de connect(). Fourni pour assurer la compatibilité avec le code qui appelle config sur d’autres interfaces network.

start_ap(ssid: str, key: str | None = None, *, security: int = WINC.OPEN, channel: int = 1) None

Alias de connect() utilisé après avoir construit l’objet avec mode=MODE_AP pour configurer et démarrer le point d’accès. L’AP ne prend en charge que les sécurités OPEN ou WEP ; si WEP est utilisé, key est requis.

disconnect() None

En mode STA, se dissocie du point d’accès actuellement associé. Le shield reste actif ; appelez connect() pour vous réassocier. Sans effet lorsqu’aucune association n’est en cours.

isconnected() bool

En mode STA, renvoie True lorsqu’on est associé à un point d’accès et qu’une adresse IPv4 a été obtenue (via DHCP ou ifconfig()). Renvoie False tant que l’on est encore dans la phase d’authentification / d’association / de DHCP.

connected_sta() List[str]

En mode AP, renvoie une liste contenant l’adresse IP du client actuellement connecté (ou une liste vide si aucun client n’est connecté).

wait_for_sta(timeout: int | None) List[str]

En mode AP, bloque jusqu’à ce qu’un client se connecte et renvoie une liste contenant l’adresse IP du client. timeout est l’attente maximale en millisecondes ; passez None pour attendre indéfiniment.

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

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

Appelée sans argument : renvoie la configuration actuelle.

Appelée avec un 4-tuple : définit une configuration IP statique à la place de celle obtenue par DHCP.

Exemple – fixer une IP statique avant de se connecter

wlan = network.WINC()
wlan.ifconfig(("192.168.1.100", "255.255.255.0",
               "192.168.1.1", "192.168.1.1"))
wlan.connect(SSID, key=KEY, security=network.WINC.WPA_PSK)

Note

WINC n’implémente pas l’API moderne AbstractNIC.ipconfig() ; utilisez ifconfig() ici.

netinfo() Tuple[int, int, str, str, str]

Renvoie un 5-tuple décrivant l’association actuelle :

  • [0] RSSI sous forme d’entier (dBm).

  • [1] Mode de sécurité – l’une des constantes de sécurité.

  • [2] Chaîne SSID.

  • [3] BSSID sous forme de chaîne MAC "XX:XX:XX:XX:XX:XX".

  • [4] Adresse IPv4 sous forme de chaîne en notation décimale pointée.

scan() List[Tuple[str, str, int, int, int, int]]

Recherche les points d’accès à proximité. Renvoie une liste de 6-tuples :

  • [0] Chaîne SSID.

  • [1] BSSID sous forme de chaîne MAC "XX:XX:XX:XX:XX:XX".

  • [2] Numéro de canal.

  • [3] RSSI en dBm.

  • [4] Mode de sécurité – l’une des constantes de sécurité.

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

Peut être appelée sans s’être d’abord associé à un réseau.

rssi() int

Renvoie le RSSI en dBm du point d’accès actuellement associé. En gros : -30 est excellent, -67 est correct pour le streaming, -80 est marginal, -90 et en dessous est inutilisable. N’a de sens qu’en mode STA tant que isconnected() vaut True.

fw_version() Tuple[int, int, int, int, int, int, int]

Renvoie un 7-tuple décrivant les versions du micrologiciel et du pilote du WINC1500 :

  • [0] Version majeure du micrologiciel.

  • [1] Version mineure du micrologiciel.

  • [2] Correctif du micrologiciel.

  • [3] Version majeure du pilote.

  • [4] Version mineure du pilote.

  • [5] Correctif du pilote.

  • [6] Révision matérielle de la puce.

fw_dump(path: str) None

Lit la mémoire flash interne du WINC1500 et écrit l’image de micrologiciel résultante dans le fichier situé à path sur le système de fichiers de l’OpenMV. Utilisez ceci pour sauvegarder l’image actuellement installée avant d’appeler fw_update().

Nécessite que le module ait été construit avec mode=MODE_FIRMWARE.

fw_update(path: str) None

Efface la mémoire flash interne du WINC1500 et la programme avec l’image binaire située à path. L’image doit correspondre à l’agencement attendu par le micrologiciel OpenMV (généralement fournie par Atmel / Microchip avec le WINC SDK).

L’appel bloque pendant plusieurs secondes le temps que la mémoire flash soit programmée et vérifiée. Effectuez un cycle d’alimentation de l’OpenMV Cam après le retour de l’appel afin que le WINC1500 démarre à partir de la nouvelle image.

Nécessite que le module ait été construit avec mode=MODE_FIRMWARE.

Constantes

OPEN: int

Valeur de sécurité pour un réseau non chiffré. À passer à l’argument security de connect() / start_ap().

WPA_PSK: int

Valeur de sécurité pour WPA/WPA2 avec une clé pré-partagée. La valeur par défaut pour connect().

Note

Il existe également une valeur de sécurité WPA/WPA2 Enterprise (802.1X). Le micrologiciel l’expose sous le nom 802_1X, qui n’est pas un identifiant Python valide – accédez-y via getattr(network.WINC, "802_1X").

MODE_STA: int

Mode station – se connecter à un point d’accès en tant que client. Le mode par défaut du constructeur.

MODE_AP: int

Mode point d’accès – le WINC devient l’AP auquel les clients s’associent.

MODE_P2P: int

Mode WiFi-Direct (pair-à-pair).

MODE_BSP: int

Initialise uniquement le package de support de carte (BSP) du WINC – la radio n’est pas activée. Utilisé par le processus de mise à jour du micrologiciel.

MODE_FIRMWARE: int

Mode de mise à jour du micrologiciel. Requis par fw_dump() et fw_update().