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-шилд). Для плат со встроенным 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(), затем принимайте подключения клиентов.

  • 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-шилд.

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

active(True) выполняет квитирование с прошивкой WINC1500 по SPI и поднимает радио в настроенном режиме 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

Ассоциируется с 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 для настройки и запуска точки доступа. Точка доступа поддерживает только защиту OPEN или WEP; если используется WEP, требуется key.

disconnect() None

В режиме STA отсоединяется от текущей ассоциированной точки доступа. Шилд остаётся активным; вызовите connect() для повторной ассоциации. Не выполняет никаких действий, если в данный момент нет ассоциации.

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) в виде строк в формате с точками.

Вызванный без аргумента: возвращает текущую конфигурацию.

Вызванный с кортежем из 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 в виде строки в формате с точками.

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 становится точкой доступа, с которой ассоциируются клиенты.

MODE_P2P: int

Режим WiFi-Direct (одноранговый).

MODE_BSP: int

Инициализирует только пакет поддержки платы WINC – радио не поднимается. Используется в процессе обновления прошивки.

MODE_FIRMWARE: int

Режим обновления прошивки. Требуется для fw_dump() и fw_update().