class WINC – WiFi-shield-driver

De WINC-klasse stuurt de Atmel WINC1500 802.11 b/g/n WiFi-module op de OpenMV WiFi Shield aan. Beschikbaar op de OpenMV Cam M4, M7, H7, H7 Plus en Pure Thermal (de STM32-borden waarvoor de WiFi-shield is ontworpen). Gebruik voor borden met ingebouwde WiFi (OpenMV Cam N6, OpenMV Cam RT1062, Arduino Giga) in plaats daarvan WLAN.

Voorbeeld – verbinden met een toegangspunt en het adres afdrukken:

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())

Voorbeeld – een open toegangspunt opzetten en wachten op een 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))

Constructors

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

Maakt een WINC-driverobject aan en brengt de WiFi-shield omhoog.

mode selecteert de bedrijfsmodus waarin de module start:

Notitie

In AP-modus heeft de WINC1500 hardwarebeperkingen:

  • Er kan slechts één client tegelijk verbinden.

  • Alleen OPEN- of WEP-beveiliging worden ondersteund.

  • Een firmwarebug in de WiFi-module zorgt ervoor dat alle gebonden sockets stoppen met werken wanneer de client de verbinding verbreekt. Stel een timeout in op de serversocket zodat deze een uitzondering genereert die je kunt gebruiken om hem opnieuw te openen.

Methoden

active(is_active: bool | None = None) bool

Brengt de WiFi-shield omhoog of omlaag.

Zonder argument geeft het de huidige toestand terug – True zolang de shield is geïnitialiseerd en de radio omhoog is, anders False.

active(True) voert de WINC1500-firmwarehandshake uit via SPI en brengt de radio omhoog in de geconfigureerde mode. Het is een no-op als de interface al actief is. connect() roept dit automatisch aan als het nog niet is aangeroepen; voor elke andere methode (scan(), rssi(), netinfo(), …) moet je eerst active(True) aanroepen.

active(False) schakelt de radio weer uit (de WINC valt terug naar de alleen-BSP-modus) en geeft de SPI-pinnen vrij.

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

Associeert met het WiFi-netwerk ssid met wachtwoord key, beveiligingsmodus security (een van OPEN, WPA_PSK of de 802.1X-constante) op radio channel. security en channel zijn alleen-keyword.

Gebruik na het verbinden de socket-module om TCP/UDP-poorten te openen.

Deze methode blokkeert totdat de associatie is voltooid of mislukt.

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

Alias van connect(). Geleverd voor compatibiliteit met code die config aanroept op andere network-interfaces.

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

Alias van connect() die wordt gebruikt nadat het object is geconstrueerd met mode=MODE_AP om het toegangspunt te configureren en te starten. Het AP ondersteunt alleen OPEN- of WEP-beveiliging; als WEP wordt gebruikt is key vereist.

disconnect() None

In STA-modus, ontkoppelt van het momenteel geassocieerde toegangspunt. De shield blijft actief; roep connect() aan om opnieuw te associëren. No-op wanneer er momenteel geen associatie is.

isconnected() bool

In STA-modus geeft True terug wanneer er een associatie met een toegangspunt is en er een IPv4-adres is verkregen (via DHCP of ifconfig()). Geeft False terug terwijl het nog in de authenticatie-/associatie-/DHCP-fase zit.

connected_sta() List[str]

In AP-modus geeft een lijst terug die het IP-adres van de momenteel verbonden client bevat (of een lege lijst als er geen client is verbonden).

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

In AP-modus blokkeert het totdat een client verbinding maakt en geeft een lijst terug die het IP-adres van de client bevat. timeout is de maximale wachttijd in milliseconden; geef None door om onbeperkt te wachten.

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

Haalt de IPv4-interfaceparameters op of stelt ze in. De 4-tuple bevat (ip, subnet, gateway, dns) als dotted-quad-strings.

Aangeroepen zonder argument: geeft de huidige configuratie terug.

Aangeroepen met een 4-tuple: stelt een statische IP-configuratie in in plaats van de via DHCP verkregen configuratie.

Voorbeeld – een statisch IP vastpinnen voordat je verbinding maakt:

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)

Notitie

WINC implementeert de moderne AbstractNIC.ipconfig()-API niet; gebruik hier ifconfig().

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

Geeft een 5-tuple terug die de huidige associatie beschrijft:

  • [0] RSSI als een int (dBm).

  • [1] Beveiligingsmodus – een van de beveiligingsconstanten.

  • [2] SSID-string.

  • [3] BSSID als een "XX:XX:XX:XX:XX:XX" MAC-string.

  • [4] IPv4-adres als een dotted-quad-string.

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

Scant naar nabijgelegen toegangspunten. Geeft een lijst van 6-tuples terug:

  • [0] SSID-string.

  • [1] BSSID als een "XX:XX:XX:XX:XX:XX" MAC-string.

  • [2] Kanaalnummer.

  • [3] RSSI in dBm.

  • [4] Beveiligingsmodus – een van de beveiligingsconstanten.

  • [5] Gereserveerd (altijd 1).

Kan worden aangeroepen zonder eerst met een netwerk te associëren.

rssi() int

Geeft de RSSI in dBm terug van het momenteel geassocieerde toegangspunt. Ruwweg: -30 is uitstekend, -67 is oké voor streaming, -80 is marginaal, -90 en lager is onbruikbaar. Alleen zinvol in STA-modus terwijl isconnected() True is.

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

Geeft een 7-tuple terug die de WINC1500-firmware- en driverversies beschrijft:

  • [0] Firmware major.

  • [1] Firmware minor.

  • [2] Firmware patch.

  • [3] Driver major.

  • [4] Driver minor.

  • [5] Driver patch.

  • [6] Hardwarerevisie van de chip.

fw_dump(path: str) None

Leest het interne flashgeheugen van de WINC1500 en schrijft de resulterende firmware-image naar het bestand op path op het bestandssysteem van de OpenMV. Gebruik dit om een back-up te maken van de momenteel geïnstalleerde image voordat je fw_update() aanroept.

Vereist dat de module is geconstrueerd met mode=MODE_FIRMWARE.

fw_update(path: str) None

Wist het interne flashgeheugen van de WINC1500 en programmeert het met de binaire image op path. De image moet overeenkomen met de indeling die door de OpenMV-firmware wordt verwacht (doorgaans geleverd door Atmel / Microchip met de WINC SDK).

De aanroep blokkeert enkele seconden terwijl het flashgeheugen wordt geprogrammeerd en geverifieerd. Schakel de OpenMV Cam uit en weer aan nadat de aanroep is teruggekeerd, zodat de WINC1500 vanaf de nieuwe image start.

Vereist dat de module is geconstrueerd met mode=MODE_FIRMWARE.

Constanten

OPEN: int

Beveiligingswaarde voor een niet-versleuteld netwerk. Geef door aan het security-argument van connect() / start_ap().

WPA_PSK: int

Beveiligingswaarde voor WPA/WPA2 met een pre-shared key. De standaard voor connect().

Notitie

Er bestaat ook een WPA/WPA2 Enterprise (802.1X) beveiligingswaarde. De firmware stelt deze bloot onder de naam 802_1X, wat geen geldige Python-identifier is – benader het via getattr(network.WINC, "802_1X").

MODE_STA: int

Stationmodus – verbind als client met een toegangspunt. De standaard constructormodus.

MODE_AP: int

Toegangspuntmodus – de WINC wordt het AP waarmee clients associëren.

MODE_P2P: int

WiFi-Direct (peer-to-peer) modus.

MODE_BSP: int

Initialiseert alleen het WINC board-support package – de radio wordt niet omhoog gebracht. Gebruikt door de firmware-updatestroom.

MODE_FIRMWARE: int

Firmware-updatemodus. Vereist door fw_dump() en fw_update().