class WINC – driver pentru shield WiFi

Clasa WINC controlează modulul WiFi Atmel WINC1500 802.11 b/g/n de pe OpenMV WiFi Shield. Disponibil pe OpenMV Cam M4, M7, H7, H7 Plus și Pure Thermal (plăcile STM32 pentru care a fost proiectat shield-ul WiFi). Pentru plăcile cu WiFi încorporat (OpenMV Cam N6, OpenMV Cam RT1062, Arduino Giga) folosiți WLAN în schimb.

Exemplu – conectarea la un punct de acces și afișarea adresei:

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

Exemplu – pornirea unui punct de acces deschis și așteptarea unui 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))

Constructori

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

Creează un obiect driver WINC și pornește shield-ul WiFi.

mode selectează modul de operare în care pornește modulul:

Notă

În modul AP, WINC1500 are limite hardware:

  • Se poate conecta un singur client la un moment dat.

  • Sunt acceptate doar securitatea OPEN sau WEP.

  • O eroare în firmware-ul modulului WiFi face ca orice socket legat să nu mai funcționeze atunci când clientul se deconectează. Setați un timeout pe socket-ul serverului astfel încât acesta să genereze o excepție pe care o puteți folosi pentru a-l redeschide.

Metode

active(is_active: bool | None = None) bool

Activează sau dezactivează shield-ul WiFi.

Fără argument, returnează starea curentă – True cât timp shield-ul este inițializat și radioul este activ, False în caz contrar.

active(True) efectuează handshake-ul firmware-ului WINC1500 prin SPI și pornește radioul în mode-ul configurat. Este o operație fără efect dacă interfața este deja activă. connect() apelează automat acest lucru dacă nu a fost încă apelat; pentru orice altă metodă (scan(), rssi(), netinfo(), …) trebuie să apelați mai întâi active(True).

active(False) oprește din nou radioul (WINC trece în modul doar-BSP) și eliberează pinii SPI.

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

Se asociază cu rețeaua WiFi ssid folosind parola key, modul de securitate security (una dintre OPEN, WPA_PSK sau constanta 802.1X) pe canalul radio channel. security și channel sunt exclusiv de tip cuvânt-cheie.

După conectare, folosiți modulul socket pentru a deschide porturi TCP/UDP.

Această metodă blochează execuția până când asocierea se finalizează sau eșuează.

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

Alias pentru connect(). Furnizat pentru compatibilitate cu codul care apelează config pe alte interfețe network.

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

Alias pentru connect() folosit după construirea obiectului cu mode=MODE_AP pentru a configura și porni punctul de acces. AP-ul acceptă doar securitatea OPEN sau WEP; dacă se folosește WEP, key este obligatoriu.

disconnect() None

În modul STA, se dezasociază de la punctul de acces cu care este asociat în prezent. Shield-ul rămâne activ; apelați connect() pentru a vă reasocia. Operație fără efect atunci când nu este asociat în prezent.

isconnected() bool

În modul STA, returnează True atunci când este asociat cu un punct de acces și a fost obținută o adresă IPv4 (prin DHCP sau ifconfig()). Returnează False cât timp se află încă în faza de autentificare / asociere / DHCP.

connected_sta() List[str]

În modul AP, returnează o listă conținând adresa IP a clientului conectat în prezent (sau o listă goală dacă niciun client nu este conectat).

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

În modul AP, blochează execuția până când un client se conectează și returnează o listă conținând adresa IP a clientului. timeout este timpul maxim de așteptare în milisecunde; transmiteți None pentru a aștepta la nesfârșit.

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

Obține sau setează parametrii interfeței IPv4. Tuplul de 4 elemente conține (ip, subnet, gateway, dns) ca șiruri în notație cu punct.

Apelată fără argument: returnează configurația curentă.

Apelată cu un tuplu de 4 elemente: setează o configurație IP statică în locul celei obținute prin DHCP.

Exemplu – fixarea unei adrese IP statice înainte de conectare:

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)

Notă

WINC nu implementează API-ul modern AbstractNIC.ipconfig(); folosiți ifconfig() aici.

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

Returnează un tuplu de 5 elemente care descrie asocierea curentă:

  • [0] RSSI ca număr întreg (dBm).

  • [1] Mod de securitate – una dintre constantele de securitate.

  • [2] Șirul SSID.

  • [3] BSSID ca șir MAC "XX:XX:XX:XX:XX:XX".

  • [4] Adresa IPv4 ca șir în notație cu punct.

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

Scanează punctele de acces din apropiere. Returnează o listă de tupluri de 6 elemente:

  • [0] Șirul SSID.

  • [1] BSSID ca șir MAC "XX:XX:XX:XX:XX:XX".

  • [2] Numărul canalului.

  • [3] RSSI în dBm.

  • [4] Mod de securitate – una dintre constantele de securitate.

  • [5] Rezervat (întotdeauna 1).

Poate fi apelată fără a fi mai întâi asociat cu o rețea.

rssi() int

Returnează RSSI în dBm al punctului de acces cu care este asociat în prezent. Aproximativ: -30 este excelent, -67 este acceptabil pentru streaming, -80 este marginal, -90 și mai jos este inutilizabil. Are sens doar în modul STA cât timp isconnected() este True.

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

Returnează un tuplu de 7 elemente care descrie versiunile de firmware și driver ale WINC1500:

  • [0] Versiunea majoră a firmware-ului.

  • [1] Versiunea minoră a firmware-ului.

  • [2] Patch-ul firmware-ului.

  • [3] Versiunea majoră a driverului.

  • [4] Versiunea minoră a driverului.

  • [5] Patch-ul driverului.

  • [6] Revizia hardware a cipului.

fw_dump(path: str) None

Citește memoria flash internă a WINC1500 și scrie imaginea de firmware rezultată în fișierul de la path pe sistemul de fișiere al OpenMV. Folosiți acest lucru pentru a face o copie de rezervă a imaginii instalate în prezent înainte de a apela fw_update().

Necesită ca modulul să fi fost construit cu mode=MODE_FIRMWARE.

fw_update(path: str) None

Șterge memoria flash internă a WINC1500 și o programează cu imaginea binară de la path. Imaginea trebuie să corespundă structurii așteptate de firmware-ul OpenMV (de obicei furnizată de Atmel / Microchip împreună cu WINC SDK).

Apelul blochează execuția timp de câteva secunde cât timp memoria flash este programată și verificată. Reporniți alimentarea OpenMV Cam după ce apelul returnează, astfel încât WINC1500 să pornească din noua imagine.

Necesită ca modulul să fi fost construit cu mode=MODE_FIRMWARE.

Constante

OPEN: int

Valoare de securitate pentru o rețea necriptată. Transmiteți la argumentul security al connect() / start_ap().

WPA_PSK: int

Valoare de securitate pentru WPA/WPA2 cu o cheie pre-partajată. Valoarea implicită pentru connect().

Notă

Există și o valoare de securitate WPA/WPA2 Enterprise (802.1X). Firmware-ul o expune sub numele 802_1X, care nu este un identificator Python valid – accesați-o prin getattr(network.WINC, "802_1X").

MODE_STA: int

Mod stație – conectare la un punct de acces ca client. Modul implicit al constructorului.

MODE_AP: int

Mod punct de acces – WINC devine AP-ul cu care se asociază clienții.

MODE_P2P: int

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

MODE_BSP: int

Inițializează doar pachetul de suport al plăcii WINC – radioul nu este pornit. Folosit de fluxul de actualizare a firmware-ului.

MODE_FIRMWARE: int

Mod de actualizare a firmware-ului. Necesar pentru fw_dump() și fw_update().