network — configuração de rede¶
Este módulo fornece controladores de rede e configuração de encaminhamento. Para utilizar este módulo, é necessário instalar uma variante/compilação do MicroPython com capacidades de rede. Os controladores de rede para hardware específico estão disponíveis neste módulo e são utilizados para configurar interface(s) de rede de hardware. Os serviços de rede fornecidos pelas interfaces configuradas ficam então disponíveis para utilização 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 integrada) conforme adequado para a câmara. O padrão de alto nível de construir -> ativar -> ligar -> usar sockets é o mesmo nos três casos.
Interface comum de adaptador de rede¶
Esta secção descreve uma classe base abstrata (implícita) para todas as classes de interface de rede implementadas pelos ports do MicroPython para hardware diferente. Isto significa que o MicroPython não fornece realmente a classe AbstractNIC, mas qualquer classe NIC concreta, conforme descrito nas secçõ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 existir mais do que uma interface do mesmo tipo, o primeiro parâmetro deve ser
id.- active(is_active: bool | None = None, /) bool¶
Ativa ou desativa a interface de rede.
Sem argumento, devolve o estado atual –
Trueenquanto a interface está ativa,Falsecaso contrário.Passe
Truepara ativar a interface: ligar / reiniciar o controlador de rede subjacente, carregar firmware quando aplicável, e ativar a pilha IP nesta interface. As chamadas subsequentes que comunicam com a rede (connect(),scan(),ipconfig(), …) requerem que a interface esteja ativa.Passe
Falsepara desativar a interface: desligar a pilha IP e libertar os recursos do controlador. Nas interfaces sem fios, isto também desassocia de qualquer rede atualmente ligada.O comportamento de chamar outros métodos numa interface inativa é indefinido.
- connect(service_id: str | None = None, key: str | None = None, *, bssid: bytes | None = None, **kwargs: Any) None¶
Liga a interface a uma rede. Este método é opcional e está disponível apenas para interfaces que não estão «sempre ligadas». Se não forem dados parâmetros, liga ao serviço predefinido (ou único). Se for dado um único parâmetro, é o identificador principal do serviço ao qual se ligar. Pode ser acompanhado por uma chave (palavra-passe) necessária para aceder ao referido serviço. Podem existir outros parâmetros arbitrários apenas por palavra-chave, dependendo do tipo de suporte de rede e/ou dispositivo específico. Os parâmetros podem ser utilizados para: a) especificar tipos alternativos de identificador de serviço; b) fornecer parâmetros de ligação adicionais. Para vários tipos de suporte, existem diferentes conjuntos de parâmetros predefinidos/recomendados, entre eles:
WiFi: palavra-chave bssid para ligar a um BSSID específico (endereço MAC)
- scan(**kwargs: Any) List[Tuple]¶
Pesquisa os serviços/ligações de rede disponíveis. Devolve uma lista de tuplos com os parâmetros dos serviços descobertos. Para vários tipos de suporte de rede, existem diferentes variantes de formatos de tuplo predefinidos/recomendados, entre eles:
WiFi: (ssid, bssid, channel, RSSI, security, hidden). Podem existir campos adicionais, específicos de um determinado dispositivo.
A função pode aceitar argumentos de palavra-chave adicionais para filtrar os resultados da pesquisa (por exemplo, pesquisar um serviço específico, num canal específico, para serviços de um conjunto específico, etc.), e para afetar a duração da pesquisa e outros parâmetros. Sempre que possível, os nomes dos parâmetros devem corresponder aos utilizados em connect().
- status(param: str | None = None) Any¶
Consulta informações de estado dinâmico da interface. Quando chamado sem argumento, o valor de retorno descreve o estado da ligação de rede. Caso contrário, param deve ser uma string que indica o parâmetro de estado específico a obter.
Os tipos e valores de retorno dependem do suporte/tecnologia de rede. Alguns dos parâmetros que podem ser suportados são:
WiFi STA: utilize
'rssi'para obter o RSSI do sinal do APWiFi AP: utilize
'stations'para obter uma lista de todos os STAs ligados ao AP. A lista contém tuplos na forma (MAC, RSSI).
- ipconfig(param: str) Any¶
- ipconfig(**kwargs: Any) None
Obtém ou define parâmetros de configuração IP 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 à espera de que um endereço seja obtido. Para verificar se um endereço foi obtido, utilize a propriedade só de leiturahas_dhcp4.gw4Obtém/define o gateway IPv4 predefinido.dhcp6(True/False) obtém um servidor DNS via DHCPv6 sem estado. A obtenção de endereços IP via DHCPv6 não está atualmente implementada.autoconf6(True/False) obtém um endereço IPv6 sem estado através do prefixo de rede partilhado nos anúncios de router. Para verificar se um endereço sem estado foi obtido, utilize a propriedade só de leiturahas_autoconf6.addr4(por exemplo,192.168.0.4/24) obtém o endereço IPv4 atual e a máscara de rede como um tuplo(ip, subnet), independentemente de como este endereço foi obtido. Este método pode ser utilizado para definir um endereço IPv4 estático, quer como tuplo(ip, subnet)quer em notação CIDR.addr6(por exemplo,fe80::1234:5678) obtém uma lista dos endereços IPv6 atuais como um tuplo(ip, state, preferred_lifetime, valid_lifetime). Inclui endereços link-local, slaac e estáticos.preferred_lifetimeevalid_lifetimerepresentam o tempo de vida válido e preferido restante de cada endereço IPv6, em segundos.stateindica o estado atual do endereço:0x08-0x0findica que o endereço é tentativo, contando o número de sondas enviadas.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 utilizado.
Este método pode ser utilizado para definir um endereço IPv6 estático, definindo este parâmetro para 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, utilize
ipconfig()em alternativa.Obtém/define parâmetros de rede ao nível IP: endereço IP, máscara de sub-rede, gateway e servidor DNS. Quando chamado sem argumentos, este método devolve um tuplo de 4 elementos com as informações acima. Para definir os valores acima, passe um tuplo de 4 elementos 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 para além da configuração IP padrão (conforme tratado por
ipconfig()). Incluem parâmetros específicos da rede e específicos do hardware. Para definir parâmetros, deve ser utilizada a sintaxe de argumento por palavra-chave, e vários parâmetros podem ser definidos de uma só vez. Para consultar, o nome do parâmetro deve ser citado como string, e apenas um parâmetro pode ser consultado de cada 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 forma de controlar interfaces de rede de vários tipos.
Funções de rede¶
As seguintes funções estão 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 utilizar para conformidade com regulamentação de rádio.
Se o parâmetro code for fornecido, o país será definido para este valor. Se a função for chamada sem parâmetros, devolve o país atual.
O código predefinido
"XX"representa a região «mundial».
- network.hostname(name: str | None = None) str | None¶
Obtém ou define o nome de anfitrião que identificará este dispositivo na rede. Será utilizado por todas as interfaces.
- Este nome de anfitrião é utilizado para:
Envio ao servidor DHCP no pedido do cliente. (Se utilizar DHCP)
Difusão via mDNS. (Se ativado)
Se o parâmetro name for fornecido, o nome de anfitrião será definido para este valor. Se a função for chamada sem parâmetros, devolve o nome de anfitrião atual.
Uma alteração no nome de anfitrião é tipicamente aplicada apenas durante a ligação. Para o DHCP, isto deve-se ao facto de o nome de anfitrião fazer parte do pedido do cliente DHCP, e a implementação do mDNS na maioria dos ports apenas inicializa o nome de anfitrião uma vez durante a ligação. Por esta razão, deve definir o nome de anfitrião antes de ativar/ligar as suas interfaces de rede.
O comprimento do nome de anfitrião está limitado a 32 caracteres. Os ports do MicroPython podem optar por definir um limite inferior por razões de memória. Se o nome fornecido não couber, é lançado um
ValueError.O nome de anfitrião predefinido é tipicamente o nome da placa.
- network.ipconfig(param: str) Any¶
- network.ipconfig(**kwargs: Any) None
Obtém ou define parâmetros de configuração IP globais. 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 endereços IPv4 e IPv6.prefer(4/6) Especifica o tipo de endereço a devolver, se um nome de domínio tiver registos A e AAAA. Note que isto não limpa a cache DNS local, pelo que quaisquer endereços obtidos anteriormente podem não ser alterados.