class WINC -- WiFi 擴充板驅動程式¶
WINC 類別驅動 OpenMV WiFi 擴充板上的 Atmel WINC1500 802.11 b/g/n WiFi 模組。可用於 OpenMV Cam M4、M7、H7、H7 Plus 與 Pure Thermal(這些是 WiFi 擴充板所設計支援的 STM32 板子)。對於內建 WiFi 的板子(OpenMV Cam N6、OpenMV Cam RT1062、Arduino Giga),請改用 WLAN。
範例 -- 連線到存取點並印出位址::
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())
範例 -- 啟動一個開放的存取點並等待用戶端::
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))
建構子¶
- class network.WINC(mode: int = WINC.MODE_STA) None¶
建立一個
WINC驅動程式物件並啟動 WiFi 擴充板。mode選擇模組啟動時所進入的運作模式:WINC.MODE_STA-- 工作站/用戶端。以connect()連線到存取點。此為預設值。WINC.MODE_AP-- 存取點。以start_ap()設定 AP,然後接受用戶端連線。WINC.MODE_P2P-- WiFi Direct。WINC.MODE_BSP-- 僅啟動 BSP(不開啟無線電)。WINC.MODE_FIRMWARE-- 韌體更新模式;為fw_dump()與fw_update()所需。
備註
在 AP 模式下,WINC1500 有硬體限制:
一次只能有一個用戶端連線。
僅支援
OPEN或 WEP 安全性。WiFi 模組韌體的一個錯誤會導致用戶端中斷連線時,任何已繫結的 socket 停止運作。請在伺服器 socket 上設定逾時,使其拋出例外,讓你可以用來重新開啟它。
方法¶
- active(is_active: bool | None = None) bool¶
啟動或關閉 WiFi 擴充板。
若不帶引數,則傳回目前狀態 -- 擴充板已初始化且無線電已啟動時為
True,否則為False。active(True)透過 SPI 執行 WINC1500 韌體交握,並以設定的mode啟動無線電。如果介面已處於作用中狀態,則為無操作。connect()在尚未呼叫時會自動呼叫此方法;對於任何其他方法(scan()、rssi()、netinfo()、...),你必須先呼叫active(True)。active(False)將無線電關閉(WINC 降至僅 BSP 模式)並釋放 SPI 接腳。
- connect(ssid: str, key: str | None = None, *, security: int = WINC.WPA_PSK, channel: int = 1) None¶
在無線電
channel上,使用密碼key與安全性模式security(OPEN、WPA_PSK或 802.1X 常數之一),與 WiFi 網路ssid建立關聯。security與channel為僅限關鍵字引數。連線後,使用
socket模組來開啟 TCP/UDP 連接埠。此方法會阻塞直到關聯完成或失敗。
- start_ap(ssid: str, key: str | None = None, *, security: int = WINC.OPEN, channel: int = 1) None¶
connect()的別名,在以mode=MODE_AP建構物件後用來設定並啟動存取點。AP 僅支援OPEN或 WEP 安全性;若使用 WEP 則需要key。
- isconnected() bool¶
在 STA 模式下,當與存取點建立關聯 且 已取得 IPv4 位址(透過 DHCP 或
ifconfig())時,傳回True。在仍處於驗證/關聯/DHCP 階段時傳回False。
- wait_for_sta(timeout: int | None) List[str]¶
在 AP 模式下,阻塞直到有用戶端連線,並傳回一個包含該用戶端 IP 位址的清單。
timeout是以毫秒為單位的最長等待時間;傳入None則無限期等待。
- ifconfig(config: Tuple[str, str, str, str] | None = None) Tuple[str, str, str, str]¶
取得或設定 IPv4 介面參數。此 4 元組包含
(ip, subnet, gateway, dns),皆為點分四段字串。不帶引數呼叫時:傳回目前的設定。
以 4 元組呼叫時:設定一個靜態 IP 設定,以取代透過 DHCP 取得的設定。
範例 -- 在連線前固定一個靜態 IP::
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)
備註
WINC並未 實作現代的AbstractNIC.ipconfig()API;此處請使用ifconfig()。
- netinfo() Tuple[int, int, str, str, str]¶
傳回一個描述目前關聯的 5 元組:
[0]RSSI,以整數表示(dBm)。[1]安全性模式 -- 為安全性常數之一。[2]SSID 字串。[3]BSSID,以"XX:XX:XX:XX:XX:XX"MAC 字串表示。[4]IPv4 位址,以點分四段字串表示。
- scan() List[Tuple[str, str, int, int, int, int]]¶
掃描附近的存取點。傳回一個 6 元組的清單:
[0]SSID 字串。[1]BSSID,以"XX:XX:XX:XX:XX:XX"MAC 字串表示。[2]通道編號。[3]RSSI,以 dBm 表示。[4]安全性模式 -- 為安全性常數之一。[5]保留(恆為1)。
可在未先與網路建立關聯的情況下呼叫。
- rssi() int¶
傳回目前所關聯之存取點的 RSSI,以 dBm 表示。大致而言:
-30為極佳,-67對串流而言尚可,-80為勉強可用,-90及以下則無法使用。僅在 STA 模式下且isconnected()為True時有意義。
- fw_version() Tuple[int, int, int, int, int, int, int]¶
傳回一個描述 WINC1500 韌體與驅動程式版本的 7 元組:
[0]韌體主版本號。[1]韌體次版本號。[2]韌體修補號。[3]驅動程式主版本號。[4]驅動程式次版本號。[5]驅動程式修補號。[6]晶片硬體修訂版。
- fw_dump(path: str) None¶
讀取 WINC1500 的內部快閃記憶體,並將產生的韌體映像檔寫入 OpenMV 檔案系統上位於
path的檔案。在呼叫fw_update()之前,用此方法備份目前已安裝的映像檔。要求模組以
mode=MODE_FIRMWARE建構。
常數¶
- OPEN: int¶
未加密網路的安全性值。傳入
connect()/start_ap()的security引數。
備註
也存在一個 WPA/WPA2 企業版(802.1X)安全性值。韌體將其公開為名稱
802_1X,這不是有效的 Python 識別字 -- 請透過getattr(network.WINC, "802_1X")來存取。- MODE_FIRMWARE: int¶
韌體更新模式。為
fw_dump()與fw_update()所需。