NodeMCU pierde conexión WiFi

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.

Observa como se deben postear los códigos, no como citas (comentarios de otros compañeros), sino con la etiqueta indicada por las normas del foro que te invito a que leas.

Hay algo con las interrupciones que estas haciendo mal. Prueba a ver si tu código sin ellas funcionaría bien y luego repite con ellas. Si como creo falla, pon atención al momento en que detienes las interrupciones.

Muchas gracias por responder. Qué estaría haciendo mal con las interrupciones? Eso puede afectar a la conexión/desconexión del NodeMCU al wifi? La verdad es que estoy un poco verde con esto, perdón la ignorancia.

Saludos.

MIra esto

void loop()
{
    if(pico1 == 200)
    {
      //Deshabilito la interrupcion de los pines mientras realiza el calculo y hace el post
      cortarInterrupciones();      // <== PUNTO EN QUE CORTAS LAS INTERRUPCIONES
    
      //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);   // <== CON INTERRUPCIONES CORTADAS PRETENDES QUE FUNCIONE WIFI
      
      //Habilito la interrupcion de los pines mientras realiza el calculo y hace el post
      habilitarInterrupciones();   
    }
}