Pessoal, bom dia.
Estou adaptando um projeto que eu tinha com Arduino e que funcionava com uma placa de rede W5100 e que agora estou mudando para para WiFi. Para isso estou usando um ESP-01 se comunicando pela UART. Tudo está funcionando bem, porém, eu estou usando a lib WiFiManager para facilitar a alteração de SSID quando necessário. Ocorre que nos exemplos dessa biblioteca, quando o ESP não encontra uma rede ele cai nessa rotina e aguarda a configuração de um novo SSID:

void configModeCallback (WiFiManager *myWiFiManager) {
Serial.println("Entrou no modo de configuração");
Serial.println(WiFi.softAPIP());
Serial.println(myWiFiManager->getConfigPortalSSID());
ticker.attach(0.2, tick);
}

Até ai tudo certo, porém, se ocorrer um reinicio do sistema e o roteador demorar para entrar, o ESP não encontra o SSID cadastrado e cai nesta rotina, ficando ali eternamente, sendo necessário reiniciar manualmente o ESP para que a comunicação volte a ocorrer. Pensei em colocar um delay e um ESP.restart(), mas não acho que seja a melhor solução e nem sei se isso funciona.
Alguém tem alguma ideia sobre isso?

Exibições: 897

Responder esta

Respostas a este tópico

Bom dia JRR, (se não gosta que te chame pelas iniciais, avise),

eu tive também este problema, e resolvi assim:

Criei um contador de tentativas de conexões e ajustei o valor do contador para um pouco a mais do tempo do 

boot do roteador.

RV

Olá Rui,

Tentei colocar um loop contando tempo e após dois minutos ele faz um ESP.restart(). O ESP está reiniciando porém ele não entra mais em modo AP, ou seja se eu quiser configurar outro SSID eu não consigo. 

Você pode me mandar os detalhes de como voce fez?

Zé Roberto

Resolvido. A lib tem uma função "SetTimeout()" que resolve este problema.

Boa tarde,

Estou com o mesmo problema que você relatou. 
Se importaria de mostrar o código com a solução do problema?
Desde já agradeço.

Adenauer, bom dia!
basta colocar o código abaixo no setup():

WiFiManager wifiManager; // instancia o WiFiManager
wifiManager.setTimeout(60);
wifiManager.setAPCallback(configModeCallback);
wifiManager.setDebugOutput(false);
wifiManager.autoConnect();
if(!wifiManager.autoConnect()) {
ESP.restart();
delay(1000); // aguarda 1 segundo
}

Isso para mim funciona perfeitamente.

Qualquer dúvida, retorne.

Obrigado! Vou testar aqui.

Bom dia J2R, 

procurei o projeto que usei aquela solução de que lhe falei, mas são tantos projetos arquivados que não encontrei ainda.

Assim que encontra-lo, vou disponibilizar aqui.

Mas obrigado pela dica da função "SetTimeout()".

RV

PS: No site da biblioteca,  https://github.com/tzapu/WiFiManager/blob/master/WiFiManager.h

dentro do arquivo WiFiManager.h, linha 226   void setTimeout(unsigned long seconds); // @deprecated, alias

informa que esta função foi descontinuada.

A nova função é a  setConfigPortalTimeout.

//sets timeout before AP,webserver loop ends and exits even if there has been no setup.
//useful for devices that failed to connect at some point and got stuck in a webserver loop
//in seconds setConfigPortalTimeout is a new name for setTimeout, ! not used if setConfigPortalBlocking

Rui, bom dia!

Sim é verdade, mas observei no arquivo WiFiManager.cpp que a função setTimeout() apenas chama essa que você menciona:

void WiFiManager::setTimeout(unsigned long seconds) {
setConfigPortalTimeout(seconds);
}

Dessa forma, acho que não terei problemas, pois está funcionando perfeitamente!

Abcs.

Zé Roberto

Bom dia

Se ainda tem este código, como fica no Loop?

O meu está assim, está certo?

void loop() {
WiFiManager wifiManager;


if ( digitalRead(PIN_AP) == HIGH ) {
Serial.println("resetar"); //tenta abrir o portal
if(!wifiManager.startConfigPortal("ESP_AP", "12345678") ){
Serial.println("Falha ao conectar");
delay(2000);
ESP.restart();
delay(1000);
}
Serial.println("Conectou ESP_AP!!!");
}

}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço