help with esp8266 auto reconnect

Hi, I am using a ESP8266 NodeMCU CP2102 ESP-12E to read DHT22 sensor for use in a small green house and/or keep an eye on the temp for our new baby chic's.

After a while of being connected it seems to drop the wifi and needs to have power cycled before it starts to work again.....I've tried a number of things without success. I'm new at all this so still having trouble understanding the basics....

Can I make this thing automatically connect again when it drops out? Any help would be greatly appreciated...

Here is the code as it stands now:

/*********
 Rui Santos
 Complete project details at https://randomnerdtutorials.com  
*********/

// Including the ESP8266 WiFi library
#include <ESP8266WiFi.h>
#include "DHT.h"

// Uncomment one of the lines below for whatever DHT sensor type you're using!
//#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321

// Replace with your network details
const char* ssid = "Fios-I79ML";
const char* password = "doves294divert8060";

// Web Server on port 80
WiFiServer server(80);

// DHT Sensor
const int DHTPin = 5;
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);

// Temporary variables
static char celsiusTemp[7];
static char fahrenheitTemp[7];
static char humidityTemp[7];

// only runs once on boot
void setup() {
 // Initializing serial port for debugging purposes
 Serial.begin(115200);
 delay(10);

 dht.begin();
 
 // Connecting to WiFi network
 Serial.println();
 Serial.print("Connecting to ");
 Serial.println(ssid);
 
 WiFi.begin(ssid, password);
 
 while (WiFi.status() != WL_CONNECTED) {
   delay(500);
   Serial.print(".");
 }
 Serial.println("");
 Serial.println("WiFi connected");
 
 // Starting the web server
 server.begin();
 Serial.println("Web server running. Waiting for the ESP IP...");
 delay(1000);
 
 // Printing the ESP IP address
 Serial.println(WiFi.localIP());
}

// runs over and over again
void loop() {
 // Listenning for new clients
 WiFiClient client = server.available();
 
 if (client) {
   Serial.println("New client");
   // bolean to locate when the http request ends
   boolean blank_line = true;
   while (client.connected()) {
     if (client.available()) {
       char c = client.read();
       
       if (c == '\n' && blank_line) {
           // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
           float h = dht.readHumidity();
           // Read temperature as Celsius (the default)
           float t = dht.readTemperature();
           // Read temperature as Fahrenheit (isFahrenheit = true)
           float f = dht.readTemperature(true);
           // Check if any reads failed and exit early (to try again).
           if (isnan(h) || isnan(t) || isnan(f)) {
             Serial.println("Failed to read from DHT sensor!");
             strcpy(celsiusTemp,"Failed");
             strcpy(fahrenheitTemp, "Failed");
             strcpy(humidityTemp, "Failed");         
           }
           else{
             // Computes temperature values in Celsius + Fahrenheit and Humidity
             float hic = dht.computeHeatIndex(t, h, false);       
             dtostrf(hic, 6, 2, celsiusTemp);             
             float hif = dht.computeHeatIndex(f, h);
             dtostrf(hif, 6, 2, fahrenheitTemp);         
             dtostrf(h, 6, 2, humidityTemp);
             // You can delete the following Serial.print's, it's just for debugging purposes
             Serial.print("Humidity: ");
             Serial.print(h);
             Serial.print(" %\t Temperature: ");
             Serial.print(t);
             Serial.print(" *C ");
             Serial.print(f);
             Serial.print(" *F\t Heat index: ");
             Serial.print(hic);
             Serial.print(" *C ");
             Serial.print(hif);
             Serial.print(" *F");
             Serial.print("Humidity: ");
             Serial.print(h);
             Serial.print(" %\t Temperature: ");
             Serial.print(t);
             Serial.print(" *C ");
             Serial.print(f);
             Serial.print(" *F\t Heat index: ");
             Serial.print(hic);
             Serial.print(" *C ");
             Serial.print(hif);
             Serial.println(" *F");
           }
           client.println("HTTP/1.1 200 OK");
           client.println("Content-Type: text/html");
           client.println("Connection: close");
           client.println();
           // your actual web page that displays temperature and humidity
           client.println("<!DOCTYPE HTML>");
           client.println("<html>");
           client.println("<head></head><body><h1>Chic House</h1><h3>Temp: ");
//            client.println(celsiusTemp);
//            client.println("*C</h3><h3>Temp: ");
           client.println(fahrenheitTemp);
           client.println("*F</h3><h3>Humidity: ");
           client.println(humidityTemp);
           client.println("%</h3><h3>");
           client.println("</body></html>");     
           break;
       }
       if (c == '\n') {
         // when starts reading a new line
         blank_line = true;
       }
       else if (c != '\r') {
         // when finds a character on the current line
         blank_line = false;
       }
     }
   }  
   // closing the client connection
   delay(1);
   client.stop();
   Serial.println("Client disconnected.");
 }
}

"After a while of being connected it seems to drop the wifi and needs to have power cycled before it starts to work again.....I've tried a number of things without success. I'm new at all this so still having trouble understanding the basics...."

First you should read the "Read this before posting a program question..." at the top of the discussion list. It will tell you how touse the code tag feature </> to post your code. That being said, maybe you could detail what you have tried to fix the issue. If the disconnection occurs at a specific time after connection to your network/router, then that might be a place to look. I think some/most wifi code is setup to reconnect if a connection is lost.

I think i've found something in your html-code, browsers tend to get non responsive if you forget to close something you've opened, and at the very end you open

without closing it

            client.println("%</h3><h3>");
            client.println("</body></html>");     
            break;

Change it to

            client.println("%</h3>");
            client.println("</body></html>");     
            break;

and see if problem persists

"First you should read the "Read this before posting a program question..." at the top of the discussion list. It will tell you how touse the code tag feature </> to post your code. That being said, maybe you could detail what you have tried to fix the issue. If the disconnection occurs at a specific time after connection to your network/router, then that might be a place to look. I think some/most wifi code is setup to reconnect if a connection is lost."
[/quote]

Thank you, just getting started with this and realizing I have a long way to go...

It doesn't seem to be a specific time, just random after an hour or two or three...

oh gosh, not even sure I'm responding to the posts right...lol

It doesn't seem to be a specific time, just random after an hour or two or three..

fix the html and see if the problem persists

Deva_Rishi:
fix the html and see if the problem persists

I changed the HTML to this:

            client.println("%</h3>");
            client.println("</body></html>");     
            break;

and it seemed to disconnected even faster... within the first 10-15 min...

Deva_Rishi:
I think i've found something in your html-code, browsers tend to get non responsive if you forget to close something you've opened, and at the very end you open

without closing it

            client.println("%</h3><h3>");

client.println("");    
           break;



Change it to 


client.println("%");
           client.println("");    
           break;



and see if problem persists

After further investigation it seems that the board continues its connection to the router but fails to display the page. Last time it happened it took around 30-45 minutes

Here ids the current sketch:

/*********
  Rui Santos
  Complete project details at https://randomnerdtutorials.com  
*********/

// Including the ESP8266 WiFi library
#include <ESP8266WiFi.h>
#include "DHT.h"

// Uncomment one of the lines below for whatever DHT sensor type you're using!
//#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321

// Replace with your network details
const char* ssid = "Fios-I79ML";
const char* password = "doves294divert8060";

// Web Server on port 80
WiFiServer server(80);

// DHT Sensor
const int DHTPin = 5;
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);

// Temporary variables
static char celsiusTemp[7];
static char fahrenheitTemp[7];
static char humidityTemp[7];

// only runs once on boot
void setup() {
  // Initializing serial port for debugging purposes
  Serial.begin(115200);
  delay(10);

  dht.begin();
  
  // Connecting to WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  
  // Starting the web server
  server.begin();
  Serial.println("Web server running. Waiting for the ESP IP...");
  delay(1000);
  
  // Printing the ESP IP address
  Serial.println(WiFi.localIP());
}

// runs over and over again
void loop() {
  // Listenning for new clients
  WiFiClient client = server.available();
  
  if (client) {
    Serial.println("New client");
    // bolean to locate when the http request ends
    boolean blank_line = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        
        if (c == '\n' && blank_line) {
            // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
            float h = dht.readHumidity();
            // Read temperature as Celsius (the default)
            float t = dht.readTemperature();
            // Read temperature as Fahrenheit (isFahrenheit = true)
            float f = dht.readTemperature(true);
            // Check if any reads failed and exit early (to try again).
            if (isnan(h) || isnan(t) || isnan(f)) {
              Serial.println("Failed to read from DHT sensor!");
              strcpy(celsiusTemp,"Failed");
              strcpy(fahrenheitTemp, "Failed");
              strcpy(humidityTemp, "Failed");         
            }
            else{
              // Computes temperature values in Celsius + Fahrenheit and Humidity
              float hic = dht.computeHeatIndex(t, h, false);       
              dtostrf(hic, 6, 2, celsiusTemp);             
              float hif = dht.computeHeatIndex(f, h);
              dtostrf(hif, 6, 2, fahrenheitTemp);         
              dtostrf(h, 6, 2, humidityTemp);
              // You can delete the following Serial.print's, it's just for debugging purposes
              Serial.print("Humidity: ");
              Serial.print(h);
              Serial.print(" %\t Temperature: ");
              Serial.print(t);
              Serial.print(" *C ");
              Serial.print(f);
              Serial.print(" *F\t Heat index: ");
              Serial.print(hic);
              Serial.print(" *C ");
              Serial.print(hif);
              Serial.print(" *F");
              Serial.print("Humidity: ");
              Serial.print(h);
              Serial.print(" %\t Temperature: ");
              Serial.print(t);
              Serial.print(" *C ");
              Serial.print(f);
              Serial.print(" *F\t Heat index: ");
              Serial.print(hic);
              Serial.print(" *C ");
              Serial.print(hif);
              Serial.println(" *F");
            }
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html");
            client.println("Connection: close");
            client.println();
            // your actual web page that displays temperature and humidity
            client.println("<!DOCTYPE HTML>");
            client.println("<html>");
            client.println("<head></head><body><h1>Chic House</h1><h3>Temp: ");
//            client.println(celsiusTemp);
//            client.println("*C</h3><h3>Temp: ");
            client.println(fahrenheitTemp);
            client.println("*F</h3><h3>Humidity: ");
            client.println(humidityTemp);
            client.println("%</h3>");
            client.println("</body></html>");     
            break;
        }
        if (c == '\n') {
          // when starts reading a new line
          blank_line = true;
        }
        else if (c != '\r') {
          // when finds a character on the current line
          blank_line = false;
        }
      }
    }  
    // closing the client connection
    delay(1);
    client.stop();
    Serial.println("Client disconnected.");
  }
}