NodeMCU Reconnect-MQTT-WİFİ

Updated: Nov 20, 2021


When nodemcu or esp32 can't provide internet connection;we need to ensure that it tries and resets by waiting for a certain number of times.


In some cases, mqtt communication cannot be provided or the connection is broken.In this case we have to run the reconnection program.


You can use this system in all your projects.


Red colored codes are used for reconnection and wifi connection tests.


#include <ESP8266WiFi.h> //The library we will use for the wifi connection
#include <PubSubClient.h> // The library we will use for the mqtt connection

//mqtt connection library settings
WiFiClient espClient;
PubSubClient client(espClient);

//


//settings for internet and mqtt connection
//settings for internet and mqtt connection
const char* ssid = ""; // wifi SSID
const char* password =  ""; // wifi password 
const char* mqttServer = ""; // mqtt server ip  to be sent by smartespiot by mail 
const int mqttPort = ; // mqtt port   to be sent by smartespiot by mail 
const char* mqttUser = ""; // mqtt username  to be sent by smartespiot by mail 
const char* mqttPassword = ""; // mqtt pass to be sent by smartespiot by mail

//


//***//
int wificounter = 0; // for counting the number of trying connections
//**//

void setup() {
  Serial.begin(115200); // start serial communication at 115200 speed
  WiFi.begin(ssid, password); // start the wifi connection process

  while (WiFi.status() != WL_CONNECTED) { //
    delay(5000); //wait 5000ms
    Serial.println("Connecting to wifi..."); // wait until the wifi process connects
    //// trying 10 times connection after reset to esp
    wificounter = wificounter + 1;
    if (wificounter == 10) {
      ESP.reset();
    }
    /////
  }


  Serial.println("Wifi connection ready :)"); // print the connection made information to the serial port

  client.setServer(mqttServer, mqttPort);//start connecting to the mqtt server from the specified port

  while (!client.connected()) { //wait until we connect to mqtt
    Serial.println("Connecting to MQTT server...");

    if (client.connect("SmartEspIOT", mqttUser, mqttPassword )) {//login to mqtt server with username and password with smartespIOT name

      Serial.println("MQTT connection established :) ");

    } else {

      Serial.print("Unable to connect... ");// If the connection cannot be established, let's give a warning
      Serial.print(client.state());             // print the problem description
      // We can understand the problem according to the information returned from the clients state.
      //-4 : MQTT_CONNECTION_TIMEOUT - the server did not respond in the ongoing time
      //-3 : MQTT_CONNECTION_LOST - network connection lost
      //-2 : MQTT_CONNECT_FAILED - network connection failed
      //-1 : MQTT_DISCONNECTED - disconnected
      //0 : MQTT_CONNECTED - connection established
      //1 : MQTT_CONNECT_BAD_PROTOCOL - The server does not support the requested MQTT version
      //2 : MQTT_CONNECT_BAD_CLIENT_ID - The server did not accept your information
      //3 : MQTT_CONNECT_UNAVAILABLE - The server did not accept the connectionetmed
      //4 : MQTT_CONNECT_BAD_CREDENTIALS - username password not accepted
      //5 : MQTT_CONNECT_UNAUTHORIZED - you are not authorized to connect


      delay(2000);   // wait two seconds and try connecting again
      ////
      ESP.reset(); // unable to connect esp reset
      ///
    }
  }
}

////reconnect funtion //
void reconnect() {
WiFi.disconnect();
  delay(100);
  
WiFi.begin(ssid, password); // start the wifi connection process

while (WiFi.status() != WL_CONNECTED) { //
  delay(5000); //wait 5000ms
  Serial.println("Connecting to wifi..."); // wait until the wifi process connects
  //// trying 10 times connection after reset to esp
  wificounter = wificounter + 1;
  if (wificounter == 10) {
    ESP.reset();
  }
  /////
}


Serial.println("Wifi connection ready :)"); // print the connection made information to the serial port

client.setServer(mqttServer, mqttPort);//start connecting to the mqtt server from the specified port

while (!client.connected()) { //wait until we connect to mqtt
  Serial.println("Connecting to MQTT server...");

  if (client.connect("SmartEspIOT", mqttUser, mqttPassword )) {//login to mqtt server with username and password with smartespIOT name

    Serial.println("MQTT connection established :) ");

  } else {

    Serial.print("Unable to connect... ");// If the connection cannot be established, let's give a warning
    Serial.print(client.state());             // print the problem description
    // We can understand the problem according to the information returned from the clients state.
    //-4 : MQTT_CONNECTION_TIMEOUT - the server did not respond in the ongoing time
    //-3 : MQTT_CONNECTION_LOST - network connection lost
    //-2 : MQTT_CONNECT_FAILED - network connection failed
    //-1 : MQTT_DISCONNECTED - disconnected
    //0 : MQTT_CONNECTED - connection established
    //1 : MQTT_CONNECT_BAD_PROTOCOL - The server does not support the requested MQTT version
    //2 : MQTT_CONNECT_BAD_CLIENT_ID - The server did not accept your information
    //3 : MQTT_CONNECT_UNAVAILABLE - The server did not accept the connectionetmed
    //4 : MQTT_CONNECT_BAD_CREDENTIALS - username password not accepted
    //5 : MQTT_CONNECT_UNAUTHORIZED - you are not authorized to connect


    delay(2000);   // wait two seconds and try connecting again
    ////
    ESP.reset(); // unable to connect esp reset
    ///
  }
}
}
////////////////////////////////////////



void loop() {

  client.loop(); // mrun the mqtt data processing function
  ///// test client connected and start reconnect ///
  if (!client.connected()) {
    reconnect();
  }
  /////
  client.publish("devicename/topic", "2021");// send our message in the topic with the device name
  delay(2000); // wait two seconds and send the message again
  Serial.println("message send");
}

reconnect_resart_smartespiot_web
.zip
Download ZIP • 2KB

11 views0 comments

Recent Posts

See All