esp8266

ESP8266 WiFi Repeater – modo de operação

mesh com NRF24L01

Espero conseguir discorrer ao menos o suficiente sobre o ESP8266 WiFi Repeater, iniciado nesse outro artigo. Comento isso porque, de fato, esse firmware tem muitos, muitos recursos. Vamos começar pelo que provavelmente a maioria das pessoas vai querer se deparar após o boot.

Interface de configuração do ESP8266 WiFi Repeater

Como citado no artigo anterior relacionado, há um arquivo de predefinições onde ajustamos as redes a qual se conectar. Inicialmente, configurei a interface externa (interface externa é a que dá saída em direção ao “mundo”) para se conectar à minha rede WiFi doméstica. Na interface interna, configurei o AP como DobitAoByte. Conectei-me a ela e então iniciei o acesso via browser. Ao conectar ao ESP8266 WiFi Repeater, o LED built-in começa a piscar, mostrando que tem alguém conectado ao repetidor.

Ao abrir o browser, me deparei com as configurações que fiz pelo arquivo. Claro que haveria de ter essa configuração. De outro modo, o dispositivo não seria replicável sem reconfigurar e compilar previamente uma versão para uma determinada rede WiFi.

A opção AutoMash veio desmarcada, mas certamente poderia vir marcada por padrão através do mesmo arquivo de configuração. Marquei a caixa e mandei conectar à minha rede WiFi.

ESP8266 WiFi Repeater

Ao salvar as configurações, recebi a informação de que elas estavam sendo salvas, então fui desconectado. O notebook reconectou automaticamente à minha rede WiFi padrão e o ESP8266 WiFi Repeater continuou simplesmente piscando como se houvesse alguém conectado. Como eu não tinha mais a possibilidade de notar visualmente se tudo estava ok, reiniciei mais uma vez o ESP8266 WiFi Repeater manualmente.

Interface web

Se selecionado o modo auto-mesh, a configuração termina por aí mesmo. Ele se agregará à sua rede com as mesmas configurações para STA e AP. Isso significa que o modo AP com o nome pré ou pós-definido não será mais encontrado em sua lista de redes e já está pronto seu repetidor. Fim do artigo, até a próxima!

É brincadeira!!!

Sim, está pronto para ser utilizado como repetidor, caso tenha escolhido o modo de configuração supracitado. Seu ESP8266 WiFi Repeater se comportará como um “fantasma”, estando lá para auxiliar no alcance, piscando continuamente o LED built-in, sem interferir no acesso à interface do roteador de facto. Mas existem outras opções, mas agora é necessário fazer a configuração por serial, por razões óbvias; mas também é uma oportunidade para interagirmos com essa interface.

Interface serial

Conecte à interface serial correspondente (no caso do Linux, algo como /dev/ttyUSB0). Essa é a mesma interface disponível para configuração por socket, que poderia ser feita através do endereço 192.168.4.1 na porta 7777. Claro, isso seria possível apenas se a configuração auto-mesh do ESP8266 WiFi Repeater não tivesse sido habilitada.

Para conectar, utilizei (no Linux) o programa para conexão serial chamado Cutecom. Conecte-se à 115200 e use o terminador CR.

Só para brincar, digite alguns comandos para ver a saída. Por exemplo, scanshow route:

ESP8266 WiFi Repeater

Eu poderia discorrer sobre cada um dos comandos, mas tenho uma preguiça que não me permite quebrar o protocolo. Para evitar a fadiga, vou apenas fazer um Ctrl+Chups traduzindo parte dos recursos:

Automesh Config

  • set automesh [0|1]: seleciona automash (0 default). Uma rede mesh aumenta o alcance e permite contingência, mas não vou entrar em todos os detalhes na descrição do recurso.
  • set am_threshold dB: define o limite para uma conexão ser considerada ruim (em dB negativo, default 85, i.e. -85 dB).
  • set am_scan_time secs: configura o limite de tempo em segundos para o ESP tentar encontrar um uplink antes de dormir (0 disabled, default).
  • set am_sleep_time secs: sets the time interval in seconds the ESP sleeps in automesh mode if no uplink AP is found (0 disabled, default)

WiFi Config

  • set ap_on [0|1]: selects, whether the soft-AP is disabled (ap_on=0) or enabled (ap_on=1, default)
  • set ap_open [0|1]: selects, whether the soft-AP uses WPA2-PSK security (ap_open=0, automatic, if an ap_password is set) or open (ap_open=1)
  • set auto_connect [0|1]: selects, whether the STA should keep retrying to reconnect to the AP. auto_connect is off (0) after first flashing or after “reset factory”. When you enter a new SSID it will be automatically set on (1).
  • set ssid_hidden [0|1]: selects, whether the SSID of the soft-AP is hidden (ssid_hidden=1) or visible (ssid_hidden=0, default)
  • set phy_mode [1|2|3]: sets the PHY_MODE of the WiFi (1=b, 2=g, 3=n(default))
  • set bssid xx:xx:xx:xx:xx:xx: sets the specific BSSID of the uplink AP to connect to (default 00:00:00:00:00:00 which means any)
  • set [ap_mac|sta_mac] xx:xx:xx:xx:xx:xx: sets the MAC address of the STA and SOFTAP to a user defined value (bit 0 of the first byte of the MAC address can not be 1)
  • set sta_mac random: set a new random STA MAC after each reboot
  • set sta_hostname name: sets the name of the STA (visible to the uplink AP)
  • set max_clients [1-8]: sets the number of STAs that can connct to the SoftAP (limit of the ESP’s SoftAP implementation is 8, default)
  • scan: does a scan for APs
  • connect: tries to connect to an AP with the currently configured ssid and password
  • disconnect: disconnects from any uplink AP

WPA2 Enterprise Config

  • set use_peap[0|1]: selects, whether the STA should connect via simple WPA-PSK (use_peap=0, default) or usinf WPA2 Enterprise (PEAP)
  • set peap_identity value: sets the PEAP ‘outer’ identity (the string that is first presented to the RADIUS server, maybe anonymous@yourorg.org)
  • peap_username value: sets the PEAP username
  • peap_password value: sets the PEAP password

TCP/IP Config

  • set network ip-addr: sets the IP address of the internal network, network is always /24, router is always x.x.x.1
  • set dns dns-addr: sets a static DNS address that is distributed to clients via DHCP
  • set dns dhcp: configures use of the dynamic DNS address from DHCP, default
  • set ip ip-addr: sets a static IP address for the STA interface
  • set ip dhcp: configures dynamic IP address for the STA interface, default
  • set netmask netmask: sets a static netmask for the STA interface
  • set gw gw-addr: sets a static gateway address for the STA interface
  • set tcp_timeout secs: sets the NAPT timeout for TCP connections (0=default (1800 secs))
  • set udp_timeout secs: sets the NAPT timeout for UDP connections (0=default (2 secs))
  • show dhcp: prints the current status of the dhcp lease table

Routing

  • show route: mostra a tabela de rotas atual.
  • route clear: remove todas as rotas estáticas.
  • route add network gw: adiciona uma rota estática a uma rede (notação CIDR ‘x.x.x.x/n’) via gateway padrão (se eu lembrar, escrevo mais adiante sobre isso).
  • route delete network: remove rotas estáticas a uma rede.
  • interface inX [up|down]: Levanta ou baixa a interface.
  • set nat [0|1]: Faz NAT do tráfego entrante pela interface AP. Sem NAT, não é possível tráfego bidirecional na rede interna, exceto se faça um roteamento estático para um respectivo host.
  • portmap add [TCP|UDP] external_port internal_ip internal_port: Adiciona port forwarding.
  • portmap remove [TCP|UDP] external_port: deleta um port forwarding.
  • nslookup name: nslookup é um comando para fazer resolução de nomes, útil para diagnosticar conectividade, por exemplo.
  • ping host: ping é uma ferramenta utilizada por praticamente qualquer pessoa que já acessou um terminal de sistema para testar se um host é alcançável.

Firewall/Monitor Config

  • acl [from_sta|to_sta|from_ap|to_ap] [TCP|UDP|IP] src-ip [src_portdesr-ip [dest_port] [allow|deny|allow_monitor|deny_monitor]: adiciona uma nova ACL.
  • acl [from_sta|to_sta|from_ap|to_ap] clear: remove as ACLs.
  • show acl: mostra alguns status e as ACLs atuais.
  • set acl_debug [0|1]: switches ACL debug output on/off – exibe todos os pacotes bloqueados na saída do terminal.
  • set [upstream_kbps|downstream_kbps] bitrate: uma ótima maneira de limitar o consumo de banda a partir do ESP8266.
  • set daily_limit limit_in_KB: limite de bytes/dia por estação (0 = no limit, default)
  • set timezone hours_offset: define o timezone local.
  • monitor [on|off|acl] port: inicia e para o monitor em uma determinada porta (espero não esquecer disso para mostrar em vídeo).

User Interface Config

  • set config_port portno: configura a porta de login (default is 7777, 0 desabilita configuração remota por console).
  • set web_port portno: configura a porta de acesso web  (default 80, 0 desabilita a configuração por interface web).
  • set config_access mode: controle da rede permitida a acessar as configurações (0: no access, 1: only internal, 2: only external, 3: both (default))

Chip Config

  • set speed [80|160]: configura a frequência da CPU (default 80 Mhz).
  • sleep seconds: coloca o ESP em deep sleep por N segundos. Valores válidos entre 1 e 4294 (aprox. 71 minutos).
  • set status_led GPIOno: seleciona um pino de GPIO para o LED (default 2, >16 disabled).
  • set hw_reset GPIOno: seleciona um pino para factory reset (>16 disabled, default).
  • set ap_watchdog secs: configura watchdog – Sem pacotes recebidos por  secs advindo do uplink do AP o repetidor reinicia (“none” = no timeout, default).
  • set client_watchdog secs: Confgura o watchdog do cliente – se não houver pacotes recebidos de qualquer cliente por secs o repetidor reinicia (“none” = no timeout, default).
  • set vmin voltage: sets the minimum battery voltage in mV. If Vdd drops below, the ESP goes into deep sleep. If 0, nothing happens.
  • set vmin_sleep secs: sets the time interval in seconds the ESP sleeps on low voltage.
  • gpio [0-16] mode [in|_in_pullup|out]: configures a GPIO port of the ESP (saved to flash).
  • gpio [0-16] set [high|low]: writes to an output port.
  • gpio [0-16] get: reads from an input port.

Status LED

O padrão é o GPIO2.

  • permanently on: started, but not successfully connected to the AP (no valid external IP)
  • flashing (1 per second): working, connected to the AP
  • unperiodically flashing: working, traffic in the internal network

HW Factory Reset

Se baixar o GIPIO selecionado por mais de 3 segundos, o repetidor fará o factory reset.

Para diversos módulos (inclusive ESP-01 e NodeMCU), provavelmente é uma boa ideia utilizar o GPIO 0.

 

Considerações finais

Primeiramente, me desculpem por não traduzir todos os comandos, mas é realmente coisa demais.

Esse firmware faz o ESP8266 se comportar de uma forma muito similar a um roteador “de verdade”, oferecendo um console muito similar e recursos que provavelmente só serão utilizados por quem é profissional de rede. Apenas para dar um exemplo, vou criar uma condição.

Supondo que seu ESP8266 WiFi Repeater esteja em uma rede com uma rede com acesso a uma intranet por um gateway e acesso à Internet por outra rede.

intranet: 10.0.0.1

Internet: 192.168.0.1

LAN: 172.16.0.1

Esses seriam os IPs dos gateways para cada uma dessas redes. Para quem não sabe, um gateway é o caminho para um destino fora do endereçamento conhecido (a LAN).

Suponhamos que o ESP8266 tenha uma rota padrão para 192.168.0.1 (para tal, em sua interface STA deve haver um IP da rede Internet), sendo seu IP 192.168.0.2.

Para acessar qualquer host da rede 172.16.0.0/16, basta “pingar” ou fazer o acesso direto ao serviço desejado. Porém, se quiser acessar a Internet?

O ESP8266 WiFi Repeater tem como gateway padrão 192.168.0.1. Logo, tudo que o host da rede 172.16.0.0 tentar acessar e não for da rede conhecida (a LAN), será encaminhado através de seu gateway padrão (O ESP8266) para o gateway da rede Internet:

Esse é um comportamento padrão. Porém a rede intranet também está fora da LAN e por padrão seria buscada na Internet, onde se perderia. Para acessar a intranet, coloca-se então uma rota estática no ESP8266, de forma que ele encaminhe os pacotes através do gateway correto (10.0.0.1):

Isso quer dizer que o gateway para acessar a rede 10.0.0.0 é o 172.16.0.3. Ou se fosse um host da rede Internet, poderia ser por exemplo 192.168.0.3.

Para que o IP consiga ter alcance bidirecional, é necessário ativar NAT na interface de uplink do ESP8266. Desse modo, todos os hosts da rede LAN sairiam através da interface STA do ESP8266 com o IP designado para sua interface. No exemplo, 192.168.0.2.

Para criar um exemplo hipotético com 2 comandos tive que escrever esse monte acima, sendo ainda algo realmente ralo; extremamente superficial. Já deu pra ter uma ideia do poder dado a esse ESP8266 com esse firmware?

A funcionalidade de monitoramento permite fazer sniffing de todo o tráfego, o que o torna uma ferramenta prática e portátil para análise de redes. Apesar de ser um profissional de redes, exemplificar o uso de todos os recursos seria desgastante e seria necessário diversos vídeos.

Divirta-se um pouco com o básico e conforme eu criar projetos, vou escrevendo artigos, esse projeto merece!

Até a próxima!