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 選擇模組啟動時所進入的運作模式:

備註

在 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 與安全性模式 securityOPENWPA_PSK 或 802.1X 常數之一),與 WiFi 網路 ssid 建立關聯。securitychannel 為僅限關鍵字引數。

連線後,使用 socket 模組來開啟 TCP/UDP 連接埠。

此方法會阻塞直到關聯完成或失敗。

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

connect() 的別名。為了與在其他 network 介面上呼叫 config 的程式碼相容而提供。

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

disconnect() None

在 STA 模式下,解除與目前所關聯之存取點的關聯。擴充板維持作用中狀態;呼叫 connect() 以重新建立關聯。當目前未關聯時為無操作。

isconnected() bool

在 STA 模式下,當與存取點建立關聯 已取得 IPv4 位址(透過 DHCP 或 ifconfig())時,傳回 True。在仍處於驗證/關聯/DHCP 階段時傳回 False

connected_sta() List[str]

在 AP 模式下,傳回一個包含目前已連線用戶端 IP 位址的清單(若無用戶端連線則為空清單)。

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 建構。

fw_update(path: str) None

抹除 WINC1500 的內部快閃記憶體,並將位於 path 的二進位映像檔燒錄進去。該映像檔必須符合 OpenMV 韌體所預期的配置(通常由 Atmel/Microchip 隨 WINC SDK 提供)。

此呼叫會在燒錄與驗證快閃記憶體期間阻塞數秒。呼叫返回後請將 OpenMV Cam 重新開機,使 WINC1500 從新映像檔啟動。

要求模組以 mode=MODE_FIRMWARE 建構。

常數

OPEN: int

未加密網路的安全性值。傳入 connect() / start_ap()security 引數。

WPA_PSK: int

使用預先共用金鑰的 WPA/WPA2 安全性值。為 connect() 的預設值。

備註

也存在一個 WPA/WPA2 企業版(802.1X)安全性值。韌體將其公開為名稱 802_1X,這不是有效的 Python 識別字 -- 請透過 getattr(network.WINC, "802_1X") 來存取。

MODE_STA: int

工作站模式 -- 以用戶端身分連線到存取點。為預設的建構子模式。

MODE_AP: int

存取點模式 -- WINC 成為用戶端所關聯的 AP。

MODE_P2P: int

WiFi-Direct(點對點)模式。

MODE_BSP: int

僅初始化 WINC 板級支援套件 -- 不開啟無線電。由韌體更新流程使用。

MODE_FIRMWARE: int

韌體更新模式。為 fw_dump()fw_update() 所需。