класс WLAN – управление встроенными интерфейсами WiFi¶
Класс WLAN управляет встроенными радиомодулями WiFi на современных камерах OpenMV Cam. Один и тот же класс является обёрткой над двумя разными низкоуровневыми драйверами в зависимости от WiFi-микроконтроллера платы:
CYW43 (модуль WiFi Infineon CYW43xxx производства Murata). Используется в 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– режим точки доступа. Настройте точку доступа с помощьюconfig()и принимайте подключения клиентов.
Один и тот же физический радиомодуль обслуживает оба интерфейса; создание одного не исключает использования другого.
Методы¶
- active(is_active: bool | None = None) bool¶
Включает или выключает радиомодуль WiFi.
Без аргументов возвращает текущее состояние –
True, пока радиомодуль включён, иначеFalse.active(True)включает питание WiFi-микроконтроллера, загружает его прошивку (CYW43 извлекает блоб прошивки из флеш-памяти; NINA проверяет версию уже прошитой прошивки) и поднимает netif lwIP для этого интерфейса. Все остальные методы –connect(),scan(),ipconfig()и им подобные – требуют, чтобы интерфейс был активен.active(False)снова выключает питание радиомодуля. На интерфейсе STA это также отсоединяет от текущей точки доступа и освобождает netif.
- connect(ssid: str, key: str | None = None, *, security: int = -1, bssid: bytes | None = None, channel: int = -1) None¶
Ассоциирует интерфейс STA с заданной точкой доступа.
ssid– SSID сети (строка или bytes).key– пароль / предварительно разделяемый ключ. ПередайтеNoneдля открытой сети.security(только по ключевому слову) – одна из константSEC_*.-1(значение по умолчанию) выбирает автоматически:SEC_OPEN, когдаkeyпуст, иSEC_WPA_WPA2в противном случае.bssid(только по ключевому слову, только CYW43) – ограничивает ассоциацию точкой доступа с этим 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 (bytes; пустой для скрытых сетей).[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)со строками в точечно-десятичной нотации.Примечание
Для нового кода предпочтительно использовать
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.
С одним позиционным строковым аргументом возвращает значение этого параметра. С именованными аргументами задаёт один или несколько параметров за раз – изменения, затрагивающие работающую точку доступа, приводят к её автоматической перезагрузке (выключению и повторному включению).
Пример:
# 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"– режим аутентификации точки доступа (одна изSEC_*)."mac"– MAC-адрес интерфейса (6bytes)."pm"– значение управления питанием."txpower"– мощность передачи в дБм."hostname"– имя хоста DHCP/mDNS. Устарело; используйте вместо негоnetwork.hostname().
Драйвер CYW43 – задаваемые параметры:
antenna=<int>– селектор антенны.channel=<int>– канал точки доступа.ssid=<str>/essid=<str>– SSID точки доступа.key=<str>/password=<str>– предварительно разделяемый ключ точки доступа.security=<int>– режим аутентификации точки доступа (одна изSEC_*).pm=<int>– режим управления питанием (один изPM_NONE,PM_PERFORMANCE,PM_POWERSAVE).monitor=<int>– включить режим мониторинга / приёма всего multicast-трафика.txpower=<int>– мощность передачи в дБм.trace=<int>– внутренняя битовая маска трассировки драйвера.hostname=<str>– имя хоста DHCP/mDNS. Устарело; используйте вместо негоnetwork.hostname().
Драйвер NINA – получаемые параметры:
"ssid"– текущий SSID (строка)."security"– режим аутентификации точки доступа."mac"/"bssid"– MAC-адрес интерфейса (6bytes)."fw_version"– кортеж из 3 элементов(major, minor, patch).
Драйвер NINA – задаваемые параметры: вызов перенаправляется в
connect()и принимает те же именованные аргументы (ssid,key,security,channel). Допустимо только на интерфейсе AP.
- deinit() None¶
Перезапускает по питанию WiFi-микроконтроллер и освобождает все ресурсы, удерживаемые драйвером (буферы прошивки, netif lwIP, шину 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.
- SEC_WPA_WPA2: int¶
Значение безопасности для WPA / WPA2 с предварительно разделяемым ключом. Значение по умолчанию, когда в
connect()передаётся ключ. Доступно в обоих драйверах.
- SEC_WPA3: int¶
Значение безопасности для WPA3 (SAE) с предварительно разделяемым ключом. Только 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.