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