class WINC – драйвер WiFi-модуля

Клас WINC керує модулем WiFi Atmel WINC1500 802.11 b/g/n на платі OpenMV WiFi Shield. Доступний на OpenMV Cam M4, M7, H7, H7 Plus та Pure Thermal (плати STM32, для яких розроблено WiFi Shield). Для плат із вбудованим 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 Shield.

mode вибирає режим роботи, в якому запускається модуль:

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

  • WINC.MODE_AP – режим точки доступу. Налаштуйте AP за допомогою start_ap(), після чого приймайте клієнтські з’єднання.

  • WINC.MODE_P2P – WiFi Direct.

  • WINC.MODE_BSP – лише ініціалізація BSP (без радіо).

  • WINC.MODE_FIRMWARE – режим оновлення мікропрограми; необхідний для fw_dump() та fw_update().

Примітка

У режимі AP мікросхема WINC1500 має апаратні обмеження:

  • Одночасно може підключатися лише один клієнт.

  • Підтримується лише безпека OPEN або WEP.

  • Помилка мікропрограми WiFi-модуля призводить до того, що всі прив’язані сокети перестають працювати після відключення клієнта. Встановіть тайм-аут на серверному сокеті, щоб він видавав виняток, за допомогою якого можна повторно відкрити його.

Методи

active(is_active: bool | None = None) bool

Вмикає або вимикає WiFi Shield.

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

active(True) виконує рукостискання мікропрограми WINC1500 через SPI та вмикає радіо в налаштованому mode. Є no-op, якщо інтерфейс вже активний. 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

Асоціює з WiFi-мережею ssid за допомогою пароля key, режиму безпеки security (одне зі значень OPEN, WPA_PSK або константи 802.1X) на радіоканалі channel. security і channel є лише ключовими аргументами.

Після підключення використовуйте модуль socket для відкриття TCP/UDP-портів.

Цей метод блокується до завершення або невдачі асоціації.

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

Псевдонім connect(). Надається для сумісності з кодом, який викликає config на інших інтерфейсах network.

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() для повторного підключення. Є no-op, коли не підключено.

isconnected() bool

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

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) у вигляді рядків dotted-quad.

Викликається без аргументу: повертає поточну конфігурацію.

Викликається з 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 не реалізує сучасний API AbstractNIC.ipconfig(); використовуйте тут ifconfig().

netinfo() Tuple[int, int, str, str, str]

Повертає 5-кортеж, що описує поточну асоціацію:

  • [0] RSSI у вигляді цілого числа (дБм).

  • [1] Режим безпеки – одна з констант безпеки.

  • [2] Рядок SSID.

  • [3] BSSID у вигляді рядка MAC "XX:XX:XX:XX:XX:XX".

  • [4] IPv4-адреса у вигляді рядка dotted-quad.

scan() List[Tuple[str, str, int, int, int, int]]

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

  • [0] Рядок SSID.

  • [1] BSSID у вигляді рядка MAC "XX:XX:XX:XX:XX:XX".

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

  • [3] RSSI в дБм.

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

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

Можна викликати без попередньої асоціації з мережею.

rssi() int

Повертає RSSI в дБм поточної асоційованої точки доступу. Приблизно: -30 – відмінно, -67 – прийнятно для потокового передавання, -80 – гранично, -90 і нижче – непридатно для використання. Має сенс лише в режимі STA, поки isconnected() повертає True.

fw_version() Tuple[int, int, int, int, int, int, int]

Повертає 7-кортеж, що описує версії мікропрограми та драйвера WINC1500:

  • [0] Основна версія мікропрограми.

  • [1] Мінорна версія мікропрограми.

  • [2] Патч-версія мікропрограми.

  • [3] Основна версія драйвера.

  • [4] Мінорна версія драйвера.

  • [5] Патч-версія драйвера.

  • [6] Версія апаратного ревізії мікросхеми.

fw_dump(path: str) None

Зчитує внутрішню флеш-пам’ять WINC1500 та записує отриманий образ мікропрограми у файл за шляхом path у файловій системі OpenMV. Використовуйте це для резервного копіювання поточно встановленого образу перед викликом 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

Значення безпеки для незашифрованої мережі. Передається в аргумент security методів connect() / start_ap().

WPA_PSK: int

Значення безпеки для WPA/WPA2 з попередньо спільним ключем. Значення за замовчуванням для connect().

Примітка

Також існує значення безпеки WPA/WPA2 Enterprise (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().