ESP8266 e ESP32 com WiFiManager



Já conhece a WiFiManager, uma biblioteca que serve como um gerenciador de conexões wireless? Pois, com ela temos uma maior facilidade para configurar tanto um Ponto de Acesso quanto uma Estação. Eu tenho recebido diversas sugestões para falar sobre o assunto, então, hoje vou te apresentar uma biblioteca desta e suas funções. Ainda vou fazer uma demonstração de uso tanto com o ESP32 quanto o ESP8266.




PINOUT

Aqui eu deixo para vocês o PINOUT dos dois dispositivos que vamos utilizar:


NodeMCU ESP-12E

NodeMCU ESP-WROOM-32


WiFiManager

A WiFiManager, portanto, nada mais é que uma biblioteca escrita em cima do WiFi.h para facilitar o gerenciamento de conexões wireless. Lembrando que, com ela, temos uma maior facilidade para configurar tanto um Ponto de Acesso quanto uma Estação. Para o modo Estação, configuramos através de um portal no navegador.

Algumas características:
·         Depende da conectividade automática
·         Inicialização do portal de configuração não automática
·         Opera seletivamente no modo duplo


Como Funciona


O ESP iniciará um portal de configuração WiFi quando ligado e salvará os dados de configuração em memória não volátil. Posteriormente, o portal de configuração só será iniciado novamente se um botão for pressionado no módulo ESP.
Abaixo você confere o fluxo de configuração e o passo a passo:


1.       Utilizando qualquer dispositivo habilitado para WiFi com um navegador  conecte-se ao ponto de acesso recém-criado e digite o endereço 192.168.4.1.
2.       Na tela você terá duas opções para se conectar a uma rede existente:
·         Configure WiFi
·         Configure WiFi (No Scan)
3.       Escolha uma das redes e coloque a senha (se precisar). Então, salve e aguarde o ESP reiniciar.
4.       Ao finalizar o boot, o ESP tentará se conectar na rede salva. Caso não consiga, irá habilitar um Ponto de Acesso.


Bibliotecas

Adicione as bibliotecas: “WifiManager-ESP32”, DNSServer-ESP32” e WebServer-ESP32”.
Descompacte os arquivos e cole na pasta de bibliotecas da IDE do arduino.
C:/Program Files (x86)/Arduino/libraries


Observação:


A biblioteca WiFiManager-ESP32 já traz as configurações que funcionam com o ESP8266, por isso utilizaremos apenas ela, ao invés de duas libs “WiFiManager” (uma para cada tipo de chip).
Como veremos mais adiante, ESP8266WiFi e ESP8266WebServer são bibliotecas que não precisaremos realizar o download, pois elas já vêm quando instalamos o ESP8266 na IDE do arduino.




Funções

A seguir temos algumas funções que o WiFiManager nos oferece.

1.       autoConnect
A função autoConnect é responsável por criar um Access Point. Podemos usá-la de três maneiras.
·         autoConnect(“nome da rede”, “senha”); - cria uma rede com o nome e a senha definidos.
·         autoConnect(“nome da rede”); - cria uma rede aberta com o nome definido.
·         autoConnect(); - cria uma rede aberta e com nome gerado automaticamente com o nome sendo ‘ESP’ + chipID.



2.       startConfigPortal
A função startConfigPortal é responsável por criar um Access Point sem tentar conectar antes a uma rede salva anteriormente.
·         startConfigPortal(“nome da rede”, “senha”);   - cria uma rede com o nome e a senha definidos.
·         startConfigPortal(); - cria uma rede aberta e com nome gerado automaticamente com o nome sendo ‘ESP’ + chipID.



3.       getConfigPortalSSID
                Retorna o SSID do portal (Access Point)
4.       getSSID
Retorna o SSID da rede a qual está conectado.
5.       getPassword
                Retorna a senha da rede a qual está conectado.



6.       setDebugOutput
A função setDebugOutput é responsável por imprimir mensagens de debug no serial monitor. Essas mensagens já são definidas na biblioteca. Conforme passa pelas funções, os dados vão sendo impressos.
Por padrão essa função vem setada como TRUE. Caso queira desabilitar as mensagens, basta setar a função como FALSE.



7.       setMinimumSignalQuality
A função setMinimumSignalQuality é responsável por filtrar as redes baseadas na qualidade do sinal. Por padrão, o WiFiManager não mostrará redes com sinal abaixo de 8%.



8.       setRemoveDuplicateAPs
A função setRemoveDuplicateAPs é responsável por remover as duplicatas de redes.
Por padrão vem setado como TRUE. 



9.       setAPStaticIPConfig
A função setAPStaticIPConfig é responsável por setar as configurações de endereço estáticas quando no modo access point.
(IP, GATEWAY, SUBNET)



10.   setSTAStaticIPConfig
A função setSTAStaticIPConfig é responsável por setar as configurações de endereço estáticas quando no modo estação.
(IP, GATEWAY, SUBNET)


Deve-se adicionar o comando antes de autoConnect !!!



11.   setAPCallback
A função setAPCallback é responsável por informar que o modo AP foi iniciado.
O parâmetro é uma função que se deve criar para indicá-la como sendo um callback;



12.   setSaveConfigCallback
A função setSaveConfigCallback é responsável por informar que uma nova configuração foi salva e a conexão foi realizada com sucesso.
O parâmetro é uma função que se deve criar para indicá-la como sendo um callback.


Deve-se adicionar o comando antes de autoConnect!!!


Montagem



Exemplo

No nosso exemplo vamos criar um Access Point com o ESP (o código servirá tanto para o ESP8266 como para o ESP32). Após a criação do AP, vamos acessar o portal através do IP 192.168.4.1 (que é o padrão para acessá-lo). Então, vamos buscar as redes disponíveis, selecionar uma delas e salvar. A partir daí, o ESP irá reiniciar e tentará se conectar a ela, trabalhando, então, como uma estação e, não mais, como um Access Point.
Após entrar em modo estação, apenas através do botão que você poderá fazer o ESP voltar ao modo Access Point.

Código

Bibliotecas

Primeiramente vamos definir as bibliotecas que utilizaremos.
Repare que temos comandos #if defined, #else e #endif. Eles são condicionais para incluir bibliotecas necessárias referentes ao chip. Essa parte é extremamente importante para poder rodar o mesmo código tanto no ESP8266 quanto no ESP32.

#if defined(ESP8266)
#include <ESP8266WiFi.h>  //ESP8266 Core WiFi Library         
#else
#include <WiFi.h>      //ESP32 Core WiFi Library    
#endif

#if defined(ESP8266)
#include <ESP8266WebServer.h> //Local WebServer used to serve the configuration portal
#else
#include <WebServer.h> //Local WebServer used to serve the configuration portal ( https://github.com/zhouhan0126/WebServer-esp32 )
#endif

#include <DNSServer.h> //Local DNS Server used for redirecting all requests to the configuration portal ( https://github.com/zhouhan0126/DNSServer---esp32 )
#include <WiFiManager.h>   // WiFi Configuration Magic ( https://github.com/zhouhan0126/WIFIMANAGER-ESP32 ) >> https://github.com/tzapu/WiFiManager (ORIGINAL)


Setup

No setup estamos configurando nosso WiFiManager da maneira mais simples. Vamos apenas definir os callbacks e criar a rede. 

const int PIN_AP = 2;

void setup() {
  Serial.begin(9600);
  pinMode(PIN_AP, INPUT);
  //declaração do objeto wifiManager
  WiFiManager wifiManager;

  //utilizando esse comando, as configurações são apagadas da memória
  //caso tiver salvo alguma rede para conectar automaticamente, ela é apagada.
//  wifiManager.resetSettings();

//callback para quando entra em modo de configuração AP
  wifiManager.setAPCallback(configModeCallback); 
//callback para quando se conecta em uma rede, ou seja, quando passa a trabalhar em modo estação
  wifiManager.setSaveConfigCallback(saveConfigCallback); 

//cria uma rede de nome ESP_AP com senha 12345678
  wifiManager.autoConnect("ESP_AP", "12345678"); 
}


Loop

No loop, faremos a leitura do pino do botão para saber se ele foi pressionado e, então, vamos chamar o método para habilitar novamente o modo AP.

void loop() 
{
   if ( digitalRead(PIN_AP) == HIGH ) 
   {
      WiFiManager wifiManager;
      if(!wifiManager.startConfigPortal("ESP_AP", "12345678") )
      {
        Serial.println("Falha ao conectar");
        delay(2000);
        ESP.restart();
      }
   }

}



Ao pressionar o botão, o ESP sairá do modo Estação e abrirá seu Access Point e o portal.
Lembre-se que não utilizamos o comando resetSettings(). As configurações ainda permanecem salvas para a próxima vez que o ESP inicializar.


Callbacks


//callback que indica que o ESP entrou no modo AP
void configModeCallback (WiFiManager *myWiFiManager) {  
//  Serial.println("Entered config mode");
  Serial.println("Entrou no modo de configuração");
  Serial.println(WiFi.softAPIP()); //imprime o IP do AP
  Serial.println(myWiFiManager->getConfigPortalSSID()); //imprime o SSID criado da rede

}

//callback que indica que salvamos uma nova rede para se conectar (modo estação)
void saveConfigCallback () {
  Serial.println("Configuração salva");
}

As funções de callback, as quais são associadas a eventos, servem para você ter o momento exato de uma operação, no nosso caso, a entrada no modo AP e no modo Estação. Podemos, então, implementar alguma rotina desejada, como recuperar o SSID da rede conectada, por exemplo.


Faça o download dos arquivos:


7 comentários:

  1. Geteway lora por 15 dólares
    É real https://youtu.be/ZV_ZY-0Q1lo

    ResponderExcluir
  2. bom dia fernando

    sou iniciante com arduino e já coloquei aqui o codigo e deu certo abriu a pagina tudo certo

    agora minha duvida e simples mas eu nao entendo! como coloco por exemplo um codigo seu mesmo aquele ddns em cima deste já que quando coloco um o outro apaga

    ResponderExcluir
    Respostas
    1. Olá. O WiFiManager serve apenas para você se conectar mais facilmente à um Ponto de Acesso. A respeito do DDNS ele terá que ser configurado em seu roteador. Abraço!

      Excluir
  3. Respostas
    1. Olá. Os dois são muito bons, você precisa avaliar de acordo com sua aplicação desejada. O ESP32 tem melhor processamento que o ESP8266. Abraço!

      Excluir

Tecnologia do Blogger.