class WINC – driver do shield WiFi

A classe WINC controla o módulo WiFi 802.11 b/g/n Atmel WINC1500 no OpenMV WiFi Shield. Disponível na OpenMV Cam M4, M7, H7, H7 Plus e Pure Thermal (as placas STM32 para as quais o WiFi shield foi projetado). Para placas com WiFi integrado (OpenMV Cam N6, OpenMV Cam RT1062, Arduino Giga) use WLAN em vez disso.

Exemplo – conectar a um ponto de acesso e imprimir o endereço:

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

Exemplo – ativar um ponto de acesso aberto e esperar por um cliente:

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

Construtores

class network.WINC(mode: int = WINC.MODE_STA) None

Cria um objeto driver WINC e ativa o WiFi shield.

mode seleciona o modo de operação em que o módulo inicia:

Nota

No modo AP, o WINC1500 tem limitações de hardware:

  • Apenas um cliente pode se conectar por vez.

  • Apenas segurança OPEN ou WEP são suportadas.

  • Um bug no firmware do módulo WiFi faz com que quaisquer sockets vinculados parem de funcionar quando o cliente se desconecta. Defina um timeout no socket do servidor para que ele lance uma exceção que você possa usar para reabri-lo.

Métodos

active(is_active: bool | None = None) bool

Ativa ou desativa o WiFi shield.

Sem argumento, retorna o estado atual – True enquanto o shield está inicializado e o rádio está ativo, False caso contrário.

active(True) realiza o handshake de firmware do WINC1500 via SPI e ativa o rádio no mode configurado. Não tem efeito se a interface já estiver ativa. connect() chama isto automaticamente se ainda não tiver sido chamado; para qualquer outro método (scan(), rssi(), netinfo(), …) você deve chamar active(True) primeiro.

active(False) desliga o rádio novamente (o WINC volta ao modo apenas-BSP) e libera os pinos SPI.

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

Associa-se à rede WiFi ssid usando a senha key, o modo de segurança security (um de OPEN, WPA_PSK ou a constante 802.1X) no canal de rádio channel. security e channel são somente nomeados.

Após conectar, use o módulo socket para abrir portas TCP/UDP.

Este método bloqueia até que a associação seja concluída ou falhe.

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

Apelido de connect(). Fornecido para compatibilidade com código que chama config em outras interfaces network.

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

Apelido de connect() usado após construir o objeto com mode=MODE_AP para configurar e iniciar o ponto de acesso. O AP suporta apenas segurança OPEN ou WEP; se WEP for usado, key é obrigatório.

disconnect() None

No modo STA, desassocia-se do ponto de acesso atualmente associado. O shield permanece ativo; chame connect() para se reassociar. Não tem efeito quando não há associação atual.

isconnected() bool

No modo STA, retorna True quando associado a um ponto de acesso e um endereço IPv4 foi obtido (via DHCP ou ifconfig()). Retorna False enquanto ainda estiver na fase de autenticação / associação / DHCP.

connected_sta() List[str]

No modo AP, retorna uma lista contendo o endereço IP do cliente atualmente conectado (ou uma lista vazia se nenhum cliente estiver conectado).

wait_for_sta(timeout: int | None) List[str]

No modo AP, bloqueia até que um cliente se conecte e retorna uma lista contendo o endereço IP do cliente. timeout é a espera máxima em milissegundos; passe None para esperar indefinidamente.

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

Obtém ou define os parâmetros IPv4 da interface. A 4-tupla contém (ip, subnet, gateway, dns) como strings em quádruplo decimal.

Chamado sem argumento: retorna a configuração atual.

Chamado com uma 4-tupla: define uma configuração de IP estático no lugar daquela obtida por DHCP.

Exemplo – fixar um IP estático antes de conectar:

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)

Nota

WINC não implementa a API moderna AbstractNIC.ipconfig(); use ifconfig() aqui.

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

Retorna uma 5-tupla descrevendo a associação atual:

  • [0] RSSI como um inteiro (dBm).

  • [1] Modo de segurança – uma das constantes de segurança.

  • [2] String do SSID.

  • [3] BSSID como uma string MAC "XX:XX:XX:XX:XX:XX".

  • [4] Endereço IPv4 como uma string em quádruplo decimal.

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

Procura por pontos de acesso próximos. Retorna uma lista de 6-tuplas:

  • [0] String do SSID.

  • [1] BSSID como uma string MAC "XX:XX:XX:XX:XX:XX".

  • [2] Número do canal.

  • [3] RSSI em dBm.

  • [4] Modo de segurança – uma das constantes de segurança.

  • [5] Reservado (sempre 1).

Pode ser chamado sem se associar primeiro a uma rede.

rssi() int

Retorna o RSSI em dBm do ponto de acesso atualmente associado. Aproximadamente: -30 é excelente, -67 é OK para streaming, -80 é marginal, -90 e abaixo é inutilizável. Só é significativo no modo STA enquanto isconnected() for True.

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

Retorna uma 7-tupla descrevendo as versões de firmware e driver do WINC1500:

  • [0] Maior do firmware.

  • [1] Menor do firmware.

  • [2] Patch do firmware.

  • [3] Maior do driver.

  • [4] Menor do driver.

  • [5] Patch do driver.

  • [6] Revisão de hardware do chip.

fw_dump(path: str) None

Lê a flash interna do WINC1500 e grava a imagem de firmware resultante no arquivo em path no sistema de arquivos da OpenMV. Use isto para fazer backup da imagem atualmente instalada antes de chamar fw_update().

Requer que o módulo tenha sido construído com mode=MODE_FIRMWARE.

fw_update(path: str) None

Apaga a flash interna do WINC1500 e a programa com a imagem binária em path. A imagem deve corresponder ao layout esperado pelo firmware da OpenMV (normalmente fornecido pela Atmel / Microchip com o WINC SDK).

A chamada bloqueia por vários segundos enquanto a flash é programada e verificada. Desligue e religue a OpenMV Cam após o retorno da chamada para que o WINC1500 inicie a partir da nova imagem.

Requer que o módulo tenha sido construído com mode=MODE_FIRMWARE.

Constantes

OPEN: int

Valor de segurança para uma rede sem criptografia. Passe para o argumento security de connect() / start_ap().

WPA_PSK: int

Valor de segurança para WPA/WPA2 com uma chave pré-compartilhada. O padrão de connect().

Nota

Também existe um valor de segurança WPA/WPA2 Enterprise (802.1X). O firmware o expõe sob o nome 802_1X, que não é um identificador Python válido – acesse-o via getattr(network.WINC, "802_1X").

MODE_STA: int

Modo estação – conecta-se a um ponto de acesso como cliente. O modo padrão do construtor.

MODE_AP: int

Modo ponto de acesso – o WINC se torna o AP com o qual os clientes se associam.

MODE_P2P: int

Modo WiFi-Direct (ponto a ponto).

MODE_BSP: int

Inicializa apenas o pacote de suporte à placa do WINC – o rádio não é ativado. Usado pelo fluxo de atualização de firmware.

MODE_FIRMWARE: int

Modo de atualização de firmware. Exigido por fw_dump() e fw_update().