Hola buenas tardes. Es la primera vez que uso el foro y soy nuevo en el mundo de arduino.
Estoy teniendo problemas con el NodeMCU V3 ya que pierde la conexión al WiFi y no la vuelve a levantar sólo. Una vez que lo conecto, pasa un tiempo funcionando sin problemas, pero pasada unas horas de que no hay actividad, pierde la conexión.
Éste es el código que estoy usando. Cada vez que el arduino recibe una señal de un sensor, si tiene que hacer un post, primero pregunto si tengo internet. En caso de que no tenga internet vuelvo a conectar y recién ahi hago el post. Pero parece que no está funcionando.
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <base64.h>
const char* ssid = "XXX";
const char* password = "XXX";
const String usr = "XXX";
const String pwd = "XXX!";
//Pines donde se conecta cada sensor
byte sensorInterrupt1 = D1;
byte sensorInterrupt2 = D2;
//Contadores de pulsos por pico
int pico1;
int pico2;
char* data;
void setup()
{
Serial.begin(115200);
delay(10);
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
pico1 = 0;
pico2 = 0;
data = "";
attachInterrupt(sensorInterrupt1, acumuladorpico1, FALLING);
attachInterrupt(sensorInterrupt2, acumuladorpico2, FALLING);
}
void loop()
{
if(pico1 == 200)
{
//Deshabilito la interrupcion de los pines mientras realiza el calculo y hace el post
cortarInterrupciones();
//Reinicio el contador
pico1 = 0;
data = "{\"pico_id\": 1}";
realizarPost(1, data);
//Habilito la interrupcion de los pines mientras realiza el calculo y hace el post
habilitarInterrupciones();
}
if(pico2 == 200)
{
//Deshabilito la interrupcion de los pines mientras realiza el calculo y hace el post
cortarInterrupciones();
//Reinicio el contador
pico2 = 0;
data = "{\"pico_id\": 2}";
realizarPost(2, data);
//Habilito la interrupcion de los pines mientras realiza el calculo y hace el post
habilitarInterrupciones();
}
}
void cortarInterrupciones()
{
detachInterrupt(sensorInterrupt1);
detachInterrupt(sensorInterrupt2);
}
void habilitarInterrupciones()
{
attachInterrupt(sensorInterrupt1, acumuladorpico1, FALLING);
attachInterrupt(sensorInterrupt2, acumuladorpico2, FALLING);
}
void acumuladorpico1()
{
pico1++;
}
void acumuladorpico2()
{
pico2++;
}
void realizarPost(int pico, char* data)
{
//Hago el post
if(WiFi.status()== WL_CONNECTED)
{
hacerPost(pico);
}
else
{
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
hacerPost(pico);
}
}
void hacerPost(int pico)
{
HTTPClient http;
http.begin("URL XXX");
String auth = base64::encode(usr + ":" + pwd);
http.addHeader("Content-Type", "application/json");
http.addHeader("Authorization", "Basic " + auth);
http.POST(data);
Serial.println(pico);
http.end();
}
Espero que se entienda, muchas gracias!!
Saludos.