OpenMV MicroPython OpenMV MicroPython OpenMV MicroPython
  • Início
  • Tutorial
  • Bibliotecas
  • Placas
  • Shields
  • Sensores
  • Idioma
  • CPython
  • Internos
  • Changelog
  • Licença
/
  • English
  • العربية
  • 简体中文
  • 繁體中文
  • Hrvatski
  • Čeština
  • Nederlands
  • Suomi
  • Français
  • Deutsch
  • עברית
  • Magyar
  • Bahasa Indonesia
  • Italiano
  • 日本語
  • 한국어
  • Polski
  • Português (Brasil)
  • Português (Portugal)
  • Română
  • Русский
  • Español
  • Svenska
  • ไทย
  • Türkçe
  • Українська
  • Tiếng Việt
  • Discussão
  • Tutorial
    • 1. Início rápido
    • 2. Visão geral do Python
    • 3. Controlo de Hardware
    • 4. Sensores de Visão
    • 5. Processamento de Imagem
    • 6. NumPy
    • 7. Aprendizagem Automática
    • 8. Asyncio
    • 9. Redes
      • 9.1. Porquê as redes
      • 9.2. Protocolos em camadas
      • 9.3. O cabo e o fotograma
      • 9.4. Estabelecer a ligação
      • 9.5. Endereços IP
      • 9.6. Pacotes e encaminhamento
      • 9.7. Redes privadas e NAT
      • 9.8. Portas
      • 9.9. UDP – envia um pacote e torce para o melhor
      • 9.10. TCP – um fluxo fiável de bytes
      • 9.11. Objetos socket
      • 9.12. Sockets UDP
      • 9.13. Sockets TCP
      • 9.14. Sockets com asyncio
      • 9.15. Nomes e DNS
      • 9.16. Tempo e NTP
      • 9.17. Sockets encriptados e TLS
      • 9.18. MQTT, byte a byte
      • 9.19. MQTT em Python
      • 9.20. Conclusão
    • 10. Servidores Web
    • 11. Bluetooth
    • 12. Protocolo do Host
    • 13. Ferramentas
    • 14. Produção
  • Bibliotecas
  • Placas
  • Shields
  • Sensores
  • Linguagem
  • CPython
  • Internos
  • Changelog
  • Licença

Nesta página

  • 9.4.1. O módulo network
  • 9.4.2. O fluxo Wi-Fi
  • 9.4.3. O que pode correr mal
  • 9.4.4. Manter a ligação
  • 9.4.5. Ethernet, quando presente
micropython-doc 0 0
Editar esta página
  1. OpenMV MicroPython /
  2. Tutorial da OpenMV Cam /
  3. 9. Redes /
  4. 9.4. Estabelecer a ligação
Ver Fonte Abrir no ChatGPT Abrir no Claude Abrir no Perplexity

9.4. Estabelecer a ligação¶

A camada de ligação abordada na página anterior é maioritariamente automática, mas há um ponto onde um script Python tem de intervir: dizer à câmara a que rede se juntar. Até que esse passo tenha êxito, nenhuma das funcionalidades de rede abordadas no resto desta secção funcionará.

9.4.1. O módulo network¶

O módulo network expõe o hardware de rede da câmara ao Python. O conjunto exato de interfaces depende da placa: muitas câmaras têm um chip sem fios e expõem uma classe WLAN (denominada para Wireless Local Area Network); algumas placas também têm uma porta Ethernet integrada e expõem uma classe LAN (denominada para Local Area Network, ou seja, a versão com fios). O padrão de uso é o mesmo para ambas, com uma diferença importante: uma interface sem fios tem de ser informada a que rede se juntar, enquanto a Ethernet recebe o que estiver no cabo.

9.4.2. O fluxo Wi-Fi¶

Juntar-se a uma rede Wi-Fi são três passos: construir a interface, ativá-la, pedir-lhe que se ligue a uma rede com nome e palavra-passe. A interface negoceia com o ponto de acesso em segundo plano; uma chamada isconnected() informa quando a ligação terminou de se estabelecer:

import network
import time

wlan = network.WLAN(network.WLAN.IF_STA)
wlan.active(True)
wlan.connect("my-network", "my-password")

while not wlan.isconnected():
    time.sleep_ms(100)

print("link up")

O argumento IF_STA seleciona o modo estação – a câmara junta-se a uma rede que outra entidade está a alojar. O modo oposto, IF_AP, faz a câmara alojar a sua própria pequena rede à qual outros dispositivos se podem juntar; útil para interfaces de configuração e configuração no local, mas não o caso comum.

Assim que isconnected() retornar True, a câmara está na rede. Todo o resto que as camadas superiores precisavam para se configurarem aconteceu automaticamente enquanto a ligação estava a estabelecer-se; as páginas seguintes explicam essas peças uma de cada vez.

9.4.3. O que pode correr mal¶

Alguns modos de falha práticos surgem neste passo.

  • Nome de rede ou palavra-passe errados. A tentativa de ligação repete silenciosamente até que a aplicação desista. Envolva a espera num tempo limite para que o ciclo acima não bloqueie para sempre:

    start = time.ticks_ms()
    while not wlan.isconnected():
        if time.ticks_diff(time.ticks_ms(), start) > 10000:
            raise OSError("Wi-Fi did not come up in 10 s")
        time.sleep_ms(100)
    
  • Fora de alcance. A câmara e o ponto de acesso têm de estar suficientemente próximos para que o sinal seja forte o suficiente para manter uma ligação. status() retorna um código indicando por que a ligação não está ativa; scan() retorna a lista de redes que o rádio consegue ver, que é o diagnóstico a executar quando connect não consegue ter êxito.

  • O ponto de acesso pede mais do que uma palavra-passe. As redes abertas (sem palavra-passe) e as protegidas por palavra-passe comuns são cobertas por connect como mostrado acima. Redes maiores em locais de trabalho e escolas por vezes usam um esquema diferente onde a câmara tem de se autenticar contra um servidor de login separado; estas precisam de argumentos adicionais para connect. Consulte class WLAN – controlo das interfaces WiFi integradas para a superfície completa.

9.4.4. Manter a ligação¶

Estabelecer a ligação é metade do problema. Manter a ligação é a outra metade – os pontos de acesso reiniciam, a câmara sai de alcance, as concessões DHCP expiram, o firmware do rádio fica ocasionalmente bloqueado. Uma câmara que vai viver na rede durante meses tem de notar isso e recuperar por conta própria.

O padrão de deteção é chamar isconnected() uma vez por iteração do ciclo principal e reagir quando retorna False. isconnected() pode mentir brevemente quando uma ligação caiu sem que o rádio ainda o tenha notado – um envio de socket que falha quando a ligação «devia» estar ativa é a outra evidência de uma quebra que a aplicação tem. status() é a fonte mais autoritativa quando os dois discordam.

O padrão de reconexão é disconnect() seguido de connect() com as mesmas credenciais, com a espera envolvida num tempo limite como na ligação inicial. Recue entre tentativas – um segundo, dois, quatro, duplicando até cerca de um minuto – para que uma interrupção longa não sobrecarregue o AP e não consuma o orçamento de energia do rádio em ciclos de espera activa:

import network
import time

_BACKOFF_S = (1, 2, 4, 8, 16, 32, 60)

def reconnect(wlan, ssid, password):
    for delay in _BACKOFF_S:
        wlan.disconnect()
        wlan.connect(ssid, password)
        deadline = time.ticks_add(time.ticks_ms(), 10_000)
        while not wlan.isconnected():
            if time.ticks_diff(deadline, time.ticks_ms()) < 0:
                break
            time.sleep_ms(100)
        if wlan.isconnected():
            return True
        time.sleep(delay)
    return False

Quando esse auxiliar continua a retornar False, o próprio firmware do rádio pode estar bloqueado. O último recurso é desligar e ligar novamente o rádio: active(False), uma breve pausa, active(True), reconectar do zero. Isto coloca o firmware do rádio de volta a um estado conhecido ao custo de alguns segundos extra de inatividade:

def radio_power_cycle(wlan, ssid, password):
    wlan.active(False)
    time.sleep(1)
    wlan.active(True)
    return reconnect(wlan, ssid, password)

Uma câmara que esteve fora da rede durante minutos é uma falha real que a aplicação tem de ver. O código de recuperação deve expor esse estado – marcar a rede como não saudável numa flag que o ciclo principal verifica, e deixar a aplicação ignorar os envios de rede que teria feito enquanto a flag está ativa – para que uma longa interrupção não paralise a aplicação à espera de sockets que nunca escreverão.

9.4.5. Ethernet, quando presente¶

As placas com Ethernet integrada expõem o mesmo padrão sem o passo connect. A interface LAN é ativada com active(), e assim que o cabo estiver ligado a interface está pronta a usar:

import network

lan = network.LAN()
lan.active(True)
print("link up")

A partir deste ponto, o resto das páginas desta secção aplica-se da mesma forma independentemente de qual interface colocou a câmara na rede. As camadas superiores não se importam se a ligação abaixo delas é Wi-Fi ou Ethernet – «ligado» é «ligado».

Para a referência completa de WLAN e LAN, incluindo os controlos de configuração que não couberam aqui, consulte network — configuração de rede.

Anterior
9.3. O cabo e o fotograma
Próximo
9.5. Endereços IP

Para o firmware OpenMV v5.0.0 · baseado em MicroPython v1.28 · documentação compilada em 18 de junho de 2026 · Copyright © 2014-2026 por OpenMV, Damien P. George e outros.

Criado com Sphinx usando o tema Shibuya.