RESOLVIDO - ESP8266 12 - E não roda código do loop ao usar biblioteca Wifimanager

Para fins de teste de estabilidade resolvi unir 2 códigos no ESP preparado para IDE do Arduino de modo que o mesmo crie uma rede com um configurador de wirelles via web usando a biblioteca Wifimanager (https://github.com/tzapu/WiFiManager) e ao mesmo tempo o exemplo Blink do arduino.

A idéia é ficar piscando a led do modulo enquanto o mesmo estiver ligado, para ter certeza visualmente que ele está ligado e funcionando, e comparar se a rede está disponível e funcional nesse período de teste. É um teste de estabilidade do módulo.

O código é o seguinte:

//=======================

#include <ESP8266WiFi.h> //https://github.com/esp8266/Arduino

//needed for library
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h> //https://github.com/tzapu/WiFiManager


void setup() {
pinMode(2, OUTPUT);

// put your setup code here, to run once:
Serial.begin(115200);
//Monitora funcionamento

//WiFiManager
//Local intialization. Once its business is done, there is no need to keep it around
WiFiManager wifiManager;
//reset saved settings
//wifiManager.resetSettings();

//set custom ip for portal
//wifiManager.setAPConfig(IPAddress(10,0,1,1), IPAddress(10,0,1,1), IPAddress(255,255,255,0));

//fetches ssid and pass from eeprom and tries to connect
//if it does not connect it starts an access point with the specified name
//here "Rede teste"
//and goes into a blocking loop awaiting configuration
wifiManager.autoConnect("Configura_brinco_01");
//or use this for auto generated name ESP + ChipID
//wifiManager.autoConnect();


//if you get here you have connected to the WiFi
Serial.println("conetado!");

}


void loop() {
digitalWrite(2, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(2, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}

//=====================

O estranho que é a parte do blink não funciona de forma nenhuma. Mesmo se eu trocar o pino digital para outro, nesse código específico por comodidade estou usando o LED da própria placa do NodeMCU Lolin.

Será que alguém tem idéia do porque o código do led não funciona e o do wifi sim?

Detalhe: Se eu coloco só o código do blink funciona normal o led. 

Não dá nenhum erro de compilação quando uno os 2 códigos.

Exibições: 5805

Responder esta

Respostas a este tópico

Pois é, mas ai que está, eu consigo fazer o blink funcionar e piscar a led normal, mas para isso preciso usar apenas o código do blink:

// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}

===========

Se eu colocar assim, funciona perfeito.

Da mesma forma se eu colocar só o código para a parte wifi que estou testando funciona também.

Quando eu junto os dois códigos é que dá o erro. E não adianta nem trocar a led de pino.

Não aparece erro no compilador, e a led ou fica acessa permanentemente ou não liga.

Me parece uma instabilidade do modulo na realidade, ou até de firmware. Meu modulo é o NodeMCU V.3 - Lolin com ESP12-E    Já efetuei o mesmo teste em 4 deles.

Tentou isso ?

O Led azul do modulo EP8266-12  esta conectado no GPIO 1 , mas no ESP8266-12E  o Led esta conectado no pino GPIO 2.  O led do GPIO 2 (D2) corresponde ao pino TX1 da comunicação serial (secundária) Sugiro que  desative a comunicação serial no seu Sketch, para efeito de testes. 

Caro José estava olhando o seu link:

https://github.com/esp8266/Arduino

Eu já fiz esse procedimento de instalar os arquivos para funcionar com a IDE do Arduino. Estou comessando a desconfiar do bootloader da placa, talves eu esteja com uma versão diferente de esp que não é o 12-E, percebi que o pessoal está chamando o bootloader de firmware.

Você já leu sobre algum firmware ou bootloader específico para Esp-12E para trabalhar na IDE do arduino?

Edilson, bom dia. 

Se já conseguiu carregar o FW da IDE Arduino, esqueça o FW  NonOS da Espressif. 

O que esta rodando é o FW carregado da IDE do Arduino. 

Sugiro que  desative a comunicação serial no seu Sketch, para efeito de testes. 

Edilson, enxuguei seu código e utilizei a constante D4 (que é o GPIO2). Compilei numa NodeMCU 0.9 (ESP-12  Module) e em uma NodeMCU 1.0 (ESP-12e Module)

Veja aqui:

http://pastebin.com/G5CztzHP

Se não funcionar, comece a desconfiar do seu hardware ou da sua instalação, o código não é o problema

Você configurou corretamente a placa na IDE do Arduino ?

É importante isso. NodeMCU 0.9 é uma coisa, NodeMCU 1.0 é outra. Generic Module é outra.

Qual a função do pino CS0 ?

Edilson, bom dia !

Não há nada de errado com sua placa ou bootloader.

Para trabalhar com o nodeMCU na IDE do Arduino não precisa gravar nenhum bootloader.

Veja meu artigo sobre isso em: http://josecintra.com/blog/programando-nodemcu-esp8266-ide-arduino/

Se o código do blink está funcionando OK, então o problema é simplesmente no código do WiFiManager. Não tem nada a ver com a pinagem.

Para acessar a Internet, o WiFiManager é apenas um facilitador, nem ele é necessário..

Veja este outro exemplo: http://josecintra.com/blog/nodemcu-web-server-ajax/

O que está acontecendo é que o WiFiManager não permite acessar a rotina que está no loop, enquanto você não libera a configuração do WiFi que deve ser feita remotamente acessando de um outro terminal.

Veja um artigo sobre o WiFiManager aqui: http://pedrominatel.com.br/esp8266/biblioteca-wifimanager-para-o-es...

Veja a explicação para isso do próprio criador do WiFiManager:

If you would rather start the configuration portal on demand rather than automatically on a failed connection attempt, then this is for you.

Instead of calling autoConnect() which does all the connecting and failover configuration portal setup for you, you need to use startConfigPortal(). Do not use BOTH.

void loop() {
  // is configuration portal requested?
  if ( digitalRead(TRIGGER_PIN) == LOW ) {
    WiFiManager wifiManager;
    wifiManager.startConfigPortal("OnDemandAP");
    Serial.println("connected...yeey :)");
  }
}

Entendi, então como não recebo a mensagem de conectado, ele não continua a ler o código correto?

Muito obrigado Jose

Resolvido era isso mesmo!

Quando recebi a mensagem de conectado rodou o código do loop.

Alterei o título do tópico para ficar correspondente ao problema real caso alguém o enfrente também.

Poderia me dar uma última informação? Você sabe se é possível usar o configurador por interface web dessa biblioteca sem travar o código loop? Por que estou pensando em usar em um projeto que precisa que o código loop seja executado independente de o wifi estar conectado ou não, se isso não é possível conhece alguma outra biblioteca que permita a configuração por interface web para que eu de uma estudada nela?

Olá Edilson!

Nunca usei essa library WiFiManager.

Fiquei conhecendo através do seu post.

Assim que puder, vou testá-la, pois achei bem interessante.

Tire a configuração do setup e tente fazer toda a configuração dentro do loop, dessa forma:

void loop() {

    WiFiManager wifiManager;
    wifiManager.startConfigPortal("OnDemandAP");
    Serial.println("connected");
   

    ... coloque o código do blink aqui...

}

Se não der certo:

Quem conhece bem essa library é o Pedro Minatel. Tente enviar uma mensagem para ele no blog:

http://pedrominatel.com.br/esp8266/biblioteca-wifimanager-para-o-es...

Informe timeout antes de chamar autoConnect()

#include <WiFiManager.h>

void setup() {

  pinMode(D4, OUTPUT);

  WiFiManager wifiManager;
  //sets timeout in seconds
  wifiManager.setTimeout(20);

  if(!wifiManager.autoConnect("AutoConnectAP")) {
    Serial.println("failed to connect and hit timeout");
  }

  else {
    Serial.println("Conectado...");
  }

}

void loop() {

//vc  vai chegar aqui mesmo sem conexão WiFi

  digitalWrite(D4,HIGH);

  delay(1000);

  digitalWrite(D4, LOW);

  delay(1000);

}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço