network — configuração de rede¶
Este módulo fornece drivers de rede e configuração de roteamento. Para usar este módulo, é preciso ter instalado um build/variante do MicroPython com capacidades de rede. Os drivers de rede para hardware específico estão disponíveis dentro deste módulo e são usados para configurar a(s) interface(s) de rede do hardware. Os serviços de rede fornecidos pelas interfaces configuradas ficam então disponíveis para uso através do módulo socket.
Por exemplo:
import network
import socket
import time
nic = network.WLAN(network.WLAN.IF_STA)
nic.active(True)
nic.connect("your-ssid", "your-key")
print("Waiting for connection...")
while not nic.isconnected():
time.sleep(1)
print(nic.ipconfig("addr4"))
# Open a TCP socket as usual.
addr = socket.getaddrinfo("micropython.org", 80)[0][-1]
s = socket.socket()
s.connect(addr)
s.send(b"GET / HTTP/1.1\r\nHost: micropython.org\r\n\r\n")
data = s.recv(1000)
s.close()
Substitua WLAN por WINC (shield WiFi legado) ou LAN (Ethernet integrado) conforme apropriado para a câmera. O padrão de alto nível construir -> ativar -> conectar -> usar sockets é o mesmo nos três casos.
Interface comum de adaptador de rede¶
Esta seção descreve uma classe base abstrata (implícita) para todas as classes de interface de rede implementadas pelos ports do MicroPython para diferentes hardwares. Isso significa que o MicroPython não fornece de fato uma classe AbstractNIC, mas qualquer classe NIC real, como descrito nas seções seguintes, implementa os métodos aqui descritos.
- class network.AbstractNIC(id: int | None = None, *args: Any, **kwargs: Any) None¶
Instancia um objeto de interface de rede. Os parâmetros dependem da interface de rede. Se houver mais de uma interface do mesmo tipo, o primeiro parâmetro deve ser
id.- active(is_active: bool | None = None, /) bool¶
Liga ou desliga a interface de rede.
Sem argumento, retorna o estado atual –
Trueenquanto a interface está ativa,Falsecaso contrário.Passe
Truepara ativar a interface: liga / reinicia o controlador de rede subjacente, carrega o firmware quando aplicável e ativa a pilha IP nesta interface. Chamadas subsequentes que se comunicam com a rede (connect(),scan(),ipconfig(), …) exigem que a interface esteja ativa.Passe
Falsepara desativar a interface: desativa a pilha IP e libera os recursos do driver. Em interfaces sem fio isso também desassocia de qualquer rede atualmente conectada.O comportamento ao chamar outros métodos em uma interface inativa é indefinido.
- connect(service_id: str | None = None, key: str | None = None, *, bssid: bytes | None = None, **kwargs: Any) None¶
Conecta a interface a uma rede. Este método é opcional e disponível apenas para interfaces que não estão “sempre conectadas”. Se nenhum parâmetro for fornecido, conecta-se ao serviço padrão (ou ao único). Se um único parâmetro for fornecido, ele é o identificador primário de um serviço ao qual se conectar. Pode vir acompanhado de uma chave (senha) necessária para acessar tal serviço. Pode haver outros parâmetros arbitrários somente por palavra-chave, dependendo do tipo de meio de rede e/ou do dispositivo específico. Os parâmetros podem ser usados para: a) especificar tipos alternativos de identificador de serviço; b) fornecer parâmetros adicionais de conexão. Para os vários tipos de meio, há diferentes conjuntos de parâmetros predefinidos/recomendados, entre eles:
WiFi: palavra-chave bssid para conectar a um BSSID específico (endereço MAC)
- scan(**kwargs: Any) List[Tuple]¶
Procura os serviços/conexões de rede disponíveis. Retorna uma lista de tuplas com os parâmetros dos serviços descobertos. Para os vários meios de rede, há diferentes variantes de formatos de tupla predefinidos/recomendados, entre eles:
WiFi: (ssid, bssid, channel, RSSI, security, hidden). Pode haver campos adicionais, específicos de um dispositivo em particular.
A função pode aceitar argumentos adicionais por palavra-chave para filtrar os resultados da varredura (por exemplo, procurar por um serviço específico, em um canal específico, por serviços de um conjunto específico, etc.) e para influenciar a duração da varredura e outros parâmetros. Sempre que possível, os nomes dos parâmetros devem corresponder aos de connect().
- status(param: str | None = None) Any¶
Consulta informações dinâmicas de status da interface. Quando chamada sem argumento, o valor de retorno descreve o status do enlace de rede. Caso contrário, param deve ser uma string que nomeie o parâmetro de status específico a ser obtido.
Os tipos e valores de retorno dependem do meio/tecnologia de rede. Alguns dos parâmetros que podem ser suportados são:
WiFi STA: use
'rssi'para obter o RSSI do sinal do APWiFi AP: use
'stations'para obter uma lista de todas as STAs conectadas ao AP. A lista contém tuplas no formato (MAC, RSSI).
- ipconfig(param: str) Any¶
- ipconfig(**kwargs: Any) None
Obtém ou define parâmetros de configuração IP específicos da interface. Os parâmetros suportados são os seguintes (a disponibilidade de um parâmetro específico depende do port e da interface de rede específica):
dhcp4(True/False) obtém um endereço IPv4, gateway e servidor dns via DHCP. Este método não bloqueia nem aguarda a obtenção de um endereço. Para verificar se um endereço foi obtido, use a propriedade somente leiturahas_dhcp4.gw4Obtém/define o gateway padrão IPv4.dhcp6(True/False) obtém um servidor DNS via DHCPv6 sem estado. A obtenção de endereços IP via DHCPv6 não está implementada atualmente.autoconf6(True/False) obtém um endereço IPv6 sem estado através do prefixo de rede compartilhado nos anúncios de roteador. Para verificar se um endereço sem estado foi obtido, use a propriedade somente leiturahas_autoconf6.addr4(por exemplo,192.168.0.4/24) obtém o endereço IPv4 atual e a máscara de rede como uma tupla(ip, subnet), independentemente de como esse endereço foi obtido. Este método pode ser usado para definir um endereço IPv4 estático, seja como uma tupla(ip, subnet)ou em notação CIDR.addr6(por exemplo,fe80::1234:5678) obtém uma lista dos endereços IPv6 atuais como uma tupla(ip, state, preferred_lifetime, valid_lifetime). Isso inclui endereços link-local, slaac e estáticos.preferred_lifetimeevalid_lifetimerepresentam, em segundos, o tempo de vida válido e preferido restante de cada endereço IPv6.stateindica o estado atual do endereço:0x08-0x0findica que o endereço é tentativo, contando o número de probes enviados.0x10O endereço está obsoleto (mas ainda válido)0x30O endereço é preferido (e válido)0x40O endereço está duplicado e não pode ser usado.
Este método pode ser usado para definir um endereço IPv6 estático, atribuindo a este parâmetro o endereço, como
fe80::1234:5678.
- ifconfig(config: Tuple[str, str, str, str] | None = None) Tuple[str, str, str, str] | None¶
Nota
Esta função está obsoleta, use
ipconfig()em vez disso.Obtém/define parâmetros de rede de nível IP da interface: endereço IP, máscara de sub-rede, gateway e servidor DNS. Quando chamado sem argumentos, este método retorna uma 4-tupla com as informações acima. Para definir os valores acima, passe uma 4-tupla com as informações necessárias. Por exemplo:
nic.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8'))
- config(param: str) Any¶
- config(**kwargs: Any) None
Obtém ou define parâmetros gerais da interface de rede. Estes métodos permitem trabalhar com parâmetros adicionais além da configuração IP padrão (tratada por
ipconfig()). Isso inclui parâmetros específicos da rede e do hardware. Para definir parâmetros, deve-se usar a sintaxe de argumentos por palavra-chave, e múltiplos parâmetros podem ser definidos de uma vez. Para consultar, o nome de um parâmetro deve ser passado entre aspas como string, e apenas um parâmetro pode ser consultado por vez:# Set WiFi access point name (formally known as SSID) and WiFi channel ap.config(ssid='My AP', channel=11) # Query params one by one print(ap.config('ssid')) print(ap.config('channel'))
Implementações de classes de rede específicas¶
As seguintes classes concretas implementam a interface AbstractNIC e fornecem uma maneira de controlar interfaces de rede de vários tipos.
Funções de rede¶
As seguintes são funções disponíveis no módulo network.
- network.country(code: str | None = None) str | None¶
Obtém ou define o código de país ISO 3166-1 Alpha-2 de duas letras a ser usado para conformidade de rádio.
Se o parâmetro code for fornecido, o país será definido com este valor. Se a função for chamada sem parâmetros, ela retorna o país atual.
O código padrão
"XX"representa a região “mundial”.
- network.hostname(name: str | None = None) str | None¶
Obtém ou define o hostname que identificará este dispositivo na rede. Ele será usado por todas as interfaces.
- Este hostname é usado para:
Envio ao servidor DHCP na requisição do cliente. (Se usar DHCP)
Difusão via mDNS. (Se habilitado)
Se o parâmetro name for fornecido, o hostname será definido com este valor. Se a função for chamada sem parâmetros, ela retorna o hostname atual.
Uma mudança no hostname normalmente só é aplicada durante a conexão. Para o DHCP isso ocorre porque o hostname faz parte da requisição do cliente DHCP, e a implementação do mDNS na maioria dos ports só inicializa o hostname uma vez durante a conexão. Por esse motivo, você deve definir o hostname antes de ativar/conectar suas interfaces de rede.
O comprimento do hostname é limitado a 32 caracteres. Os ports do MicroPython podem optar por definir um limite menor por razões de memória. Se o nome fornecido não couber, um
ValueErroré levantado.O hostname padrão é normalmente o nome da placa.
- network.ipconfig(param: str) Any¶
- network.ipconfig(**kwargs: Any) None
Obtém ou define parâmetros globais de configuração IP. Os parâmetros suportados são os seguintes (a disponibilidade de um parâmetro específico depende do port e da interface de rede específica):
dnsObtém/define o servidor DNS. Este método pode suportar tanto endereços IPv4 quanto IPv6.prefer(4/6) Especifica qual tipo de endereço retornar, caso um nome de domínio tenha tanto registros A quanto AAAA. Observe que isso não limpa o cache DNS local, de modo que quaisquer endereços previamente obtidos podem não mudar.