клас WLAN – керування вбудованими WiFi-інтерфейсами

Клас WLAN керує вбудованими WiFi-радіомодулями на сучасних OpenMV Cam. Один і той самий клас обгортає два різних базових драйвери залежно від WiFi-мікросхеми плати:

  • CYW43 (модуль Infineon CYW43xxx Murata WiFi). Використовується на OpenMV Cam N6, OpenMV Cam RT1062, Arduino Portenta H7, Arduino Nicla Vision та Arduino Giga R1 WiFi.

  • NINA W10 (u-blox NINA-W10 / ESP32-WROOM). Використовується на Arduino Nano RP2040 Connect.

Обидва драйвери надають однакові назви методів, але відрізняються деякими аргументами та набором підтримуваних ключів config(). Відмінності позначено нижче.

Камери OpenMV зі старим WiFi-щитом WINC1500 (M4 / M7 / H7 / H7 Plus / Pure Thermal) використовують WINC замість цього класу.

Приклад використання:

import network

# Enable the station interface and connect to a WiFi AP.
nic = network.WLAN(network.WLAN.IF_STA)
nic.active(True)
nic.connect("your-ssid", "your-key")
while not nic.isconnected():
    pass

print(nic.ipconfig("addr4"))

Конструктори

class network.WLAN(interface_id: int = WLAN.IF_STA) None

Створює об’єкт інтерфейсу WLAN.

interface_id вибирає інтерфейс для роботи:

  • WLAN.IF_STA – режим станції / клієнта. Підключення до зовнішньої точки доступу за допомогою connect(). Це режим за замовчуванням.

  • WLAN.IF_AP – режим точки доступу. Налаштуйте AP за допомогою config() і приймайте підключення клієнтів.

Обидва інтерфейси використовують один і той самий фізичний радіомодуль; створення одного не перешкоджає іншому.

Методи

active(is_active: bool | None = None) bool

Вмикає або вимикає WiFi-радіомодуль.

Без аргументу повертає поточний стан – True, якщо радіомодуль активний, False інакше.

active(True) вмикає живлення WiFi-мікросхеми, завантажує її мікропрограму (CYW43 отримує blob мікропрограми з флеш-пам’яті; NINA перевіряє версію вже прошитої мікропрограми) та піднімає lwIP netif для цього інтерфейсу. Всі інші методи – connect(), scan(), ipconfig() та інші – вимагають, щоб інтерфейс був активний.

active(False) вимикає радіомодуль. На STA-інтерфейсі це також від’єднує від поточної AP та звільняє netif.

connect(ssid: str, key: str | None = None, *, security: int = -1, bssid: bytes | None = None, channel: int = -1) None

Підключає STA-інтерфейс до зазначеної точки доступу.

ssid – SSID мережі (рядок або байти).

key – пароль / попередньо узгоджений ключ. Передайте None для відкритої мережі.

security (лише ключове слово) – одна з констант SEC_*. -1 (за замовчуванням) обирає автоматично: SEC_OPEN, якщо key порожній, або SEC_WPA_WPA2 інакше.

bssid (лише ключове слово, лише CYW43) – обмежує підключення до AP з цією 6-байтовою MAC-адресою. Драйвером NINA ігнорується.

channel (лише ключове слово) – бажаний радіоканал. За замовчуванням «дозволити драйверу вибрати».

disconnect() None

У режимі STA від’єднується від поточної точки доступу. Інтерфейс залишається активним; викличте connect() знову для повторного підключення або active() (False) для повного вимкнення радіомодуля. Не виконує жодних дій, якщо зараз не підключено.

isconnected() bool

У режимі STA повертає True, якщо підключено до точки доступу і отримано адресу IPv4 від DHCP (або призначено статично через ipconfig()). Повертає False поки тривають фази аутентифікації/асоціації/DHCP.

У режимі AP повертає True, якщо до нього приєдналась хоча б одна станція.

scan(*, passive: bool = False, ssid: bytes | None = None, bssid: bytes | None = None) List[Tuple[bytes, bytes, int, int, int, int]]

Сканує навколишні точки доступу та повертає список 6-кортежів:

  • [0] SSID (байти; порожньо для прихованих мереж).

  • [1] BSSID (6-байтова MAC, bytes). Перетворіть за допомогою binascii.hexlify().

  • [2] Номер каналу.

  • [3] RSSI в дБм.

  • [4] Режим безпеки (одна з констант SEC_*).

  • [5] Зарезервовано (завжди 1).

Усі ключові аргументи стосуються лише CYW43:

  • passive – якщо True, використовує пасивне сканування замість активного сканування з probe-request за замовчуванням.

  • ssid – обмежує сканування одним SSID.

  • bssid – обмежує сканування одним BSSID.

Сканування має сенс лише на STA-інтерфейсі.

status() int
status(param: str) Any

Запит статусу підключення.

Без аргументу повертає статус з’єднання як мале ціле число (кодування, специфічне для драйвера – ненульове значення означає «підключено»).

З рядковим аргументом:

  • "rssi" – у режимі STA повертає поточний RSSI в дБм.

  • "stations" – у режимі AP повертає список підключених станцій. CYW43 повертає [(mac_bytes,), ...]; NINA повертає [ip_string, ...].

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

Отримує або задає параметри IPv4-інтерфейсу у вигляді 4-кортежу рядків (ip, subnet, gateway, dns) у форматі dotted-quad.

Примітка

Для нового коду надавайте перевагу ipconfig()

nic.ipconfig(addr4="192.168.0.4/24", gw4="192.168.0.1")
network.ipconfig(dns="8.8.8.8")
ipconfig(param: str) Any
ipconfig(**kwargs: Any) None

Отримує або задає параметри інтерфейсу IPv4 / IPv6. Драйвер CYW43 делегує до стандартної реалізації lwIP та підтримує повний набір ключів, задокументованих у AbstractNIC.ipconfig(). Драйвер NINA реалізує менший підмножину на рівні інтерфейсу – dhcp4 та has_dhcp4 (лише читання), а також addr4 та gw4 для отримання / встановлення.

config(param: str) Any
config(**kwargs: Any) None

Отримує або задає специфічні для WiFi параметри інтерфейсу.

З одним позиційним рядковим аргументом повертає значення цього параметра. З ключовими аргументами встановлює один або кілька параметрів одночасно – зміни, що впливають на працюючу AP, призводять до автоматичного перезапуску AP.

Приклад:

# Set up the access-point name and channel.
ap.config(ssid="My AP", channel=11)
# Query params one at a time.
print(ap.config("ssid"))
print(ap.config("mac"))

Драйвер CYW43 – параметри, що можна отримати:

  • "antenna" – селектор антени (int).

  • "channel" – поточний канал.

  • "ssid" / "essid" – поточний SSID (рядок).

  • "security" – режим аутентифікації AP (одна з SEC_*).

  • "mac" – MAC-адреса інтерфейсу (6 bytes).

  • "pm" – значення керування живленням.

  • "txpower" – потужність передачі в дБм.

  • "hostname" – ім’я хоста DHCP/mDNS. Застаріло; використовуйте натомість network.hostname().

Драйвер CYW43 – параметри, що можна встановити:

  • antenna=<int> – селектор антени.

  • channel=<int> – канал AP.

  • ssid=<str> / essid=<str> – SSID AP.

  • key=<str> / password=<str> – попередньо узгоджений ключ AP.

  • security=<int> – режим аутентифікації AP (одна з SEC_*).

  • pm=<int> – режим керування живленням (одне з PM_NONE, PM_PERFORMANCE, PM_POWERSAVE).

  • monitor=<int> – увімкнення режиму монітора / all-multicast.

  • txpower=<int> – потужність передачі в дБм.

  • trace=<int> – внутрішня маска трасування драйвера.

  • hostname=<str> – ім’я хоста DHCP/mDNS. Застаріло; використовуйте натомість network.hostname().

Драйвер NINA – параметри, що можна отримати:

  • "ssid" – поточний SSID (рядок).

  • "security" – режим аутентифікації AP.

  • "mac" / "bssid" – MAC-адреса інтерфейсу (6 bytes).

  • "fw_version" – 3-кортеж (major, minor, patch).

Драйвер NINA – параметри, що можна встановити: виклик перенаправляється до connect() і приймає ті самі ключові аргументи (ssid, key, security, channel). Дійсно лише для AP-інтерфейсу.

deinit() None

Перезапускає WiFi-мікросхему та звільняє всі ресурси, що утримує драйвер (буфери мікропрограми, lwIP netif, шина SPI/SDIO). Після виклику об’єкт WLAN необхідно відтворити перед використанням. Використовуйте це замість active() (False), коли потрібне повне скидання (наприклад, перед повторним прошиванням мікропрограми радіомодуля або для відновлення після зависання драйвера). Лише CYW43.

send_ethernet(buf: bytes) None

Вводить необроблений кадр Ethernet buf безпосередньо в шлях передачі драйвера, обходячи IP-стек. Призначено для споживачів лише рівня L2 – мостування, власні протоколи EtherType тощо. Кадр повинен містити MAC призначення/джерела та EtherType (без FCS – апаратне забезпечення додає його). Лише CYW43.

ioctl(cmd: int, buf: bytearray) None

Виконує специфічну для драйвера керуючу команду. cmd – це числовий код ioctl, визначений базовою мікропрограмою радіомодуля, а buf – мутований буфер, що використовується як для корисного навантаження команди, так і для відповіді. Набір допустимих значень cmd є специфічним для драйвера і не є переносимим між CYW43 та NINA. Використовується переважно низькорівневими тестовими скриптами та кодом початкового запуску мікросхеми.

Константи

IF_STA: int

Ідентифікатор інтерфейсу станції / клієнта. Передайте конструктору для вибору режиму STA.

IF_AP: int

Ідентифікатор інтерфейсу точки доступу. Передайте конструктору для вибору режиму AP.

SEC_OPEN: int

Значення безпеки для незашифрованої мережі. Доступне на обох драйверах.

SEC_WPA_WPA2: int

Значення безпеки для WPA / WPA2 з попередньо узгодженим ключем. Використовується за замовчуванням, коли ключ передається до connect(). Доступне на обох драйверах.

SEC_WPA3: int

Значення безпеки для WPA3 (SAE) з попередньо узгодженим ключем. Лише CYW43.

SEC_WPA2_WPA3: int

Значення безпеки для перехідного режиму WPA2 / WPA3. Лише CYW43.

SEC_WEP: int

Значення безпеки для WEP (Wired Equivalent Privacy). Надається для сумісності зі старими точками доступу – WEP криптографічно зламаний і не повинен використовуватись у нових розгортаннях. Лише NINA.

OPEN: int

Псевдонім для сумісності з SEC_OPEN. Новий код має використовувати SEC_OPEN. Лише NINA.

WEP: int

Псевдонім для сумісності з SEC_WEP. Новий код має використовувати SEC_WEP. Лише NINA.

WPA_PSK: int

Псевдонім для сумісності з SEC_WPA_WPA2. Новий код має використовувати SEC_WPA_WPA2. Лише NINA.

PM_NONE: int

Передайте до config(pm=...) для вимкнення керування живленням WiFi. Лише CYW43.

PM_PERFORMANCE: int

Передайте до config(pm=...) для увімкнення керування живленням WiFi, оптимізованого для продуктивності. Лише CYW43.

PM_POWERSAVE: int

Передайте до config(pm=...) для увімкнення керування живленням WiFi, оптимізованого для максимального терміну роботи від батареї. Лише CYW43.