Nodemcu stops responding after a while

Good afternoon,
I tried reading posts on this forum with the same issue but nothing worked for me. I'm using a nodemcu board to control a light switch: it works great but after a while it stops responding. I think it disconnects from internet.
I tried putting the connection code into the void loop but nothing changes: it connects every loop cycle but after a while it stops at "connect to ..." and I have to restart the board.
Thank you for your help.

code? is it server or client?

Thank you for your answer: that's a client.
Here's my code:

#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

#define Relay1 5

#define WLAN_SSID "ssid" // Your SSID
#define WLAN_PASS "password" // Your password

/************************* Adafruit.io Setup *********************************/

#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883 // use 8883 for SSL
#define AIO_USERNAME "my username" // Replace it with your username
#define AIO_KEY "my password" // Replace with your Project Auth Key

/************ Global State (you don't need to change this!) ******************/

// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;
// or... use WiFiFlientSecure for SSL
//WiFiClientSecure client;

// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);

/****************************** Feeds ***************************************/

// Setup a feed called 'onoff' for subscribing to changes.
Adafruit_MQTT_Subscribe Light1 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME"/feeds/light"); // FeedName

void MQTT_connect();

void setup() {
Serial.begin(115200);

pinMode(Relay1, OUTPUT);

// Connect to WiFi access point.
Serial.println(); Serial.println();
Serial.print("Connecting to ");
Serial.println(WLAN_SSID);

WiFi.begin(WLAN_SSID, WLAN_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();

Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());

// Setup MQTT subscription for onoff feed.
mqtt.subscribe(&Light1);
}

void loop() {

// Setup MQTT subscription for onoff feed.
mqtt.subscribe(&Light1);

MQTT_connect();

Adafruit_MQTT_Subscribe *subscription;
while ((subscription = mqtt.readSubscription(5000))) {
if (subscription == &Light1) {
Serial.print(F("Got: "));
Serial.println((char *)Light1.lastread);
int Light1_State = atoi((char *)Light1.lastread);
digitalWrite(Relay1, !(Light1_State));

}
}
}

void MQTT_connect() {
int8_t ret;

// Stop if already connected.
if (mqtt.connected()) {
return;
}

Serial.print("Connecting to MQTT... ");

uint8_t retries = 3;

while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(5000); // wait 5 seconds
retries--;
if (retries == 0) {
// basically die and wait for WDT to reset me
while (1);
}
}
Serial.println("MQTT Connected!");

}

Please help me, that problem is very frustrating.

try esp8266 Arduino boards package version 2.4.2

Thank you for your answer!
I tried but still the same issue. Any other idea?

Any idea?

Really nothing?

your sketch doesn't print "connect to"

My skecth prints on the serial when the module connects to the INternet: after a while it stops printing and it isn 't unreachable from adafruit.

add more debug prints to see where it hangs

Hello There,

Hope you find this message and this reply helps you resolve your issue.

I've been recently working with Node MCU/ ESP 8266 module.
I'm using it to turn ON/ OFF Lights and Fans. Basically, a home automation project.

I FOUND THE SAME ISSUE OF NO RESPONSE FROM NODE MCU AFTER 10-15 MINS OF INACTIVITY.

This is quite irritating, as I always had to reset the module to make it work again.
**** BUT I HAVE A SOLUTION TO IT NOW!!!!!

Basically, Node MCU constantly reads the Subscription and acts accordingly to turn ON/OFF any devices.
*subscription is a pointer which reads the Subscription value being sent from Adafruit.

Adafruit_MQTT_Subscribe *subscription;
while ((subscription = mqtt.readSubscription(5000)))

If there is inactivity for a long period of time, there is a blank value sent and the connection between MQTT broker and NodeMCU is broken.
We must send a ping to let the broker know you're around!
So you need to add a simple line mqtt.ping(); just before closing your VOID LOOP bracket.
VOILA! This resolves the issue completely.
Now you are constantly pinging your broker and no connections breaks.

I've tried this in my project. I sent a command at night and tried to send another command in the morning, after 12 hours. AND IT WORKED!!!!!

Just add a ping in your VOID LOOP and get rid of this issue.
Good Luck!

[u]More Info about Adafruit MQTT: https://learn.adafruit.com/mqtt-adafruit-io-and-you/intro-to-adafruit-mqtt[/u]

@dusanersaurabh, Thanks a lot. It resolved my issue (although this is not my thread I was facing the same issue)