clase WLAN – controla las interfaces WiFi integradas

La clase WLAN gobierna las radios WiFi integradas en las OpenMV Cam modernas. La misma clase envuelve dos controladores subyacentes diferentes según el MCU WiFi de la placa:

  • CYW43 (módulo WiFi Infineon CYW43xxx de Murata). Usado por la OpenMV Cam N6, la OpenMV Cam RT1062, la Arduino Portenta H7, la Arduino Nicla Vision y la Arduino Giga R1 WiFi.

  • NINA W10 (u-blox NINA-W10 / ESP32-WROOM). Usado por la Arduino Nano RP2040 Connect.

Ambos controladores exponen los mismos nombres de métodos pero difieren en algunos argumentos y en el conjunto de claves de config() aceptadas. Las diferencias se señalan a continuación.

Las cámaras OpenMV con un shield WiFi WINC1500 heredado (M4 / M7 / H7 / H7 Plus / Pure Thermal) usan WINC en su lugar.

Ejemplo de uso:

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"))

Constructores

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

Crea un objeto de interfaz WLAN.

interface_id selecciona sobre qué interfaz operar:

  • WLAN.IF_STA – modo estación / cliente. Conéctate a un punto de acceso superior con connect(). Este es el valor predeterminado.

  • WLAN.IF_AP – modo punto de acceso. Configura el AP con config() y acepta conexiones de clientes.

La misma radio física respalda ambas interfaces; construir una no impide la otra.

Métodos

active(is_active: bool | None = None) bool

Activa o desactiva la radio WiFi.

Sin argumentos, devuelve el estado actual – True mientras la radio está activa, False en caso contrario.

active(True) alimenta el MCU WiFi, carga su firmware (CYW43 obtiene el blob de firmware desde la memoria flash; NINA valida la versión de firmware actualmente grabada) y levanta la netif de lwIP para esta interfaz. Todos los demás métodos – connect(), scan(), ipconfig() y similares – requieren que la interfaz esté activa.

active(False) vuelve a apagar la radio. En la interfaz STA esto también desasocia del AP actual y libera la netif.

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

Asocia la interfaz STA con el punto de acceso indicado.

ssid – el SSID de la red (cadena o bytes).

key – contraseña / clave precompartida. Pasa None para una red abierta.

security (solo por palabra clave) – una de las constantes SEC_*. -1 (el valor predeterminado) selecciona automáticamente: SEC_OPEN cuando key está vacía, SEC_WPA_WPA2 en caso contrario.

bssid (solo por palabra clave, solo CYW43) – restringe la asociación al AP con esta dirección MAC de 6 bytes. El controlador NINA lo ignora.

channel (solo por palabra clave) – canal de radio preferido. El valor predeterminado es «que el controlador elija».

disconnect() None

En modo STA, desasocia del punto de acceso actualmente asociado. La interfaz permanece activa; llama a connect() de nuevo para volver a asociar, o a active() (False) para apagar la radio por completo. No hace nada cuando no hay una asociación actual.

isconnected() bool

En modo STA devuelve True cuando está asociado a un punto de acceso y se ha obtenido una dirección IPv4 mediante DHCP (o asignada estáticamente a través de ipconfig()). Devuelve False mientras el enlace está todavía en la fase de autenticación/asociación/DHCP.

En modo AP devuelve True cuando al menos una estación se ha unido.

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

Busca puntos de acceso cercanos y devuelve una lista de tuplas de 6 elementos:

  • [0] SSID (bytes; vacío para redes ocultas).

  • [1] BSSID (MAC de 6 bytes, bytes). Conviértelo con binascii.hexlify().

  • [2] Número de canal.

  • [3] RSSI en dBm.

  • [4] Modo de seguridad (una de las constantes SEC_*).

  • [5] Reservado (siempre 1).

Todos los argumentos de palabra clave son solo para CYW43:

  • passive – si es True, usa un escaneo pasivo en lugar del escaneo activo predeterminado por solicitud de sondeo.

  • ssid – restringe el escaneo a un único SSID.

  • bssid – restringe el escaneo a un único BSSID.

El escaneo solo tiene sentido en una interfaz STA.

status() int
status(param: str) Any

Consulta el estado de la conexión.

Sin argumentos, devuelve el estado del enlace como un entero pequeño (codificación específica del controlador – un valor verdadero significa «asociado»).

Con un argumento de cadena:

  • "rssi" – en modo STA, devuelve el RSSI actual en dBm.

  • "stations" – en modo AP, devuelve una lista de estaciones conectadas. CYW43 devuelve [(mac_bytes,), ...]; NINA devuelve [ip_string, ...].

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

Obtiene o establece los parámetros IPv4 de la interfaz como una tupla de 4 elementos de cadenas en notación de cuádruple punto (ip, subnet, gateway, dns).

Nota

Prefiere ipconfig() para código nuevo:

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

Obtiene o establece los parámetros IPv4 / IPv6 de la interfaz. El controlador CYW43 delega en la implementación estándar de lwIP y admite el conjunto completo de claves documentado en AbstractNIC.ipconfig(). El controlador NINA implementa un subconjunto más pequeño por interfaz – dhcp4 y has_dhcp4 (solo lectura), además de addr4 y gw4 para obtener / establecer.

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

Obtiene o establece los parámetros de la interfaz específicos de WiFi.

Con un único argumento posicional de cadena, devuelve el valor de ese parámetro. Con argumentos de palabra clave, establece uno o más parámetros a la vez – los cambios que afectan a un AP en ejecución hacen que el AP se apague y se vuelva a levantar automáticamente.

Ejemplo:

# 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"))

Controlador CYW43 – parámetros obtenibles:

  • "antenna" – selector de antena (entero).

  • "channel" – canal actual.

  • "ssid" / "essid" – el SSID actual (cadena).

  • "security" – el modo de autenticación del AP (uno de SEC_*).

  • "mac" – dirección MAC de la interfaz (6 bytes).

  • "pm" – valor de gestión de energía.

  • "txpower" – potencia de transmisión en dBm.

  • "hostname" – nombre de host DHCP/mDNS. Obsoleto; usa network.hostname() en su lugar.

Controlador CYW43 – parámetros configurables:

  • antenna=<int> – selector de antena.

  • channel=<int> – canal del AP.

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

  • key=<str> / password=<str> – clave precompartida del AP.

  • security=<int> – modo de autenticación del AP (uno de SEC_*).

  • pm=<int> – modo de gestión de energía (uno de PM_NONE, PM_PERFORMANCE, PM_POWERSAVE).

  • monitor=<int> – habilita el modo monitor / multidifusión total.

  • txpower=<int> – potencia de transmisión en dBm.

  • trace=<int> – máscara de bits de trazado interno del controlador.

  • hostname=<str> – nombre de host DHCP/mDNS. Obsoleto; usa network.hostname() en su lugar.

Controlador NINA – parámetros obtenibles:

  • "ssid" – el SSID actual (cadena).

  • "security" – el modo de autenticación del AP.

  • "mac" / "bssid" – dirección MAC de la interfaz (6 bytes).

  • "fw_version" – una tupla de 3 elementos (major, minor, patch).

Controlador NINA – parámetros configurables: la llamada se reenvía a connect() y acepta los mismos argumentos de palabra clave (ssid, key, security, channel). Solo válido en la interfaz AP.

deinit() None

Reinicia la alimentación del MCU WiFi y libera todos los recursos que mantiene el controlador (búferes de firmware, netif de lwIP, bus SPI/SDIO). Después de llamar a esto, el objeto WLAN debe reconstruirse antes de usarse. Usa esto en lugar de active() (False) cuando necesites un reinicio completo (por ejemplo, antes de regrabar el firmware de la radio o para recuperarte de un estado bloqueado del controlador). Solo CYW43.

send_ethernet(buf: bytes) None

Inyecta el fotograma Ethernet sin procesar buf directamente en la ruta de transmisión del controlador, evitando la pila IP. Pensado para consumidores de solo L2 – puentes, protocolos EtherType personalizados y similares. El fotograma debe incluir las MAC de destino/origen y el EtherType (sin FCS – el hardware lo añade). Solo CYW43.

ioctl(cmd: int, buf: bytearray) None

Emite un comando de control específico del controlador. cmd es el código ioctl numérico definido por el firmware de la radio subyacente y buf es un búfer mutable usado tanto para la carga útil del comando como para la respuesta. El conjunto de valores cmd válidos es específico del controlador y no es portable entre CYW43 y NINA. Lo usan principalmente los scripts de prueba de bajo nivel y el código de puesta en marcha del chip.

Constantes

IF_STA: int

Identificador de la interfaz de estación / cliente. Pásalo al constructor para seleccionar el modo STA.

IF_AP: int

Identificador de la interfaz de punto de acceso. Pásalo al constructor para seleccionar el modo AP.

SEC_OPEN: int

Valor de seguridad para una red sin cifrar. Disponible en ambos controladores.

SEC_WPA_WPA2: int

Valor de seguridad para WPA / WPA2 con una clave precompartida. El valor predeterminado cuando se proporciona una clave a connect(). Disponible en ambos controladores.

SEC_WPA3: int

Valor de seguridad para WPA3 (SAE) con una clave precompartida. Solo CYW43.

SEC_WPA2_WPA3: int

Valor de seguridad para el modo de transición WPA2 / WPA3. Solo CYW43.

SEC_WEP: int

Valor de seguridad para WEP (Wired Equivalent Privacy). Se proporciona por compatibilidad con puntos de acceso heredados – WEP está roto criptográficamente y no debe usarse en implementaciones nuevas. Solo NINA.

OPEN: int

Alias de retrocompatibilidad para SEC_OPEN. El código nuevo debe usar SEC_OPEN. Solo NINA.

WEP: int

Alias de retrocompatibilidad para SEC_WEP. El código nuevo debe usar SEC_WEP. Solo NINA.

WPA_PSK: int

Alias de retrocompatibilidad para SEC_WPA_WPA2. El código nuevo debe usar SEC_WPA_WPA2. Solo NINA.

PM_NONE: int

Pásalo a config(pm=...) para deshabilitar la gestión de energía WiFi. Solo CYW43.

PM_PERFORMANCE: int

Pásalo a config(pm=...) para habilitar la gestión de energía WiFi ajustada para el rendimiento. Solo CYW43.

PM_POWERSAVE: int

Pásalo a config(pm=...) para habilitar la gestión de energía WiFi ajustada para la máxima duración de la batería. Solo CYW43.