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.