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
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.
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:
Muito bom e esclarecedor
ResponderExcluirGeteway lora por 15 dólares
ResponderExcluirÉ real https://youtu.be/ZV_ZY-0Q1lo
bom dia fernando
ResponderExcluirsou 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
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!
Excluirquem souber e puder ajudar eu agradeço
ResponderExcluirQual é melhor? Esp32 ou Esp8266?
ResponderExcluirOlá. 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!
ExcluirOlá Fernando muito bacana o seu post. Estou tentando conectar na nuvem utilizando este wifimanager, de inicio dá tudo certo, porem com o tempo (tipo 12h) o esp disconecta e para de enviar dados a nuvem, além disso ele não gera novamente o servidor para tentar novamente a conexão, ou seja, ele para de mandar dados. Tem alguma ideia do que poderia ser, obrigado
ResponderExcluircomo envio dados para a nuvem, na vdd preciso enviar dados da leitura da D8 para um link http interno
ResponderExcluirtipo http://192.168.0.1/recebe_dados.php
só o valor da leitura.
como fazer?
Eu uso o client() pra fazer um GET no servidor. Dê uma olhada nesse exemplo: https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/examples/WiFiClient/WiFiClient.ino
ExcluirEspero que ajude! Abraço!
Olá Fernando,
ResponderExcluirSeria possível criar um loop, para verificar a existência de conexão com a internet?
Se sim, como seria isso?
Boa tarde! Você conseguiu fazer algo para validar se ele está conectado a alguma rede?
ExcluirBoa noite amigo vc pode me enviar uma ide pra colocar no meu esp 8266 nodemcu pra acionar 10 relés via wi-fi do meu celular sem precisar de internet
ResponderExcluirSe puder enviar pro meu WhatsApp (22)997380309 eu agradeço
ResponderExcluirFernando não há um jeito de usar um nome em vez do ip?
ResponderExcluirpor exemplo "portalAP" em vez 192.168.4.1
Olá Fernando!
ResponderExcluirEstou tentando rodar meu próprio código "hello world" ativando um LED via navegador na IDE Arduino, porém estou me deparando com um problema. A conexão com a rede local ocorre normalmente, e o monitor serial mostra a URL (endereço IP) que eu deveria utilizar para acessar o servidor. Entretanto, quando jogo o endereço no navegador e tento acessar, aparece um erro dizendo que não foi possível encontrar a página. Já desativei o firewall, testei em vários navegadores diferentes, redes diferentes, portas diferentes (mudei da porta 80 para a 443) e nada funciona! O que pode estar acontecendo?
P.S.: Estou utilizando um ESP32 e SO Windows 10
o meu nao compilou /Users/josimar/Documents/Arduino/libraries/WiFiManager/WiFiManager.h:24:30: fatal error: user_interface.h: No such file or directory
ResponderExcluirtambem tive o mesmo problema
ExcluirOlá Prof. Fernando.
ResponderExcluirFuncionou perfeitamente.
A biblioteca já cá a tinha, não sabia era como usá-la.
Muito Obrigado.
Um grande abraço de Portugal.
Por mais que eu tente ele nao cria a conexão com o nome configurado, sempre aparece Wifi-repeater.
ResponderExcluirTambém tive vários problemas de conflito entre as bibliotecas por usarem nome de arquivos iguais e quando eu removo qualquer um deles ou troco o nome a aplicação não funciona.
Fiz e reg=fiz a instalacao muitas vezes, MAS......
ResponderExcluirMultiple libraries were found for "WiFi.h"
WifiManager32:14:159: error: WiFiManager.h: No such file or directory
Used: C:\Users\vidal\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.0\libraries\WiFi
compilation terminated.
Not used: C:\Arduino\libraries\WiFi
exit status 1
WiFiManager.h: No such file or directory
Boa noite Fernando, acho fantasticas suas aulas e venho seguindo alguns tutoriais, comecei a brincar com o esp32 a pouco tempo e estou tentando carregar o autoconect do wifimanager aparecem informaçoes de duplas bibliotecas e no final da um erro de compilação, estou há meses tentando instalar e desisntalar ide, bibliotecas etc mas da sempre o mesmo erro, o blink ele carrega. O Senhor ou alguem que segue a página pode me ajudar? abraços, obrigado
ResponderExcluirOla estou com o mes o problema utilizando o ino do site e as bibliotecas indicadas no artigo.
ExcluirAlguma sugestão ?
Hola Fernando,
ResponderExcluirjust a question,
why in the INO program downloadable from your page, in Void Loop is called WiFiManager wifiManager and after there is the function IF to check the input.
and in the video, like in the documentation in this pages, in the loop the first command there is the if function to check the push button and, if is TRUE is called the WiFiManager wifiManager?
what is the difference
thanks
Cara estou com o problema de múltiplas biblioteca a semanas e ninguém consegue me da um norte.
ResponderExcluirta osso kkk.
Qualquer exemplo que uso as biblioteca citadas acima dao esse erro.
Outras biblioteca e exemplos funcionam normal
To na com esse problema tambem "Murilo Gimenez" ja refiz todo o processo de instalação e nada da certo
ResponderExcluirBom dia Fernando,
ResponderExcluirSegui a risca seu tutorial para a configuração do Access Point utilizando ESP32, porém, não saio desse erro.
Foram encontradas múltiplas bibliotecas para "WebServer.h"
In file included from C:\Users\kaina\Desktop\sketch_nov17a\sketch_nov17a.ino:10:0:
Usado: C:\Users\kaina\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.0\libraries\WebServer
C:\Users\kaina\Documents\Arduino\libraries\WiFiManager/WiFiManager.h:16:25: fatal error: ESP8266WiFi.h: No such file or directory
Não usado: C:\Program Files (x86)\Arduino\libraries\WebServer-ESP32
compilation terminated.
Foram encontradas múltiplas bibliotecas para "WiFi.h"
Usado: C:\Users\kaina\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.0\libraries\WiFi
Não usado: C:\Program Files (x86)\Arduino\libraries\WiFi
Foram encontradas múltiplas bibliotecas para "DNSServer.h"
Usado: C:\Users\kaina\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.0\libraries\DNSServer
Não usado: C:\Program Files (x86)\Arduino\libraries\DNSServer-ESP32
exit status 1
Erro compilando para a placa ESP32 Dev Module
Se puder ajudar eu agradeço.
Forte abraço, e parabéns pelos tutoriais.
Kainã, também estou com esse problema. Você conseguiu algo para resolver?
ExcluirObrigado.
Também estou com esse problema, alguém resolveu?
ExcluirEu tive um problema parecido, deletei todas as bibliotecas e reinstalei e resolveu tudo
ExcluirTive problemas 1000 tentando usar a Esp8266WiFi.h Cansei depois de 2 meses reinstalando tudo... Estou tentando experimentar o VScode, mas ainda estou engatinhando. Nele tenho conflitos entre bibliotecas e o PlatformIO. CANSA!
ExcluirEu tive um problema parecido, deletei todas as bibliotecas e reinstalei e resolveu tudo
ResponderExcluirOlá Fernando, Acompanho direto seu Blog e o Youtube tb. Migrei do ARDUINO pro ESP32 baseado em tudo que vi nos seus posts. Configurei a IDE ARDUINO pro ESP pelas 2 maneiras, mas de todas as formas tenho tido muitos problemas com LIBRARYS aparentemente incompletas. Ha 2 meses brigo pra fazer funcionar a ESP8266WiFi.h, mas caio de erro em erro na compilação, pois acusa faltar arquivos chamados internamente pela propria library que aparentam nao estar lá. Cheguei a formatar meu note para ver se o problema nao era meu PC. Baixei a biblioteca no GitHub, e cheguei a complementar colocando manualmente 6 arquivos... mas as pendencias internas desta biblioteca nunca acabavam. Vc tem ela COMPLETA ZIPADA pra mim? onde consigo um arquivo confiável?
ResponderExcluirAbraços!
Olá Fernando, Acompanho direto seu Blog e o Youtube tb. Migrei do ARDUINO pro ESP32 baseado em tudo que vi nos seus posts. Configurei a IDE ARDUINO pro ESP pelas 2 maneiras, mas de todas as formas tenho tido muitos problemas com LIBRARYS aparentemente incompletas. Ha 2 meses brigo pra fazer funcionar a ESP8266WiFi.h, mas caio de erro em erro na compilação, pois acusa faltar arquivos chamados internamente pela propria library que aparentam nao estar lá. Cheguei a formatar meu note para ver se o problema nao era meu PC. Baixei a biblioteca no GitHub, e cheguei a complementar colocando manualmente 6 arquivos... mas as pendencias internas desta biblioteca nunca acabavam. Vc tem ela COMPLETA ZIPADA pra mim? onde consigo um arquivo confiável?
ResponderExcluirAbraços!