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.modeselectează modul de operare în care pornește modulul:WINC.MODE_STA– stație / client. Conectați-vă la un punct de acces cuconnect(). Acesta este modul implicit.WINC.MODE_AP– punct de acces. Configurați AP-ul custart_ap(), apoi acceptați conexiunile clienților.WINC.MODE_P2P– WiFi Direct.WINC.MODE_BSP– pornește doar BSP-ul (fără radio).WINC.MODE_FIRMWARE– mod de actualizare a firmware-ului; necesar pentrufw_dump()șifw_update().
Notă
În modul AP, WINC1500 are limite hardware:
Se poate conecta un singur client la un moment dat.
Sunt acceptate doar securitatea
OPENsau 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ă –
Truecâ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 înmode-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âiactive(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
ssidfolosind parolakey, modul de securitatesecurity(una dintreOPEN,WPA_PSKsau constanta 802.1X) pe canalul radiochannel.securityșichannelsunt exclusiv de tip cuvânt-cheie.După conectare, folosiți modulul
socketpentru 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ăconfigpe alte interfețenetwork.
- start_ap(ssid: str, key: str | None = None, *, security: int = WINC.OPEN, channel: int = 1) None¶
Alias pentru
connect()folosit după construirea obiectului cumode=MODE_APpentru a configura și porni punctul de acces. AP-ul acceptă doar securitateaOPENsau WEP; dacă se folosește WEP,keyeste 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ă
Trueatunci când este asociat cu un punct de acces și a fost obținută o adresă IPv4 (prin DHCP sauifconfig()). ReturneazăFalsecâ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.
timeouteste timpul maxim de așteptare în milisecunde; transmitețiNonepentru 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ă
WINCnu implementează API-ul modernAbstractNIC.ipconfig(); folosițiifconfig()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 (întotdeauna1).
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:
-30este excelent,-67este acceptabil pentru streaming,-80este marginal,-90și mai jos este inutilizabil. Are sens doar în modul STA cât timpisconnected()esteTrue.
- 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
pathpe 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 apelafw_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
securityalconnect()/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 pringetattr(network.WINC, "802_1X").- MODE_STA: int¶
Mod stație – conectare la un punct de acces ca client. Modul implicit al constructorului.
- 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()șifw_update().