0

I tried to test NodeMCU ESP8266 with this code from here

 #include <ESP8266WiFi.h>
 #include <WiFiClient.h> 
 #include <ESP8266WebServer.h>
 #include <ESP8266HTTPClient.h>
 /* Set these to your desired credentials. */
 const char *ssid = "dummy"; //ENTER YOUR WIFI SETTINGS
 const char *password = "12345678";
 //Web/Server address to read/write from 
 const char *host = "192.168.43.128"; //https://circuits4you.com website or IP address of server
 //=======================================================================
 // Power on setup
 //=======================================================================
 void setup() {
 delay(1000);
 Serial.begin(115200);
 WiFi.mode(WIFI_OFF); //Prevents reconnection issue (taking too long to connect)
 delay(1000);
 WiFi.setSleepMode(WIFI_NONE_SLEEP);
 WiFi.mode(WIFI_STA); //This line hides the viewing of ESP as wifi hotspot
 WiFi.begin(ssid, password); //Connect to your WiFi router
 Serial.println("");
 Serial.print("Connecting");
 // Wait for connection
 while (WiFi.status() != WL_CONNECTED) {
 delay(500);
 Serial.print(".");
 }
 //If connection successful show IP address in serial monitor
 Serial.println("");
 Serial.print("Connected to ");
 Serial.println(ssid);
 Serial.print("IP address: ");
 Serial.println(WiFi.localIP()); //IP address assigned to your ESP
 }
 //=======================================================================
 // Main Program Loop
 //=======================================================================
 void loop() {
 HTTPClient http; //Declare object of class HTTPClient
 String ADCData, station, postData;
 int adcvalue=analogRead(A0); //Read Analog value of LDR
 ADCData = String(adcvalue); //String to interger conversion
 station = "A";
 //Post Data
 postData = "status=" + ADCData + "&station=" + station ;
 http.begin("http://192.168.43.128/c4yforum/postdemo.php"); //Specify request destination
 http.addHeader("Content-Type", "application/x-www-form-urlencoded"); //Specify content-type header
 int httpCode = http.POST(postData); //Send the request
 String payload = http.getString(); //Get the response payload
 Serial.println(httpCode); //Print HTTP return code
 Serial.println(payload); //Print request response payload
 http.end(); //Close connection
 delay(5000); //Post Data at every 5 seconds
 }

It was running well and posted data to Database after a few hours. Then It was disconnected from WiFi somehow . Of course I reset power supply again It's connected.

How should I do to fix with that code to reconnect WiFi right after that accident Or any other Solution for that ? Thank you

asked Mar 13, 2020 at 1:59
1

2 Answers 2

1

What you need to do is leave the board connected to your computer and watch the serial monitor to capture the output during the crash. If the board has a true crash it will output a bunch of information which may tell you why you it is crashing. It could be a strings/heap problem or maybe a memory issue since you are declaring a new http object every 5 seconds. Maybe try putting the HTTPClient http; line up where you declare the host variable so that it is a global variable and not a local variable.

Since your loop doesn't test to make sure the wifi connection is still good then if you get a disconnection then the program will just fail and never try to re-connect. So at the start of your main loop put the same wifi testing logic that is also in the setup function. If the connection is down then reset and start from the very beginning to re-establish the wifi connection.

if (WiFi.status() != WL_CONNECTED) {
 ESP.reset()
 }
answered Mar 13, 2020 at 5:47
2
  • Thank you . I declared HTTPClient http ; outside of loop method. However It's still get the same errors . Assume that It could be a strings/heap problem or maybe a memory issue. How should I do please ? Commented Mar 13, 2020 at 7:53
  • That worked for me ! Thank you Commented Mar 16, 2020 at 1:22
1

I also had the same issues. I've looked for some posting like here. You can try these codes

void loop()
 {
 WiFiClient client;
 Serial.printf("\n[Connecting to %s ... ", host);
if (client.connect(host, 80))
{
Serial.println("connected]");
Serial.println("[Sending a request]");
client.print(String("GET /") + " HTTP/1.1\r\n" +
 "Host: " + host + "\r\n" +
 "Connection: close\r\n" +
 "\r\n"
 );
Serial.println("[Response:]");
while (client.connected() || client.available())
{
 if (client.available())
 {
 String line = client.readStringUntil('\n');
 Serial.println(line);
 }
}
client.stop();
 Serial.println("\n[Disconnected]");
 }
 else
 {
 Serial.println("connection failed!]");
 client.stop();
 }
 delay(5000);
 }

The seconds thing as @tavis said you can try from here. It sounds ESP.restart(); is recommended rather than ESP.reset(); It seems our issue is very hard.

answered Mar 14, 2020 at 6:39
1
  • Thanks for sharing Commented Mar 16, 2020 at 1:23

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.