Convert string to character

How can I change all strings in this code to characters without getting an error?


//Rev 1.5
//Uptime added
//Web OTA Added
//Ni read bug fix
//The reset operation was not performed when it was turned on without a sensor fixed
//Github SelfUpdate 

#include <SoftwareSerial.h>
//#include <WiFiUdp.h>
#include <ESP8266mDNS.h>
#include <Wire.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
//#include <ArduinoOTA.h>
#include <ESPAsyncTCP.h>
//#include <ESPAsyncWebServer.h>
//#include <AsyncElegantOTA.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266httpUpdate.h>
#include <WiFiClientSecure.h>
#include <ESP8266WebServer.h>
#include <EEPROM.h>


String SerialNumber = "VMN-A01-01-0002";
const String FirmwareVer={"1.6.1"}; 
#define URL_fw_Version "https://raw.githubusercontent.com/navid-h/"+SerialNumber+"/main/bin_version.txt"
#define URL_fw_Bin "https://raw.githubusercontent.com/navid-h/"+SerialNumber+"/main/"+SerialNumber+".bin"
const char* host = "raw.githubusercontent.com";
const int httpsPort = 443;


#define URL_fw_Version2 "http://mqtt.angizehco.com"
#define URL_fw_Bin2 "http://mqtt.angizehco.com/"+SerialNumber+"/"+SerialNumber+".bin"
const char* host2 = "mqtt.angizehco.com";
const int httpsPort2 = 80;


#define WIFI_SSID "SSID"
#define WIFI_PASS "PASSWORD"
#define AP_SSID SerialNumber
#define AP_PASS ""
const char* ssid = WIFI_SSID;
const char* passphrase = WIFI_PASS;
const char* mqttServerName = "";
const int   mqttport = 1883;         
const char* mqttuser = "";
const char* mqttpass = "";
String prefix= "" ;
const char* clientID = "VMN-A01-01-0002";


const int redPin = 0;
IPAddress local_IP(192,168,43,10);
IPAddress gateway(192,168,43,1);
IPAddress subnet(255,255,255,0);
IPAddress primaryDNS(8,8,8,8);
IPAddress secondaryDNS(8,8,4,4);

//AsyncWebServer server(80);

WiFiClient wclient;                        
PubSubClient client(wclient);

#define RE 5
#define DE 4
#define PUB_DELAY 50


const byte ph[] = {0x02, 0x03, 0x00, 0x06, 0x00, 0x01, 0x64, 0x38}; // Soil PH Sensor
byte ph_values[11];




const byte ni[] = {0x02, 0x03, 0x00, 0x1E, 0x00, 0x01, 0xE4, 0x3F}; // Multi Sensor: Nitrogen
const byte phos[] = {0x02, 0x03, 0x00, 0x1F, 0x00, 0x01, 0xB5, 0xFF};
const byte pot[] = {0x02, 0x03, 0x00, 0x20, 0x00, 0x01, 0x85, 0xF3};
//const byte pot[] = {0x01, 0x03, 0x00, 0x20, 0x00, 0x01, 0x85, 0xC0};
const byte moist[] = {0x02, 0x03, 0x00, 0x12, 0x00, 0x01, 0x24, 0x3C};
const byte temp[] = {0x02, 0x03, 0x00, 0x13, 0x00, 0x01, 0x75, 0xFC};
const byte ec[] = {0x02, 0x03, 0x00, 0x15, 0x00, 0x01, 0x95, 0xFD};

const byte orp[] = {0x01, 0x03, 0x00, 0x01, 0x00, 0x01, 0xD5, 0xCA}; 
byte orp_values[11];

const byte ph2[] = {0x01, 0x03, 0x00, 0x02, 0x00, 0x01, 0x25, 0xCA}; 
byte ph2_values[11];

const byte temp2[] = {0x01, 0x03, 0x00, 0x03, 0x00, 0x01, 0x74, 0x0A};
byte temp2_values[11];

const byte res[] = {0x01, 0x03, 0x00, 0x04, 0x00, 0x01, 0xC5, 0xCB};
byte res_values[11];

const byte ph3[] = {0x03, 0x03, 0x00, 0x06, 0x00, 0x01, 0x65, 0xE9}; // Soil PH Sensor
byte ph3_values[11];

const byte ec2[] = {0x04, 0x03, 0x00, 0x15, 0x00, 0x01, 0x95, 0x9B};
byte ec2_values[11];


//Lux Transmitter
const byte humid[] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x01, 0x84, 0x0A}; 
const byte temp3[] = {0x01, 0x03, 0x00, 0x01, 0x00, 0x01, 0xD5, 0xCA}; 
const byte co2[] = {0x01, 0x03, 0x00, 0x05, 0x00, 0x01, 0x94, 0x0B}; 
const byte lux[] = {0x01, 0x03, 0x00, 0x07, 0x00, 0x02, 0x75, 0xCA}; 




byte pot_values[11];
byte moist_values[11];
byte phos_values[11];
byte ni_values[11];
byte ec_values[11];
byte temp_values[11];

byte humid_values[11];
byte temp3_values[11];
byte co2_values[11];
byte lux_values[11];


int cnt=10;
int cnt2=60;
int cnt3 = 10;
int cnt4 = 10;


int i = 0;
int statusCode;
long Day=0;
int Hour =0;
int Minute=0;
int Second=0;
int HighMillis=0;
int Rollover=0;
int OtherParameterignore;
int PH3trigger , PHtrigger , EC2trigger ,CO2trigger ;
int NPKPublish , ECPublish ,PHPublish ,ALLPublish;


String esid;
String epass = "";
String content;
String st;
String payload2;
static unsigned long timer = millis();
static unsigned long blinker = millis();
static unsigned long timer3 = millis();
static unsigned long timer4 = millis();
static unsigned long ClientCheck = millis();



float phcomp ,phoscomp , potcomp , eccomp , moistcomp , tempcomp , nicomp , orpcomp , ph2comp , temp2comp , rescomp ,phcomp3 ,eccomp2 ,humidcomp ,temp3comp ,co2comp ,luxcomp;
float pubPH , pubPHOS , pubPOT , pubNI , pubMOIST , pubTEMP , pubEC ,pubRES ,pubEC2 ,pubPH3 ,pubHUMID ,pubTEMP3 ,pubCO2 ,pubLUX ;
int pubPH2 , pubORP , pubTEMP2 ;
unsigned int lastStringLength = FirmwareVer.length();


bool testWifi(void);
void launchWeb(void);
void setupAP(void);
ESP8266WebServer server(80);


SoftwareSerial mod;

 
void setup()
{
  Serial.println(ESP.getFreeHeap());
  Serial.begin(115200); 
  mod.begin(9600, SWSERIAL_8N1, 14, 12, false, 256);
  pinMode(RE, OUTPUT);
  pinMode(DE, OUTPUT);
  pinMode(redPin, OUTPUT);
  //WiFi.begin(WIFI_SSID, WIFI_PASS);
   EEPROM.begin(512);
   delay(10);
   Serial.println("Startup");
 //config wifi with optional settings
  
//  if(!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS))
//  {
//    Serial.println("STA Failed to configure");
//  }
  // Read eeprom for ssid and password
   Serial.println("Reading EEPROM ssid");
 
 for (int i = 0; i < 32; ++i)
  {
    esid += char(EEPROM.read(i));
  }
  Serial.println();
  Serial.print("SSID: ");
  Serial.println(esid);
  Serial.println("Reading EEPROM pass");
 
  
  for (int i = 32; i < 96; ++i)
  {
    epass += char(EEPROM.read(i));
  }
  Serial.print("PASS: ");
  Serial.println(epass);
 
 
  WiFi.begin(esid.c_str(), epass.c_str());
  if (testWifi())
  {
    Serial.println("Succesfully Connected!!!");
    mqttconnect();
    return;
  }
  else
  {
    Serial.println("Turning the HotSpot On");
    launchWeb();
    setupAP();// Setup HotSpot
  }
 
  Serial.println();
  Serial.println("Waiting.");
  
  while ((WiFi.status() != WL_CONNECTED))
  {
    //digitalWrite(redPin, HIGH);            // Fast Blink Red LED 
   // delay(100);
    //digitalWrite(redPin, LOW);
   // delay(1000);
    server.handleClient();
    if (millis() - timer > 300000){
      timer = millis();
       ESP.restart();
    }
  }
  ESP.restart();
//  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
//    request->send(200, "text/plain", "Hi! I am ESP8266.");
//  });
//
//  AsyncElegantOTA.begin(&server);    // Start ElegantOTA
//  server.begin();
//  Serial.println("HTTP server started");

  Serial.println('\n');
  Serial.println("Connection established!");  
  Serial.print("IP address:\t");
  Serial.println(WiFi.localIP());         //192.168.43.215

  
  
//  ArduinoOTA.onStart([]() {
//    String type;
//    if (ArduinoOTA.getCommand() == U_FLASH) {
//      type = "sketch";
//    } else { // U_FS
//      type = "filesystem";
//    }
//
//    // NOTE: if updating FS this would be the place to unmount FS using FS.end()
//    Serial.println("Start updating " + type);
//  });
//  ArduinoOTA.onEnd([]() {
//    Serial.println("\nEnd");
//  });
//  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
//    Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
//  });
//  ArduinoOTA.onError([](ota_error_t error) {
//    Serial.printf("Error[%u]: ", error);
//    if (error == OTA_AUTH_ERROR) {
//      Serial.println("Auth Failed");
//    } else if (error == OTA_BEGIN_ERROR) {
//      Serial.println("Begin Failed");
//    } else if (error == OTA_CONNECT_ERROR) {
//      Serial.println("Connect Failed");
//    } else if (error == OTA_RECEIVE_ERROR) {
//      Serial.println("Receive Failed");
//    } else if (error == OTA_END_ERROR) {
//      Serial.println("End Failed");
//    }
//  });
//  ArduinoOTA.begin();
  Serial.println("Ready");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  
}
 
void loop()
{  
  
   if ((WiFi.status() == WL_CONNECTED))
  {
uptime(); //Runs the uptime script located below the main loop and reenters the main loop
print_Uptime();
checkUpdate();   

if (millis() - ClientCheck > 200000){
if (!client.connected()) {
 
  reconnect();
  ClientCheck = millis();
  }
}
     client.loop();
//    if(millis() - blinker > 3000){
//    
//    digitalWrite(redPin, HIGH);
//    delay(20);
//    digitalWrite(redPin, LOW); 
//    delay(300);
//    digitalWrite(redPin, HIGH);
//    delay(20);
//    digitalWrite(redPin, LOW); 
//    delay(300);   
//    digitalWrite(redPin, HIGH);
//    delay(20);
//    digitalWrite(redPin, LOW); 
//    blinker = millis();
//    }
    
 //ArduinoOTA.handle();
 //client.loop();
 String IP = WiFi.localIP().toString() ;
client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/IP:"), toCharArray(String(clientID) +"/"+WiFi.localIP().toString()));
client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/Uptime:"), toCharArray("Uptime:"+String(Day)+":"+String(Hour)+":"+String(Minute)+":"+String(Second)));
client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/MAC:"), toCharArray(String(WiFi.macAddress())));
client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/FirmwareVer:"), toCharArray(String(FirmwareVer)));
Serial.println("IP: " +IP);


multi_sensor_ph_detect();
delay(50);
if (OtherParameterignore == 0){
multi_sensor_ni_detect();
delay(50);
multi_sensor_phos_detect();
delay(50);
multi_sensor_pot_detect();
delay(50);
multi_sensor_moist_detect();
delay(50);
multi_sensor_temp_detect();
delay(50);
multi_sensor_ec_detect();
delay(50);
}
client.loop();
//multi_sensor_orp_detect();
//multi_sensor_ph2_detect();
//multi_sensor_temp2_detect();
//multi_sensor_res_detect();

multi_sensor_ec2_detect();
delay(20);
multi_sensor_ph3_detect();
delay(20);

multi_sensor_humid_detect();
delay(100);
multi_sensor_temp3_detect();
delay(100);
multi_sensor_co2_detect();
delay(100);
multi_sensor_lux_detect();
delay(100);


 if (millis() - timer > 600000){
   publishData(); 
     timer = millis();
  } 

  

 }
  else
  {
      Serial.println("no connection");
      checkWifi();

  }
   //yield();
}

  
void multi_sensor_ph_detect(){

  uint32_t startTime;
  uint8_t i;

  // flush the receive buffer
  while (mod.available()) mod.read();

  // switch to transmit mode
  digitalWrite(DE, HIGH);
  digitalWrite(RE, HIGH);
  delay(100);

  // write out the modbus command bytes and wait for the transmission to finish
  mod.write(ph, sizeof(ph));
  mod.flush();

  // switch to receive mode 
  digitalWrite(DE, LOW);
  digitalWrite(RE, LOW);

  i = 0;
  startTime = millis();
  // wait for up to 500ms for a response
  while ( millis() - startTime <= 1000UL ) {
  
    if (mod.available() && i<sizeof(ph_values) ) {
      ph_values[i++] = mod.read();
       float ph_reg3and4 = ((ph_values[3] << 8) + ph_values[4]);
      ph_reg3and4 = ph_reg3and4/100;
      pubPH = ph_reg3and4;
      //Serial.println("PH : "+(String)ph_reg3and4+"");
      if(ph_reg3and4>=0){
        NPKPublish = 1;
      PHtrigger = 1;
      OtherParameterignore = 0;
      Serial.println("PH : "+(String)ph_reg3and4+"");
      int ph;
        ph = (int) (ph_reg3and4 * 10L);
        if (phcomp != ph){
        phcomp = ph;
        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/PH"), toCharArray(String(ph_reg3and4)));
        Serial.println("Published");
        }
      }
    }
    }
     if(PHtrigger != 1){
      OtherParameterignore = 1;
      NPKPublish = 0;
    Serial.println("check NPK sensor");
    client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/Will"), toCharArray("Check Sensor"));
  }
  PHtrigger = 0;
  }



void multi_sensor_phos_detect(){

//  while (true){
//    digitalWrite(DE, HIGH);
//    digitalWrite(RE, HIGH);
//    delay(100);
//    if (mod.write(phos, sizeof(phos)) == 8)
//    {
//      mod.flush();
//      digitalWrite(DE, LOW);
//      digitalWrite(RE, LOW);
//      mod.readBytes(phos_values, 7);
//     // Serial.print("Multi PHOS Values : ");
//      for (byte i = 0; i < 7; i++)
//      {
//       // Serial.print(phos_values[i], HEX);
//        Serial.print(" ");
//      }
//      Serial.println();
//    }
//    if (phos_values[0] == 0x02 && phos_values[1] == 0x03 && phos_values[2] == 0x02){
//      float phos_reg3and4 = ((phos_values[3] << 8) + phos_values[4]);
//      pubPHOS = phos_reg3and4;
//      if (phos_reg3and4 > -1 && phos_reg3and4 < 1000){
//        Serial.print("PHOS : "+(String)phos_reg3and4+" mg/kg");
//        Serial.println();
//        delay(100);
//        int phos;
//        phos = (int) (phos_reg3and4 * 1L);
//        if (phoscomp != phos){
//        phoscomp = phos;
//        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/PHOS"), toCharArray(String(phos_reg3and4)));
//        Serial.println("Published");
//        }
//        break;
//      }
//    }else{
//      Serial.print("PHOS cant measure");
//    break;
//    }
//  }
//}

uint32_t startTime;
  uint8_t i;

  // flush the receive buffer
  while (mod.available()) mod.read();

  // switch to transmit mode
  digitalWrite(DE, HIGH);
  digitalWrite(RE, HIGH);
  delay(100);

  // write out the modbus command bytes and wait for the transmission to finish
  mod.write(phos, sizeof(phos));
  mod.flush();

  // switch to receive mode 
  digitalWrite(DE, LOW);
  digitalWrite(RE, LOW);

  i = 0;
  startTime = millis();
  // wait for up to 500ms for a response
  while ( millis() - startTime <= 1000UL ) {
   // delay(50);
    if (mod.available() && i<sizeof(phos_values) ) {
      phos_values[i++] = mod.read();
       float phos_reg3and4 = ((phos_values[3] << 8) + phos_values[4]);
      phos_reg3and4 = phos_reg3and4;
      pubPHOS = phos_reg3and4;
      Serial.println("PHOS : "+(String)phos_reg3and4+"");
      int phos;
        phos = (int) (phos_reg3and4 * 1L);
        if (phoscomp != phos){
        phoscomp = phos;
        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/PHOS"), toCharArray(String(phos_reg3and4)));
        Serial.println("Published");
        }
      
     }
    }
  }



void multi_sensor_pot_detect(){

//  while (true){
//    digitalWrite(DE, HIGH);
//    digitalWrite(RE, HIGH);
//    delay(100);
//    if (mod.write(pot, sizeof(pot)) == 8)
//    {
//      mod.flush();
//      digitalWrite(DE, LOW);
//      digitalWrite(RE, LOW);
//      mod.readBytes(pot_values, 7);
//      //Serial.print("Multi POT Values : ");
//      for (byte i = 0; i < 7; i++)
//      {
//       // Serial.print(pot_values[i], HEX);
//        Serial.print(" ");
//      }
//      Serial.println();
//    }
//    if (pot_values[0] == 0x02 && pot_values[1] == 0x03 && pot_values[2] == 0x02){
//      float pot_reg3and4 = ((pot_values[3] << 8) + pot_values[4]);
//      pubPOT = pot_reg3and4;
//      if (pot_reg3and4 > -1 && pot_reg3and4 < 10000){
//        Serial.print("POT : "+(String)pot_reg3and4+" mg/kg");
//        Serial.println();
//      delay(100);
//        int pot;
//        pot = (int) (pot_reg3and4 * 1L);
//        if (potcomp != pot){
//        potcomp = pot;
//        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/POT"), toCharArray(String(pot_reg3and4)));
//        Serial.println("Published");
//        }
//        break;
//      }
//    }else{
//      Serial.print("POT cant measure");
//    break;
//    }
//  }
//}

uint32_t startTime;
  uint8_t i;

  // flush the receive buffer
  while (mod.available()) mod.read();

  // switch to transmit mode
  digitalWrite(DE, HIGH);
  digitalWrite(RE, HIGH);
  delay(100);

  // write out the modbus command bytes and wait for the transmission to finish
  mod.write(pot, sizeof(pot));
  mod.flush();

  // switch to receive mode 
  digitalWrite(DE, LOW);
  digitalWrite(RE, LOW);

  i = 0;
  startTime = millis();
  // wait for up to 500ms for a response
  while ( millis() - startTime <= 1000UL ) {
   // delay(50);
    if (mod.available() && i<sizeof(pot_values) ) {
      pot_values[i++] = mod.read();
       float pot_reg3and4 = ((pot_values[3] << 8) + pot_values[4]);
      pot_reg3and4 = pot_reg3and4;
      pubPOT = pot_reg3and4;
      Serial.println("POT : "+(String)pot_reg3and4+"");
       int pot;
        pot = (int) (pot_reg3and4 * 1L);
        if (potcomp != pot){
        potcomp = pot;
        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/POT"), toCharArray(String(pot_reg3and4)));
        Serial.println("Published");
        }
      
     }
    }
  }




void multi_sensor_ec_detect(){

//  while (true){
//    digitalWrite(DE, HIGH);
//    digitalWrite(RE, HIGH);
//    delay(100);
//    if (mod.write(ec, sizeof(ec)) == 8)
//    {
//      mod.flush();
//      digitalWrite(DE, LOW);
//      digitalWrite(RE, LOW);
//      mod.readBytes(ec_values, 7);
//     // Serial.print("Multi EC Values : ");
//      for (byte i = 0; i < 7; i++)
//      {
//      //  Serial.print(ec_values[i], HEX);
//        Serial.print(" ");
//      }
//      Serial.println();
//    }
//    if (ec_values[0] == 0x02 && ec_values[1] == 0x03 && ec_values[2] == 0x02){
//      float ec_reg3and4 = ((ec_values[3] << 8) + ec_values[4]);
//      pubEC = ec_reg3and4;
//      if (ec_reg3and4 > -1 && ec_reg3and4 < 10000){
//        Serial.print("EC : "+(String)ec_reg3and4+" us/cm");
//        Serial.println();
//      delay(100);
//        int ec;
//        ec = (int) (ec_reg3and4 * 1L);
//        if (eccomp != ec){
//        eccomp = ec;
//        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/EC"), toCharArray(String(ec_reg3and4)));
//        Serial.println("Published");
//        }
//        break;
//      }
//    }else{
//      Serial.println("EC cant measure");
//    break;
//    }
//  }
//}


uint32_t startTime;
  uint8_t i;

  // flush the receive buffer
  while (mod.available()) mod.read();

  // switch to transmit mode
  digitalWrite(DE, HIGH);
  digitalWrite(RE, HIGH);
  delay(100);

  // write out the modbus command bytes and wait for the transmission to finish
  mod.write(ec, sizeof(ec));
  mod.flush();

  // switch to receive mode 
  digitalWrite(DE, LOW);
  digitalWrite(RE, LOW);

  i = 0;
  startTime = millis();
  // wait for up to 500ms for a response
  while ( millis() - startTime <= 1000UL ) {
   // delay(50);
    if (mod.available() && i<sizeof(ec_values) ) {
      ec_values[i++] = mod.read();
       float ec_reg3and4 = ((ec_values[3] << 8) + ec_values[4]);
      ec_reg3and4 = ec_reg3and4;
      pubEC = ec_reg3and4;
      Serial.println("EC : "+(String)ec_reg3and4+"");
       int ec;
        ec = (int) (ec_reg3and4 * 1L);
        if (eccomp != ec){
        eccomp = ec;
        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/EC"), toCharArray(String(ec_reg3and4)));
        Serial.println("Published");
        }
      
     }
    }
  }



void multi_sensor_moist_detect(){

//  while (true){
//    digitalWrite(DE, HIGH);
//    digitalWrite(RE, HIGH);
//    delay(100);
//    if (mod.write(moist, sizeof(moist)) == 8)
//    {
//      mod.flush();
//      digitalWrite(DE, LOW);
//      digitalWrite(RE, LOW);
//      mod.readBytes(moist_values, 7);
//      //Serial.print("Multi MOIST Values : ");
//      for (byte i = 0; i < 7; i++)
//      {
//       // Serial.print(moist_values[i], HEX);
//        Serial.print(" ");
//      }
//      Serial.println();
//    }
//    if (moist_values[0] == 0x02 && moist_values[1] == 0x03 && moist_values[2] == 0x02){
//      float moist_reg3and4 = ((moist_values[3] << 8) + moist_values[4]);
//      moist_reg3and4 = moist_reg3and4/10;
//      pubMOIST = moist_reg3and4;
//      if (moist_reg3and4 > -1 && moist_reg3and4 < 105){
//        Serial.print("MOIST : "+(String)moist_reg3and4+"%");
//        Serial.println();
//       delay(100);
//        int moist;
//        moist = (int) (moist_reg3and4 * 10L);
//        if (moistcomp != moist){
//        moistcomp = moist;
//        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/MOIST"), toCharArray(String(moist_reg3and4)));
//        Serial.println("Published");
//        }
//        break;
//      }
//    }else{
//      Serial.print("MOIST cant measure");
//    break;
//    }
//  }
//}


uint32_t startTime;
  uint8_t i;

  // flush the receive buffer
  while (mod.available()) mod.read();

  // switch to transmit mode
  digitalWrite(DE, HIGH);
  digitalWrite(RE, HIGH);
  delay(100);

  // write out the modbus command bytes and wait for the transmission to finish
  mod.write(moist, sizeof(moist));
  mod.flush();

  // switch to receive mode 
  digitalWrite(DE, LOW);
  digitalWrite(RE, LOW);

  i = 0;
  startTime = millis();
  // wait for up to 500ms for a response
  while ( millis() - startTime <= 1000UL ) {
   // delay(50);
    if (mod.available() && i<sizeof(moist_values) ) {
      moist_values[i++] = mod.read();
       float moist_reg3and4 = ((moist_values[3] << 8) + moist_values[4]);
      moist_reg3and4 = moist_reg3and4/10;
      pubMOIST = moist_reg3and4;
      Serial.println("MOIST : "+(String)moist_reg3and4+"");
       int moist;
        moist = (int) (moist_reg3and4 * 10L);
        if (moistcomp != moist){
        moistcomp = moist;
        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/MOIST"), toCharArray(String(moist_reg3and4)));
        Serial.println("Published");
        }
      
     }
    }
  }


void multi_sensor_temp_detect(){

//  while (true){
//    digitalWrite(DE, HIGH);
//    digitalWrite(RE, HIGH);
//    delay(100);
//    if (mod.write(temp, sizeof(temp)) == 8)
//    {
//      mod.flush();
//      digitalWrite(DE, LOW);
//      digitalWrite(RE, LOW);
//      mod.readBytes(temp_values, 7);
//       //Serial.print("Multi TEMP Values : ");
//      for (byte i = 0; i < 7; i++)
//      {
//      // Serial.print(temp_values[i], HEX);
//        Serial.print(" ");
//      }
//      Serial.println();
//    }
//    if (temp_values[0] == 0x02 && temp_values[1] == 0x03 && temp_values[2] == 0x02){
//      float temp_reg3and4 = ((temp_values[3] << 8) + temp_values[4]);
//      temp_reg3and4 = temp_reg3and4/10;
//      pubTEMP = temp_reg3and4;
//      if (temp_reg3and4 > -1 && temp_reg3and4 < 100){
//        Serial.print("TEMP : "+(String)temp_reg3and4+"°C");
//        Serial.println();
//       delay(100);
//        int temp;
//        temp = (int) (temp_reg3and4 * 10L);
//        if (tempcomp != temp){
//        tempcomp = temp;
//        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/Temperature"), toCharArray(String(temp_reg3and4)));
//        Serial.println("Published");
//        }
//        break;
//      }
//    }else{
//      Serial.print("TEMP cant measure");
//    break;
//    }
//  }
//}


uint32_t startTime;
  uint8_t i;

  // flush the receive buffer
  while (mod.available()) mod.read();

  // switch to transmit mode
  digitalWrite(DE, HIGH);
  digitalWrite(RE, HIGH);
  delay(100);

  // write out the modbus command bytes and wait for the transmission to finish
  mod.write(temp, sizeof(temp));
  mod.flush();

  // switch to receive mode 
  digitalWrite(DE, LOW);
  digitalWrite(RE, LOW);

  i = 0;
  startTime = millis();
  // wait for up to 500ms for a response
  while ( millis() - startTime <= 1000UL ) {
   // delay(50);
    if (mod.available() && i<sizeof(temp_values) ) {
      temp_values[i++] = mod.read();
       float temp_reg3and4 = ((temp_values[3] << 8) + temp_values[4]);
      temp_reg3and4 = temp_reg3and4/10;
      pubTEMP = temp_reg3and4;
      Serial.println("TEMP : "+(String)temp_reg3and4+"");
       int temp;
        temp = (int) (temp_reg3and4 * 10L);
        if (tempcomp != temp){
        tempcomp = temp;
        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/Temperature"), toCharArray(String(temp_reg3and4)));
        Serial.println("Published");
        }
      
     }
    }
  }



void multi_sensor_ni_detect(){

//  while (true){
//    digitalWrite(DE, HIGH);
//    digitalWrite(RE, HIGH);
//    delay(100);
//    if (mod.write(ni, sizeof(ni)) == 8)
//    {
//      mod.flush();
//      digitalWrite(DE, LOW);
//      digitalWrite(RE, LOW);
//      mod.readBytes(ni_values, 7);
//       //Serial.print("Multi NI Values : ");
//      for (byte i = 0; i < 7; i++)
//      {
//       //Serial.print(ni_values[i], HEX);
//        Serial.print(" ");
//      }
//      Serial.println();
//    }
//    if (ni_values[0] == 0x02 && ni_values[1] == 0x03 && ni_values[2] == 0x02){
//       float ni_reg3and4 =((ni_values[3] << 8) + ni_values[4]);
//       pubNI = ni_reg3and4;
//        Serial.print("NI : "+(String)ni_reg3and4+" mg/kg");
//        Serial.println();
//       delay(100);
//       int ni;
//        ni = (int) (ni_reg3and4 * 1L);
//        if (nicomp != ni){
//        nicomp = ni;
//        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/NI"), toCharArray(String(ni_reg3and4)));
//        Serial.println("Published");
//        }
//        break;
//      
//    }else{
//      Serial.print("NI cant measure");
//    break;
//    }
//  }
//}


uint32_t startTime;
  uint8_t i;

  // flush the receive buffer
  while (mod.available()) mod.read();

  // switch to transmit mode
  digitalWrite(DE, HIGH);
  digitalWrite(RE, HIGH);
  delay(100);

  // write out the modbus command bytes and wait for the transmission to finish
  mod.write(ni, sizeof(ni));
  mod.flush();

  // switch to receive mode 
  digitalWrite(DE, LOW);
  digitalWrite(RE, LOW);

  i = 0;
  startTime = millis();
  // wait for up to 500ms for a response
  while ( millis() - startTime <= 1000UL ) {
   // delay(50);
    if (mod.available() && i<sizeof(ni_values) ) {
      ni_values[i++] = mod.read();
       float ni_reg3and4 = ((ni_values[3] << 8) + ni_values[4]);
      ni_reg3and4 = ni_reg3and4;
      pubNI = ni_reg3and4;
      Serial.println("NI : "+(String)ni_reg3and4+"");
       int ni;
        ni = (int) (ni_reg3and4 * 1L);
        if (nicomp != ni){
        nicomp = ni;
        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/NI"), toCharArray(String(ni_reg3and4)));
        Serial.println("Published");
        }
      
     }
    }
  }




void multi_sensor_orp_detect(){

  while (true){
    digitalWrite(DE, HIGH);
    digitalWrite(RE, HIGH);
    delay(100);
    if (mod.write(orp, sizeof(orp)) == 8)
    {
      mod.flush();
      digitalWrite(DE, LOW);
      digitalWrite(RE, LOW);
      mod.readBytes(orp_values, 7);
     // Serial.print("Multi PH Values : ");
      for (byte i = 0; i < 7; i++)
      {
      // Serial.print(ph_values[i], HEX);
        Serial.print(" ");
      }
      Serial.println();
    }

    if (orp_values[0] == 0x01 && orp_values[1] == 0x03 && orp_values[2] == 0x02){
    float orp_reg3and4 = word(orp_values[3],orp_values[4]);
     //Serial.println(ph_reg3and4);
      orp_reg3and4 = orp_reg3and4/10;
      pubORP = orp_reg3and4 ; 
    //  if (orp_reg3and4 > -1 && orp_reg3and4 < 15){
        Serial.print("ORP : "+(String)orp_reg3and4+"");
        Serial.println();
       delay(100);
        int orp;
        orp = (int) (orp_reg3and4 * 10L);
        if (orpcomp != orp){
        orpcomp = orp;
        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/ORP"), toCharArray(String(orp_reg3and4)));
        Serial.println("Published");
        }
        break;
      
    }else{
      Serial.print("ORP cant measure");
    break;
    }
//  
  }
}


void multi_sensor_ph2_detect(){

  while (true){
    digitalWrite(DE, HIGH);
    digitalWrite(RE, HIGH);
    delay(100);
    if (mod.write(ph2, sizeof(ph2)) == 8)
    {
      mod.flush();
      digitalWrite(DE, LOW);
      digitalWrite(RE, LOW);
      mod.readBytes(ph2_values, 7);
     // Serial.print("Multi PH Values : ");
      for (byte i = 0; i < 7; i++)
      {
      // Serial.print(ph_values[i], HEX);
        Serial.print(" ");
      }
      Serial.println();
    }

    if (ph2_values[0] == 0x01 && ph2_values[1] == 0x03 && ph2_values[2] == 0x02){
    float ph2_reg3and4 = word(ph2_values[3],ph2_values[4]);
     //Serial.println(ph_reg3and4);
      ph2_reg3and4 = ph2_reg3and4/100;
      pubPH2 = ph2_reg3and4;
      if (ph2_reg3and4 > -1 && ph2_reg3and4 < 15){
        Serial.print("PH : "+(String)ph2_reg3and4+"");
        Serial.println();
       delay(100);
        int ph2;
        ph2 = (int) (ph2_reg3and4 * 10L);
        if (ph2comp != ph2){
        ph2comp = ph2;
        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/PH2"), toCharArray(String(ph2_reg3and4)));
        Serial.println("Published");
        }
        break;
      }
    }else{
      Serial.print("PH cant measure");
    break;
    }
  
  }
}

void multi_sensor_temp2_detect(){

  while (true){
    digitalWrite(DE, HIGH);
    digitalWrite(RE, HIGH);
    delay(100);
    if (mod.write(temp2, sizeof(temp2)) == 8)
    {
      mod.flush();
      digitalWrite(DE, LOW);
      digitalWrite(RE, LOW);
      mod.readBytes(temp2_values, 7);
       //Serial.print("Multi TEMP Values : ");
      for (byte i = 0; i < 7; i++)
      {
      // Serial.print(temp_values[i], HEX);
        Serial.print(" ");
      }
      Serial.println();
    }
    if (temp2_values[0] == 0x01 && temp2_values[1] == 0x03 && temp2_values[2] == 0x02){
      int temp2_reg3and4 = word(temp2_values[3],temp2_values[4]);
      temp2_reg3and4 = temp2_reg3and4/10;
      pubTEMP2 = temp2_reg3and4;
     // if (temp_reg3and4 > -1 && temp_reg3and4 < 100){
        Serial.print("TEMP : "+(String)temp2_reg3and4+"°C");
        Serial.println();
       delay(100);
       int temp2;
        temp2 = (int) (temp2_reg3and4 * 10L);
        if (temp2comp != temp2){
        temp2comp = temp2;
        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/Temperature2"), toCharArray(String(temp2_reg3and4)));
        Serial.println("Published");
        }
        break;

    }else{
      Serial.print("TEMP cant measure");
    break;
    }
  }
}

void multi_sensor_res_detect(){

  while (true){
    digitalWrite(DE, HIGH);
    digitalWrite(RE, HIGH);
    delay(100);
    if (mod.write(res, sizeof(res)) == 8)
    {
      mod.flush();
      digitalWrite(DE, LOW);
      digitalWrite(RE, LOW);
      mod.readBytes(res_values, 7);
     // Serial.print("Multi EC Values : ");
      for (byte i = 0; i < 7; i++)
      {
      //  Serial.print(ec_values[i], HEX);
        Serial.print(" ");
      }
      Serial.println();
    }
    if (res_values[0] == 0x01 && res_values[1] == 0x03 && res_values[2] == 0x02){
      float res_reg3and4 = word(res_values[3],res_values[4]);
      pubRES = res_reg3and4;
     // if (ec_reg3and4 > -1 && ec_reg3and4 < 10000){
        Serial.print("RES : "+(String)res_reg3and4+" us/cm");
        Serial.println();
        delay(100);
        int res;
        res = (int) (res_reg3and4 * 10L);
        if (rescomp != res){
        rescomp = res;
        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/Resistance"), toCharArray(String(res_reg3and4)));
        Serial.println("Published");
        }
        break;
     // }
    }else{
      Serial.println("RES cant measure");
    break;
    }
  }
}


void multi_sensor_ph3_detect(){

 uint32_t startTime;
  uint8_t i;

  // flush the receive buffer
  while (mod.available()) mod.read();

  // switch to transmit mode
  digitalWrite(DE, HIGH);
  digitalWrite(RE, HIGH);
  delay(100);

  // write out the modbus command bytes and wait for the transmission to finish
  mod.write(ph3, sizeof(ph3));
  mod.flush();

  // switch to receive mode 
  digitalWrite(DE, LOW);
  digitalWrite(RE, LOW);

  i = 0;
  startTime = millis();
  // wait for up to 500ms for a response
  while ( millis() - startTime <= 50UL ) {
    if (mod.available() && i<sizeof(ph3_values) ) {
      ph3_values[i++] = mod.read();
      float ph3_reg3and4 = ((ph3_values[3] << 8) + ph3_values[4]);
      ph3_reg3and4 = ph3_reg3and4/100;
      pubPH2 = ph3_reg3and4;
      if(ph3_reg3and4>=0){
        PHPublish = 1;
      PH3trigger = 1;
      Serial.println("PH2 : "+(String)ph3_reg3and4+"");
       int ph3;
        ph3 = (int) (ph3_reg3and4 * 10L);
        if (phcomp3 != ph3){
        phcomp3 = ph3;
        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/3/PH"), toCharArray(String(ph3_reg3and4)));
        Serial.println("Published");
        }
      }
    }
  
  }
  if(PH3trigger != 1){
    PHPublish = 0;
    Serial.println("check PH sensor");
    client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/3/PH/Will"), toCharArray("Check Sensor"));
  }
  PH3trigger = 0;
}

  

void multi_sensor_ec2_detect(){

//  while (true){
//    digitalWrite(DE, HIGH);
//    digitalWrite(RE, HIGH);
//    delay(100);
//    if (mod.write(ec2, sizeof(ec2)) == 8)
//    {
//      mod.flush();
//      digitalWrite(DE, LOW);
//      digitalWrite(RE, LOW);
//      mod.readBytes(ec2_values, 7);
//     // Serial.print("Multi EC Values : ");
//      for (byte i = 0; i < 7; i++)
//      {
//      //  Serial.print(ec_values[i], HEX);
//        Serial.print(" ");
//      }
//      Serial.println();
//    }
//    if (ec2_values[0] == 0x04 && ec2_values[1] == 0x03 && ec2_values[2] == 0x02){
//      float ec2_reg3and4 = ((ec2_values[3] << 8) + ec2_values[4]);
//      pubEC2 = ec2_reg3and4;
//      if (ec2_reg3and4 > -1 && ec2_reg3and4 < 10000){
//        Serial.print("EC : "+(String)ec2_reg3and4+" us/cm");
//        Serial.println();
//      delay(100);
//        int ec2;
//        ec2 = (int) (ec2_reg3and4 * 1L);
//        if (eccomp2 != ec2){
//        eccomp2 = ec2;
//        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/3/EC"), toCharArray(String(ec2_reg3and4)));
//        Serial.println("Published");
//        }
//        break;
//      }
//    }else{
//      Serial.println("EC cant measure");
//    break;
//    }
//  }
//}
//


uint32_t startTime;
  uint8_t i;

  // flush the receive buffer
  while (mod.available()) mod.read();

  // switch to transmit mode
  digitalWrite(DE, HIGH);
  digitalWrite(RE, HIGH);
  delay(100);

  // write out the modbus command bytes and wait for the transmission to finish
  mod.write(ec2, sizeof(ec2));
  mod.flush();

  // switch to receive mode 
  digitalWrite(DE, LOW);
  digitalWrite(RE, LOW);

  i = 0;
  startTime = millis();
  // wait for up to 500ms for a response
  while ( millis() - startTime <= 1000UL ) {
     delay(50);
    if (mod.available() && i<sizeof(ec2_values) ) {
      ec2_values[i++] = mod.read();
      float ec2_reg3and4 = ((ec2_values[3] << 8) + ec2_values[4]);
      ec2_reg3and4 = ec2_reg3and4;
      pubEC2 = ec2_reg3and4;
      if(ec2_reg3and4 >= 0){
        ECPublish = 1;
      EC2trigger = 1;
      Serial.println("EC2 : "+(String)ec2_reg3and4+"");
        int ec2;
        ec2 = (int) (ec2_reg3and4 * 1L);
        if (eccomp2 != ec2){
        eccomp2 = ec2;
        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/3/EC"), toCharArray(String(ec2_reg3and4)));
        Serial.println("Published");
        }
      }
    }
  
  }
  if(EC2trigger != 1){
    ECPublish = 0;
    Serial.println("check EC sensor");
    client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/3/EC/Will"), toCharArray("Check Sensor"));
  }
  EC2trigger = 0;
}


void multi_sensor_humid_detect(){

  uint32_t startTime;
  uint8_t i;

  // flush the receive buffer
  while (mod.available()) mod.read();

  // switch to transmit mode
  digitalWrite(DE, HIGH);
  digitalWrite(RE, HIGH);
  delay(100);

  // write out the modbus command bytes and wait for the transmission to finish
  mod.write(humid, sizeof(humid));
  mod.flush();

  // switch to receive mode 
  digitalWrite(DE, LOW);
  digitalWrite(RE, LOW);

  i = 0;
  startTime = millis();
  // wait for up to 500ms for a response
  while ( millis() - startTime <= 2000UL ) {
     //delay(50);
    if (mod.available() && i<sizeof(humid_values) ) {
      humid_values[i++] = mod.read();
       float humid_reg3and4 = ((humid_values[3] << 8) + humid_values[4]);
      humid_reg3and4 = humid_reg3and4/10;
      pubHUMID = humid_reg3and4;
      Serial.println("HUMID : "+(String)humid_reg3and4+"");
       int humid;
        humid = (int) (humid_reg3and4 * 10L);
        if (humidcomp != humid){
        humidcomp = humid;
        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/4/Humidity"), toCharArray(String(humid_reg3and4)));
        Serial.println("Published");
        }
      
     }
    }
  
}


void multi_sensor_temp3_detect(){

    uint32_t startTime;
  uint8_t i;

  // flush the receive buffer
  while (mod.available()) mod.read();

  // switch to transmit mode
  digitalWrite(DE, HIGH);
  digitalWrite(RE, HIGH);
  delay(100);

  // write out the modbus command bytes and wait for the transmission to finish
  mod.write(temp3, sizeof(temp3));
  mod.flush();

  // switch to receive mode 
  digitalWrite(DE, LOW);
  digitalWrite(RE, LOW);

  i = 0;
  startTime = millis();
  // wait for up to 500ms for a response
  while ( millis() - startTime <= 2000UL ) {
     //delay(50);
    if (mod.available() && i<sizeof(temp3_values) ) {
      temp3_values[i++] = mod.read();
       float temp3_reg3and4 = ((temp3_values[3] << 8) + temp3_values[4]);
      temp3_reg3and4 = temp3_reg3and4/10;
      pubTEMP3 = temp3_reg3and4;
      Serial.println("TEMP : "+(String)temp3_reg3and4+"");
       int temp3;
        temp3 = (int) (temp3_reg3and4 * 10L);
        if (temp3comp != temp3){
        temp3comp = temp3;
        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/4/Temperature"), toCharArray(String(temp3_reg3and4)));
        Serial.println("Published");
        }
      
     }
    }
  
}

void multi_sensor_co2_detect(){

      uint32_t startTime;
  uint8_t i;

  // flush the receive buffer
  while (mod.available()) mod.read();

  // switch to transmit mode
  digitalWrite(DE, HIGH);
  digitalWrite(RE, HIGH);
  delay(100);

  // write out the modbus command bytes and wait for the transmission to finish
  mod.write(co2, sizeof(co2));
  mod.flush();

  // switch to receive mode 
  digitalWrite(DE, LOW);
  digitalWrite(RE, LOW);

  i = 0;
  startTime = millis();
  // wait for up to 500ms for a response
  while ( millis() - startTime <= 2000UL ) {
     //delay(50);
    if (mod.available() && i<sizeof(co2_values) ) {
      co2_values[i++] = mod.read();
       float co2_reg3and4 = ((co2_values[3] << 8) + co2_values[4]);
      co2_reg3and4 = co2_reg3and4/10;
      pubCO2 = co2_reg3and4;
       if(co2_reg3and4>=0){
        ALLPublish = 1;
      CO2trigger = 1;
      Serial.println("CO2 : "+(String)co2_reg3and4+"");
       int co2;
        co2 = (int) (co2_reg3and4 * 10L);
        if (co2comp != co2){
        co2comp = co2;
        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/4/CO2"), toCharArray(String(co2_reg3and4)));
        Serial.println("Published");
        }
       }
      
     }
     
    }
     if(CO2trigger != 1){
      ALLPublish = 0;
    Serial.println("check All in one sensor");
    client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/4/All/Will"), toCharArray("Check Sensor"));
  }
  CO2trigger = 0;
  
}

void multi_sensor_lux_detect(){

  uint32_t startTime;
  uint8_t i;

  // flush the receive buffer
  while (mod.available()) mod.read();

  // switch to transmit mode
  digitalWrite(DE, HIGH);
  digitalWrite(RE, HIGH);
  delay(100);

  // write out the modbus command bytes and wait for the transmission to finish
  mod.write(lux, sizeof(lux));
  mod.flush();

  // switch to receive mode 
  digitalWrite(DE, LOW);
  digitalWrite(RE, LOW);

  i = 0;
  startTime = millis();
  // wait for up to 500ms for a response
  while ( millis() - startTime <= 2000UL ) {
    //delay(50);
    if (mod.available() && i<sizeof(lux_values) ) {
      lux_values[i++] = mod.read();
       float lux_reg3and4 = ((lux_values[5] << 8) + lux_values[6]);
      lux_reg3and4 = lux_reg3and4;
      pubLUX = lux_reg3and4;
      Serial.println("LUX : "+(String)lux_reg3and4+"");

       int lux;
        lux = (int) (lux_reg3and4 * 1L);
        if (luxcomp != lux){
        luxcomp = lux;
        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/4/LUX"), toCharArray(String(lux_reg3and4)));
        Serial.println("Published");
        }
      
     }
    }
  
}



boolean reconnect() {

   while (WiFi.status() != WL_CONNECTED){
    ESP.wdtFeed();            
    ESP.wdtDisable();                     
    delay(500);
    Serial.print(".");
    delay(500);
    cnt3--;
        if(cnt3==0){
    ESP.wdtDisable();
    #ifdef SOFT_WATCHDOG
    ESP.wdtEnable(0);
    #endif  
    while(1);  
  }
  }
//   if(millis() - blinker > 3000){
//    
//        digitalWrite(redPin, HIGH);
//        delay(20);
//        digitalWrite(redPin, LOW); 
//        delay(300);
//        digitalWrite(redPin, HIGH);
//        delay(20);
//        digitalWrite(redPin, LOW); 
//        delay(300);
//        blinker = millis();   
//  }
  if (client.connect(clientID, mqttuser, mqttpass, toCharArray(prefix + "/Will"), 1, true, toCharArray("Disconnected"), true)) {
    client.setCallback(onMessageArrived);
  }
  return client.connected();
}



void uptime(){

  //** Making Note of an expected rollover *****//   
if(millis()>=3000000000){ 
HighMillis=1;

}
//** Making note of actual rollover **//
if(millis()<=100000&&HighMillis==1){
Rollover++;
HighMillis=0;
}

long secsUp = millis()/1000;

Second = secsUp%60;

Minute = (secsUp/60)%60;

Hour = (secsUp/(60*60))%24;

Day = (Rollover*50)+(secsUp/(60*60*24));  //First portion takes care of a rollover [around 50 days]
                       
}
void print_Uptime(){

  
  Serial.print(F("Uptime: ")); // The "F" Portion saves your SRam Space
  Serial.print(Day);
  Serial.print(F("  Days  "));
  Serial.print(Hour);
  Serial.print(F("  Hours  "));
  Serial.print(Minute);
  Serial.print(F("  Minutes  "));
  Serial.print(Second);
  Serial.println(F("  Seconds"));
}

void checkUpdate(){
if (millis() - timer3 > 3600000){
     repeatedCall(); 
     timer3 = millis();

} 
}


void FirmwareUpdateHost2() {
 WiFiClient  client;
  // client.setInsecure();
  if (!client.connect(host2, httpsPort2)) {
    Serial.println("Connection failed");
    return;
  }
  client.print(String("GET ") + "/"+SerialNumber+"/bin_version.txt" + " HTTP/1.1\r\n" +
               "Host: " + host2 + "\r\n" +
               "User-Agent: BuildFailureDetectorESP8266\r\n" +
               "Connection: close\r\n\r\n");
  while (client.connected()) {
    String line = client.readStringUntil('\n');
    if (line == "\r") {
      //Serial.println("Headers received");
      break;
    }
  }
  payload2 = client.readStringUntil('\n');
  Serial.println(payload2);
 // Serial.println(lastStringLength);
  if (payload2.length() != lastStringLength){
//    cnt5++;
//    Serial.println(cnt5);
//    if (cnt5 == 150){
//      ESP.restart();
//    }
    reconnect();
  }else {
  lastStringLength = payload2.length();

  payload2.trim();
  if(payload2.equals(FirmwareVer) )
  {   
     Serial.println("Device already on latest firmware version "+FirmwareVer); 
  }
  else
  {
    Serial.println("New firmware detected");
    ESPhttpUpdate.setLedPin(LED_BUILTIN, LOW); 
    t_httpUpdate_return ret = ESPhttpUpdate.update(client, URL_fw_Bin2);
        
    switch (ret) {
      case HTTP_UPDATE_FAILED:
        Serial.printf("HTTP_UPDATE_FAILD Error (%d): %s\n", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str());
        break;

      case HTTP_UPDATE_NO_UPDATES:
        Serial.println("HTTP_UPDATE_NO_UPDATES");
        break;

      case HTTP_UPDATE_OK:
        Serial.println("HTTP_UPDATE_OK");
        break;
    } 
  }
 } 
} 
  



//void FirmwareUpdate()
//{  
//
//  WiFiClientSecure client;
//   client.setInsecure();
//  if (!client.connect(host, httpsPort)) {
//    Serial.println("Connection failed");
//    return;
//  }
//  client.print(String("GET ") + URL_fw_Version + " HTTP/1.1\r\n" +
//               "Host: " + host + "\r\n" +
//               "User-Agent: BuildFailureDetectorESP8266\r\n" +
//               "Connection: close\r\n\r\n");
//  while (client.connected()) {
//    String line = client.readStringUntil('\n');
//    if (line == "\r") {
//      //Serial.println("Headers received");
//      break;
//    }
//  }
//  String payload = client.readStringUntil('\n');
//    Serial.println(payload);
//
//  if (payload.length() != lastStringLength){
//    reconnect();
//  }else {
//  lastStringLength = payload.length();
//
//  payload.trim();
//  if(payload.equals(FirmwareVer) )
//  {   
//     Serial.println("Device already on latest firmware version "+FirmwareVer); 
//  }
//  else
//  {
//    Serial.println("New firmware detected");
//    ESPhttpUpdate.setLedPin(LED_BUILTIN, LOW); 
//    t_httpUpdate_return ret = ESPhttpUpdate.update(client, URL_fw_Bin);
//        
//    switch (ret) {
//      case HTTP_UPDATE_FAILED:
//        Serial.printf("HTTP_UPDATE_FAILD Error (%d): %s\n", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str());
//        break;
//
//      case HTTP_UPDATE_NO_UPDATES:
//        Serial.println("HTTP_UPDATE_NO_UPDATES");
//        break;
//
//      case HTTP_UPDATE_OK:
//        Serial.println("HTTP_UPDATE_OK");
//        break;
//    } 
//  }
// }
//}  
// will store last time LED was updated
 void repeatedCall(){

      FirmwareUpdateHost2();  
   // }
 }


 bool testWifi(void)
{

  int c = 0;
  Serial.println("Waiting for Wifi to connect");
  while ( c < 30 ) {
    if (WiFi.status() == WL_CONNECTED)
    {
      return true;
    }
    delay(500);
    Serial.print("*");
    c++;
  }
  Serial.println("");
  Serial.println("Connect timed out, opening AP");
  return false;
}

void launchWeb()
{

  Serial.println("");
  if (WiFi.status() == WL_CONNECTED)
    Serial.println("WiFi connected");
  Serial.print("Local IP: ");
  Serial.println(WiFi.localIP());
  Serial.print("SoftAP IP: ");
  Serial.println(WiFi.softAPIP());
  createWebServer();
  // Start the server
  server.begin();
  Serial.println("Server started");
}
 
void setupAP(void)
{

   WiFi.mode(WIFI_AP_STA);
   // Begin WiFi
  WiFi.begin(esid.c_str(), epass.c_str());
  delay(100);
  int n = WiFi.scanNetworks();
  Serial.println("scan done");
  if (n == 0)
    Serial.println("no networks found");
  else
  {
    Serial.print(n);
    Serial.println(" networks found");
    for (int i = 0; i < n; ++i)
    {
      // Print SSID and RSSI for each network found
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(WiFi.SSID(i));
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));
      Serial.print(")");
      Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " " : "*");
      delay(10);
    }
  }
  Serial.println("");
  st = "<ol>";
  for (int i = 0; i < n; ++i)
  {
    // Print SSID and RSSI for each network found
    st += "<li>";
    st += WiFi.SSID(i);
    st += " (";
    st += WiFi.RSSI(i);
 
    st += ")";
    st += (WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " " : "*";
    st += "</li>";
  }
  st += "</ol>";
  delay(100);
  WiFi.softAP(AP_SSID,AP_PASS);
  Serial.println("softap");
  launchWeb();
  Serial.println("over");
}
 
void createWebServer()
{

 {
    server.on("/", []() {
      String content;
      IPAddress ip = WiFi.softAPIP();
      String ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]);
      content = "<!DOCTYPE HTML>\r\n<html>Hello from ESP8266 at ";
      //content += "<form action=\"/scan\" method=\"POST\"><input type=\"submit\" value=\"scan\"></form>";
      content += ipStr;
      content += "<p>";
      content += st;
      content += "</p><form method='get' action='setting'><label>SSID: </label><input name='ssid' length=32><input name='pass' length=64><input type='submit'></form>";
      content += "</html>";
      server.send(200, "text/html", content);
    });
//    server.on("/scan", []() {
//      String content;
//      //setupAP();
//      IPAddress ip = WiFi.softAPIP();
//      String ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]);
// 
//      content = "<!DOCTYPE HTML>\r\n<html>go back";
//      server.send(200, "text/html", content);
//    });
 
    server.on("/setting", []() {
      String content;
      String qsid = server.arg("ssid");
      String qpass = server.arg("pass");
      if (qsid.length() > 0 && qpass.length() > 0) {
        Serial.println("clearing eeprom");
        for (int i = 0; i < 96; ++i) {
          EEPROM.write(i, 0);
        }
        Serial.println(qsid);
        Serial.println("");
        Serial.println(qpass);
        Serial.println("");
 
        Serial.println("writing eeprom ssid:");
        for (int i = 0; i < qsid.length(); ++i)
        {
          EEPROM.write(i, qsid[i]);
          Serial.print("Wrote: ");
          Serial.println(qsid[i]);
        }
        Serial.println("writing eeprom pass:");
        for (int i = 0; i < qpass.length(); ++i)
        {
          EEPROM.write(32 + i, qpass[i]);
          Serial.print("Wrote: ");
          Serial.println(qpass[i]);
        }
        EEPROM.commit();
 
        content = "{\"Success\":\"saved to eeprom... reset to boot into new wifi\"}";
        statusCode = 200;
        ESP.reset();    // when you call this nothing will be sent back to the browser afterwards
      } else {
        content = "{\"Error\":\"404 not found\"}";
        statusCode = 404;
        Serial.println("Sending 404");
      }
      server.sendHeader("Access-Control-Allow-Origin", "*");
      server.send(statusCode, "application/json", content);
 
    });
  } 
}

void mqttconnect(){

    Serial.print("///////////////");
  client.setServer(mqttServerName, mqttport);
  client.setCallback(onMessageArrived);

   while (!client.connected()){
    

    delay(1000);
    Serial.println("Connecting To Server ...");
    if (client.connect(clientID, mqttuser, mqttpass, toCharArray(prefix + "/Will"), 1, true, toCharArray("Bye"), true))
    {
      Serial.println("Connected To Server");
      
    }  
   
    else 
    {

//       if(millis() - blinker > 3000){
//    
//        digitalWrite(redPin, HIGH);
//        delay(20);
//        digitalWrite(redPin, LOW); 
//        delay(300);
//        digitalWrite(redPin, HIGH);
//        delay(20);
//        digitalWrite(redPin, LOW); 
//        delay(300);
//        blinker = millis();   
//  }
      cnt4--;
      Serial.print("failed with state ");
      Serial.print(client.state());
      delay(2000);
       if(cnt4==0){
      ESP.wdtDisable();
      #ifdef SOFT_WATCHDOG
      ESP.wdtEnable(0);
      #endif  
      while(1);
  }
  delay(1000);
       
   }
}
}


void checkWifi (){

   while (WiFi.status() != WL_CONNECTED){

//    digitalWrite(redPin, HIGH);            // Fast Blink Red LED 
//    delay(100);
//    digitalWrite(redPin, LOW);
//                       
    delay(500);
    Serial.print(".");
    delay(500);
    cnt--;
    if(cnt==0){
    ESP.wdtDisable();
    #ifdef SOFT_WATCHDOG
    ESP.wdtEnable(0);
    #endif  
    while(1);
  }
}
}

char* toCharArray(String str) {

  return &str[0];
}

void onMessageArrived(char* t, byte* m, unsigned int length) {

  
  String message = "";
  String topic = "";
  topic = String(t);
  message = String((char*)m);
  message = message.substring(0, length);

  if (message == "HELLO") {
    Serial.println("Hello client");
    client.publish(toCharArray(prefix + "/server"), toCharArray("HELLO"));
    Serial.println("Hello server");
  }
}

void publishData(){
  if (NPKPublish == 1){
   client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/PH"), toCharArray(String(pubPH)));
   delay(100);
   client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/PHOS"), toCharArray(String(pubPHOS)));
   delay(100);
   client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/POT"), toCharArray(String(pubPOT)));
   delay(100);
   client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/EC"), toCharArray(String(pubEC)));
   delay(100);
   client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/MOIST"), toCharArray(String(pubMOIST)));
   delay(100);
   client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/Temperature"), toCharArray(String(pubTEMP)));
   delay(100);
   client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/NI"), toCharArray(String(pubNI)));
   delay(100);
  }
  if (ECPublish == 1){
   client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/3/EC"), toCharArray(String(pubEC2)));
   delay(100);
  }
  if (PHPublish == 1){
   client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/3/PH"), toCharArray(String(pubPH2)));
   delay(100);
  }
  if (ALLPublish == 1){
    client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/4/LUX"), toCharArray(String(pubLUX)));
    delay(100);
    client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/4/CO2"), toCharArray(String(pubCO2)));
    delay(100);
    client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/4/Temperature"), toCharArray(String(pubTEMP3)));
    delay(100);
    client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/4/Humidity"), toCharArray(String(pubHUMID)));
    delay(100);
  }
//   client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/ORP"), toCharArray(String(pubORP)));
//   delay(100);
//   client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/PH2"), toCharArray(String(pubPH2)));
//   delay(100);
//   client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/Temperature2"), toCharArray(String(pubTEMP2)));
//   delay(100);
//   client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/Resistance"), toCharArray(String(pubRES)));
}


WHAT ERROR???????

ESP32? Why use software serial?

EEPROM on a ESP32 has been depreciated use ESP32 Preferences in stead.

I use esp8266

In general you can't convert "string to character", because in strict words it means "...to single character" , and the string can contains a multiple chars.

So please clarify your request.

When I run this code, after some time I get this error and esp is reset.

--------------- CUT HERE FOR EXCEPTION DECODER ---------------

Exception (0):
epc1=0x40211bf0 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000

>>>stack>>>

ctx: sys
sp: 3fffeb90 end: 3fffffb0 offset: 0190
3fffed20:  3ffee1d0 00000000 00000000 3fffee90  
3fffed30:  3ffee1d0 00000001 3ffebf10 00000030  
3fffed40:  00000001 40104be2 00004000 00040000  
3fffed50:  00000005 00000000 00000020 c0037004  
3fffed60:  00000000 00000001 0000000e 401009d4  
3fffed70:  00000020 40105a1f 3ffed0f8 00040000  
3fffed80:  40103313 3ffed0f8 00000000 00000022  
3fffed90:  3fffc200 40100910 3fffc258 4000050c  
3fffeda0:  4000485b 00000030 00000020 ffffffff  
3fffedb0:  40101fd0 00e8a101 3feffe00 60000200  
3fffedc0:  fffdffff 04000001 fffffffe 04000001  
3fffedd0:  04000003 00000001 04000002 00000008  
3fffede0:  00000000 00000000 60000600 00000030  
3fffedf0:  4000050c 40100910 3fffc258 4000050c  
3fffee00:  4023d561 00000030 00000010 ffffffff  
3fffee10:  4023d9c6 00000008 3ffef4ea fffff5a1  
3fffee20:  3ffee888 4023da78 00000001 bfffffff  
3fffee30:  ffffffff 3fffc6fc 00000001 00000008  
3fffee40:  3ffee8b0 0444c810 60000600 00000030  
3fffee50:  3ffee8b0 3ffeffac 3fffc228 401062b9  
3fffee60:  4000050c 0154d67a 4022d6b2 3ffeffac  
3fffee70:  40000f68 00000030 00000010 ffffffff  
3fffee80:  40000f58 00000000 00000020 00000000  
3fffee90:  402202bc 00000000 00000020 401011d0  
3fffeea0:  4023a751 3ffe943c 00011888 4021b9f9  
3fffeeb0:  00000000 3fffdcb0 3ffee8c8 4021ba58  
3fffeec0:  00000000 0001178e 722d0e56 40235af4  
3fffeed0:  00000008 00000000 f7ffffff 60000600  
3fffeee0:  00000008 00000000 f7ffffff 4022023c  
3fffeef0:  4023d5b4 00000008 3ffee8b0 0444c810  
3fffef00:  4023d9c6 0155308a 3ffefc8c 60000600  
3fffef10:  044452b0 3ffee8b0 4023da8b 3ffe943c  
3fffef20:  3ffee8b0 01554afe 3ffee8b0 60000600  
3fffef30:  40244c59 3ffe943c 3ffee8b0 044452b0  
3fffef40:  40244c9e 3fffdab0 00000000 3fffdcb0  
3fffef50:  3ffee8d0 3fffdad0 3ffef4fc 4020e416  
3fffef60:  40000f49 3ffe9780 3fffdab0 40000f49  
3fffef70:  40000e19 00054383 bff00000 0000bfff  
3fffef80:  00000005 aa55aa55 000000f4 40105b21  
3fffef90:  40105b27 bff00000 0000bfff 00000035  
3fffefa0:  4010000d bff00000 00054383 401000ab  
3fffefb0:  40234fac 3fffef4c 40234f65 3ffffe48  
3fffefc0:  3fffffd0 00000000 00000000 feefeffe  
3fffefd0:  feefeffe feefeffe feefeffe feefeffe  
3fffefe0:  feefeffe feefeffe feefeffe feefeffe  
3fffeff0:  feefeffe feefeffe feefeffe feefeffe  
3ffff000:  feefeffe feefeffe feefeffe feefeffe  
3ffff010:  feefeffe feefeffe feefeffe feefeffe  
3ffff020:  feefeffe feefeffe feefeffe feefeffe  
3ffff030:  feefeffe feefeffe feefeffe feefeffe  
3ffff040:  feefeffe feefeffe feefeffe feefeffe  
3ffff050:  feefeffe feefeffe feefeffe feefeffe  
3ffff060:  feefeffe feefeffe feefeffe feefeffe  
3ffff070:  feefeffe feefeffe feefeffe feefeffe  
3ffff080:  feefeffe feefeffe feefeffe feefeffe  
3ffff090:  feefeffe feefeffe feefeffe feefeffe  
3ffff0a0:  feefeffe feefeffe feefeffe feefeffe  
3ffff0b0:  feefeffe feefeffe feefeffe feefeffe  
3ffff0c0:  feefeffe feefeffe feefeffe feefeffe  
3ffff0d0:  feefeffe feefeffe feefeffe feefeffe  
3ffff0e0:  feefeffe feefeffe feefeffe feefeffe  
3ffff0f0:  feefeffe feefeffe feefeffe feefeffe  
3ffff100:  feefeffe feefeffe feefeffe feefeffe  
3ffff110:  feefeffe feefeffe feefeffe feefeffe  
3ffff120:  feefeffe feefeffe feefeffe feefeffe  
3ffff130:  feefeffe feefeffe feefeffe feefeffe  
3ffff140:  feefeffe feefeffe feefeffe feefeffe  
3ffff150:  feefeffe feefeffe feefeffe feefeffe  
3ffff160:  feefeffe feefeffe feefeffe feefeffe  
3ffff170:  feefeffe feefeffe feefeffe feefeffe  
3ffff180:  feefeffe feefeffe feefeffe feefeffe  
3ffff190:  feefeffe feefeffe feefeffe feefeffe  
3ffff1a0:  feefeffe feefeffe feefeffe feefeffe  
3ffff1b0:  feefeffe feefeffe feefeffe feefeffe  
3ffff1c0:  feefeffe feefeffe feefeffe feefeffe  
3ffff1d0:  feefeffe feefeffe feefeffe feefeffe  
3ffff1e0:  feefeffe feefeffe feefeffe feefeffe  
3ffff1f0:  feefeffe feefeffe feefeffe feefeffe  
3ffff200:  feefeffe feefeffe feefeffe feefeffe  
3ffff210:  feefeffe feefeffe feefeffe feefeffe  
3ffff220:  feefeffe feefeffe feefeffe feefeffe  
3ffff230:  feefeffe feefeffe feefeffe feefeffe  
3ffff240:  feefeffe feefeffe feefeffe feefeffe  
3ffff250:  feefeffe feefeffe feefeffe feefeffe  
3ffff260:  feefeffe feefeffe feefeffe feefeffe  
3ffff270:  feefeffe feefeffe feefeffe feefeffe  
3ffff280:  feefeffe feefeffe feefeffe feefeffe  
3ffff290:  feefeffe feefeffe feefeffe feefeffe  
3ffff2a0:  feefeffe feefeffe feefeffe feefeffe  
3ffff2b0:  feefeffe feefeffe feefeffe feefeffe  
3ffff2c0:  feefeffe feefeffe feefeffe feefeffe  
3ffff2d0:  feefeffe feefeffe feefeffe feefeffe  
3ffff2e0:  feefeffe feefeffe feefeffe feefeffe  
3ffff2f0:  feefeffe feefeffe feefeffe feefeffe  
3ffff300:  feefeffe feefeffe feefeffe feefeffe  
3ffff310:  feefeffe feefeffe feefeffe feefeffe  
3ffff320:  feefeffe feefeffe feefeffe feefeffe  
3ffff330:  feefeffe feefeffe feefeffe feefeffe  
3ffff340:  feefeffe feefeffe feefeffe feefeffe  
3ffff350:  feefeffe feefeffe feefeffe feefeffe  
3ffff360:  feefeffe feefeffe feefeffe feefeffe  
3ffff370:  feefeffe feefeffe feefeffe feefeffe  
3ffff380:  feefeffe feefeffe feefeffe feefeffe  
3ffff390:  feefeffe feefeffe feefeffe feefeffe  
3ffff3a0:  feefeffe feefeffe feefeffe feefeffe  
3ffff3b0:  feefeffe feefeffe feefeffe feefeffe  
3ffff3c0:  feefeffe feefeffe feefeffe feefeffe  
3ffff3d0:  feefeffe feefeffe feefeffe feefeffe  
3ffff3e0:  feefeffe feefeffe feefeffe feefeffe  
3ffff3f0:  feefeffe feefeffe feefeffe feefeffe  
3ffff400:  feefeffe feefeffe feefeffe feefeffe  
3ffff410:  feefeffe feefeffe feefeffe feefeffe  
3ffff420:  feefeffe feefeffe feefeffe feefeffe  
3ffff430:  feefeffe feefeffe feefeffe feefeffe  
3ffff440:  feefeffe feefeffe feefeffe feefeffe  
3ffff450:  feefeffe feefeffe feefeffe feefeffe  
3ffff460:  feefeffe feefeffe feefeffe feefeffe  
3ffff470:  feefeffe feefeffe feefeffe feefeffe  
3ffff480:  feefeffe feefeffe feefeffe feefeffe  
3ffff490:  feefeffe feefeffe feefeffe feefeffe  
3ffff4a0:  feefeffe feefeffe feefeffe feefeffe  
3ffff4b0:  feefeffe feefeffe feefeffe feefeffe  
3ffff4c0:  feefeffe feefeffe feefeffe feefeffe  
3ffff4d0:  feefeffe feefeffe feefeffe feefeffe  
3ffff4e0:  feefeffe feefeffe feefeffe feefeffe  
3ffff4f0:  feefeffe feefeffe feefeffe feefeffe  
3ffff500:  feefeffe feefeffe feefeffe feefeffe  
3ffff510:  feefeffe feefeffe feefeffe feefeffe  
3ffff520:  feefeffe feefeffe feefeffe feefeffe  
3ffff530:  feefeffe feefeffe feefeffe feefeffe  
3ffff540:  feefeffe feefeffe feefeffe feefeffe  
3ffff550:  feefeffe feefeffe feefeffe feefeffe  
3ffff560:  feefeffe feefeffe feefeffe feefeffe  
3ffff570:  feefeffe feefeffe feefeffe feefeffe  
3ffff580:  feefeffe feefeffe feefeffe feefeffe  
3ffff590:  feefeffe feefeffe feefeffe feefeffe  
3ffff5a0:  feefeffe feefeffe feefeffe feefeffe  
3ffff5b0:  feefeffe feefeffe feefeffe feefeffe  
3ffff5c0:  feefeffe feefeffe feefeffe feefeffe  
3ffff5d0:  feefeffe feefeffe feefeffe feefeffe  
3ffff5e0:  feefeffe feefeffe feefeffe feefeffe  
3ffff5f0:  feefeffe feefeffe feefeffe feefeffe  
3ffff600:  feefeffe feefeffe feefeffe feefeffe  
3ffff610:  feefeffe feefeffe feefeffe feefeffe  
3ffff620:  feefeffe feefeffe feefeffe feefeffe  
3ffff630:  feefeffe feefeffe feefeffe feefeffe  
3ffff640:  feefeffe feefeffe feefeffe feefeffe  
3ffff650:  feefeffe feefeffe feefeffe feefeffe  
3ffff660:  feefeffe feefeffe feefeffe feefeffe  
3ffff670:  feefeffe feefeffe feefeffe feefeffe  
3ffff680:  feefeffe feefeffe feefeffe feefeffe  
3ffff690:  feefeffe feefeffe feefeffe feefeffe  
3ffff6a0:  feefeffe feefeffe feefeffe feefeffe  
3ffff6b0:  feefeffe feefeffe feefeffe feefeffe  
3ffff6c0:  feefeffe feefeffe feefeffe feefeffe  
3ffff6d0:  feefeffe feefeffe feefeffe feefeffe  
3ffff6e0:  feefeffe feefeffe feefeffe feefeffe  
3ffff6f0:  feefeffe feefeffe feefeffe feefeffe  
3ffff700:  feefeffe feefeffe feefeffe feefeffe  
3ffff710:  feefeffe feefeffe feefeffe feefeffe  
3ffff720:  feefeffe feefeffe feefeffe feefeffe  
3ffff730:  feefeffe feefeffe feefeffe feefeffe  
3ffff740:  feefeffe feefeffe feefeffe feefeffe  
3ffff750:  feefeffe feefeffe feefeffe feefeffe  
3ffff760:  feefeffe feefeffe feefeffe feefeffe  
3ffff770:  feefeffe feefeffe feefeffe feefeffe  
3ffff780:  feefeffe feefeffe feefeffe feefeffe  
3ffff790:  feefeffe feefeffe feefeffe feefeffe  
3ffff7a0:  feefeffe feefeffe feefeffe feefeffe  
3ffff7b0:  feefeffe feefeffe feefeffe feefeffe  
3ffff7c0:  feefeffe feefeffe feefeffe feefeffe  
3ffff7d0:  feefeffe feefeffe feefeffe feefeffe  
3ffff7e0:  feefeffe feefeffe feefeffe feefeffe  
3ffff7f0:  feefeffe feefeffe feefeffe feefeffe  
3ffff800:  feefeffe feefeffe feefeffe feefeffe  
3ffff810:  feefeffe feefeffe feefeffe feefeffe  
3ffff820:  feefeffe feefeffe feefeffe feefeffe  
3ffff830:  feefeffe feefeffe feefeffe feefeffe  
3ffff840:  feefeffe feefeffe feefeffe feefeffe  
3ffff850:  feefeffe feefeffe feefeffe feefeffe  
3ffff860:  feefeffe feefeffe feefeffe feefeffe  
3ffff870:  feefeffe feefeffe feefeffe feefeffe  
3ffff880:  feefeffe feefeffe feefeffe feefeffe  
3ffff890:  feefeffe feefeffe feefeffe feefeffe  
3ffff8a0:  feefeffe feefeffe feefeffe feefeffe  
3ffff8b0:  feefeffe feefeffe feefeffe feefeffe  
3ffff8c0:  feefeffe feefeffe feefeffe feefeffe  
3ffff8d0:  feefeffe feefeffe feefeffe feefeffe  
3ffff8e0:  feefeffe feefeffe feefeffe feefeffe  
3ffff8f0:  feefeffe feefeffe feefeffe feefeffe  
3ffff900:  feefeffe feefeffe feefeffe feefeffe  
3ffff910:  feefeffe feefeffe feefeffe feefeffe  
3ffff920:  feefeffe feefeffe feefeffe feefeffe  
3ffff930:  feefeffe feefeffe feefeffe feefeffe  
3ffff940:  feefeffe feefeffe feefeffe feefeffe  
3ffff950:  feefeffe feefeffe feefeffe feefeffe  
3ffff960:  feefeffe feefeffe feefeffe feefeffe  
3ffff970:  feefeffe feefeffe feefeffe feefeffe  
3ffff980:  feefeffe feefeffe feefeffe feefeffe  
3ffff990:  feefeffe feefeffe feefeffe feefeffe  
3ffff9a0:  feefeffe feefeffe feefeffe feefeffe  
3ffff9b0:  feefeffe feefeffe feefeffe feefeffe  
3ffff9c0:  feefeffe feefeffe feefeffe feefeffe  
3ffff9d0:  feefeffe feefeffe feefeffe feefeffe  
3ffff9e0:  feefeffe feefeffe feefeffe feefeffe  
3ffff9f0:  feefeffe feefeffe feefeffe feefeffe  
3ffffa00:  feefeffe feefeffe feefeffe feefeffe  
3ffffa10:  feefeffe feefeffe feefeffe feefeffe  
3ffffa20:  feefeffe feefeffe feefeffe feefeffe  
3ffffa30:  feefeffe feefeffe feefeffe feefeffe  
3ffffa40:  feefeffe feefeffe feefeffe feefeffe  
3ffffa50:  feefeffe feefeffe feefeffe feefeffe  
3ffffa60:  feefeffe feefeffe feefeffe feefeffe  
3ffffa70:  feefeffe feefeffe feefeffe feefeffe  
3ffffa80:  feefeffe feefeffe feefeffe feefeffe  
3ffffa90:  feefeffe feefeffe feefeffe feefeffe  
3ffffaa0:  00000002 00000243 00004000 feefeffe  
3ffffab0:  00000003 0000027a 00004000 c0037004  
3ffffac0:  00000000 00000001 0000000e c0033004  
3ffffad0:  00000000 00000001 0000000e 401009d4  
3ffffae0:  00000020 00000226 00004000 00000022  
3ffffaf0:  00000001 00000278 00004000 00000022  
3ffffb00:  4000050c 40100910 3fffc258 4000050c  
3ffffb10:  40229e95 00000030 00000018 ffffffff  
3ffffb20:  3ffed5f0 00000040 fffff0ff 000037d0  
3ffffb30:  3fff3b20 3ffed980 00000000 00000006  
3ffffb40:  00000080 0000ffe8 00080000 3ffece78  
3ffffb50:  00000041 3fff324c 3ffeff94 00000030  
3ffffb60:  3fff3b3a 3ffee1d0 00000000 0000c002  
3ffffb70:  00000060 00000001 00000800 00000000  
3ffffb80:  00000000 2064a8c0 00000002 3ffee1d0  
3ffffb90:  3ffeff94 3fff34dc 3fff3b04 00000030  
3ffffba0:  00000020 2c9f0300 4000050c 3fffc278  
3ffffbb0:  401036cc 3fffc200 00000022 00000022  
3ffffbc0:  4000050c 40100910 3fffc258 4000050c  
3ffffbd0:  4021b156 00000030 00000000 ffffffff  
3ffffbe0:  40222668 00000000 40241187 00000001  
3ffffbf0:  00000001 00000000 00000014 40100690  
3ffffc00:  402411d6 3ffece78 00000001 4023ee5b  
3ffffc10:  402412ba 3ffece78 401028c7 3ffece78  
3ffffc20:  00000014 3fff3b04 00000008 3fff3b20  
3ffffc30:  40240248 3ffece78 3ffed5f0 3fff3b04  
3ffffc40:  00000000 402298cf 3ffee1d0 3ffeff94  
3ffffc50:  00000000 00000002 00000000 3ffece78  
3ffffc60:  00000005 00000000 00000020 40100690  
3ffffc70:  000005e0 00000000 40104825 3ffed860  
3ffffc80:  00000005 00000000 00000020 40100690  
3ffffc90:  0000001c 00000001 00000005 40102788  
3ffffca0:  00000000 00000291 00004000 40100690  
3ffffcb0:  00000001 00000282 00004000 c0037004  
3ffffcc0:  00000000 00000001 0000000e 401009d4  
3ffffcd0:  00000020 00000001 0000000e c0033004  
3ffffce0:  00000000 00000001 0000000e 00000022  
3ffffcf0:  4000050c 40100910 3fffc258 4000050c  
3ffffd00:  00000000 00000293 00004000 ffffffff  
3ffffd10:  4020d150 3fff3527 00000000 c0037004  
3ffffd20:  00000000 00000001 0000000e 401009d4  
3ffffd30:  00000020 3ffffea3 00000039 3ffffe98  
3ffffd40:  00000010 3fff351c 0000000b 00000022  
3ffffd50:  4000050c 40100910 3fffc258 4000050c  
3ffffd60:  4020e583 00000030 00000010 ffffffff  
3ffffd70:  40206f84 000c3500 000b9c29 59a790a3  
3ffffd80:  00004bc6 00000000 00000001 00000008  
3ffffd90:  401066a4 ffffffff 00000000 00000000  
3ffffda0:  3ffeed20 44780000 00011782 00000030  
3ffffdb0:  3ffeed20 44780000 00011782 00000030  
3ffffdc0:  00000003 44780000 00011782 00000030  
3ffffdd0:  3ffef9b0 00000000 00000000 00011782  
3ffffde0:  3fff351c 00000010 00000020 401011d0  
3ffffdf0:  00000000 0000026f 000000d0 00000000  
3ffffe00:  00000000 00000006 3ffffe98 00000294  
3ffffe10:  00000293 3fff0654 3ffeed74 40206e15  
3ffffe20:  3fff0664 0000000c 3ffffe60 00011782  
3ffffe30:  000036c0 000006d8 3ffe85fc 00011782  
3ffffe40:  00000000 00000000 3ffe85f8 3ffeed20  
3ffffe50:  44780000 00011782 4020e532 3fffefb0  
3ffffe60:  44780000 3ffeed20 00000000 40206f84  
3ffffe70:  44780000 00000006 3ffeed20 4020498f  
3ffffe80:  00000000 000c000f 00000000 00000000  
3ffffe90:  000c000f 00000000 00000000 000c000f  
3ffffea0:  00000000 3ffef4d4 3ffe85f8 3ffef4d4  
3ffffeb0:  00000006 3ffef0f8 4020e484 3ffef0f8  
3ffffec0:  3ffef0e8 3ffef4d4 00000064 3ffef0f8  
3ffffed0:  3ffef0e8 3fff351c 3ffef03c 4020675a  
3ffffee0:  00000000 0012001f 00000000 00000000  
3ffffef0:  002a002f 00000000 00000000 002a002f  
3fffff00:  00000000 00000000 000d000f 00000000  
3fffff10:  00000000 0021002f 00000000 00000000  
3fffff20:  000c000f 00000000 00000000 000b000f  
3fffff30:  00000000 00000000 3ffef330 00000000  
3fffff40:  00000000 303a656d 00000000 00000000  
3fffff50:  303a656d 00000000 00000000 303a656d  
3fffff60:  00000000 00000000 0025002f 00000000  
3fffff70:  00000000 0025002f 00000000 3fff3234  
3fffff80:  000e000f 80000000 00000000 feefeffe  
3fffff90:  3fff351c 3ffe8f28 feefeffe 3ffef4fc  
3fffffa0:  3fffdad0 00000000 3ffef4d0 3ffef4fc  
<<<stack<<<

--------------- CUT HERE FOR EXCEPTION DECODER ---------------

I searched about this. It is said here that this error is due to many Strings in the code.

I still couldn't figure out exactly where the problem is.

11 ?
What is the magical number ?

And when you get that error, did you put that error into the ESP EXCEPTION DECODER?

That way you might get a meaning.

My guessing would be an array has went out of bounds or if OTA is being used what's the total program space used? If greater then 50% that's an issue.

When the code is running for about 4 to 5 minutes. Suddenly this error appears and esp is reset.
When the code is running. About 33,000 to 35,000 memories are free.

How do you know 35K memories are free when the code is running?

The results of the ESP EXCEPTION decoder is.........................?

through the code below
Serial.println(ESP.getFreeHeap());

How can I find the error from ESP EXCEPTION DECODER?

It seems to me that the logic of the code below is incorrect:

Once you read the only first byte into the ph_values[] array, you start to calculate the formula:

float ph_reg3and4 = ((ph_values[3] << 8) + ph_values[4]);

But in that moment you don't have a elements 3 & 4 of the array yet!

And after that you start to publish calculated (incorrect) data in the net and do it 11 times - for each byte readied from the modbus.

The same for reading the phos_values array, the pot_values and the others.

#define SerialNumber "VMN-A01-01-0002"
#define FirmwareVer "1.6.1"
#define URL_fw_Version "https://raw.githubusercontent.com/navid-h/" SerialNumber "/main/bin_version.txt"
#define URL_fw_Bin "https://raw.githubusercontent.com/navid-h/" SerialNumber "/main/" SerialNumber ".bin"
const char* host = "raw.githubusercontent.com";
const int httpsPort = 443;

#define URL_fw_Version2 "http://mqtt.angizehco.com"
#define URL_fw_Bin2 "http://mqtt.angizehco.com/" SerialNumber "/" SerialNumber ".bin"
const char* host2 = "mqtt.angizehco.com";

You are right about this part of the code. Tomorrow, I will work on this part so that only when bytes 3 and 4 are available, the processing and sending operations will be done and I will send the results.
If you have any suggestions on how to improve this part of the code, please send them.

I changed this part of the code like this and the result was like this

    if (mod.available() && i<sizeof(ph_values) ) {
      ph_values[i++] = mod.read();
      if(i>2&&i<5){
       float ph_reg3and4 = ((ph_values[3] << 8) + ph_values[4]);
      ph_reg3and4 = ph_reg3and4/100;
      pubPH = ph_reg3and4;
      //Serial.println("PH : "+(String)ph_reg3and4+"");
      if(ph_reg3and4>=0){
        NPKPublish = 1;
      PHtrigger = 1;
      OtherParameterignore = 0;
      Serial.println("PH : "+(String)ph_reg3and4+"");
      int ph;
        ph = (int) (ph_reg3and4 * 10L);
        if (phcomp != ph){
        phcomp = ph;
        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/2/PH"), toCharArray(String(ph_reg3and4)));
        Serial.println("Published");
        }
        
      }
      }
    }
Waiting for Wifi to connect
*******Succesfully Connected!!!
///////////////Connecting To Server ...
Connected To Server
Uptime: 0  Days  0  Hours  0  Minutes  5  Seconds
IP: 192.168.100.32
check NPK sensor
check EC sensor
PH2 : 0.00
PH2 : 5.12
Published
HUMID : 0.00
HUMID : 0.00
TEMP : 0.00
TEMP : 0.00
CO2 : 0.00
CO2 : 0.00
LUX : 0.00
LUX : 0.00
Uptime: 0  Days  0  Hours  0  Minutes  16  Seconds
IP: 192.168.100.32
check NPK sensor
check EC sensor
PH2 : 7.00
Published
PH2 : 4.44
Published
HUMID : 24.20
Published
HUMID : 24.20
TEMP : 23.00
Published
TEMP : 23.00
CO2 : 25.10
Published
CO2 : 25.10
LUX : 1024.00
Published
LUX : 1024.00

--------------- CUT HERE FOR EXCEPTION DECODER ---------------

Soft WDT reset

>>>stack>>>

ctx: cont
sp: 3ffffcb0 end: 3fffffd0 offset: 01a0
3ffffe50:  00000000 00006a80 fcac0831 000062e9  
3ffffe60:  44800000 3ffeed00 00000000 40206f8e  
3ffffe70:  44800000 00000008 3ffeed00 40204963  
3ffffe80:  00000000 000d000f 00000000 00000000  
3ffffe90:  000d000f 00000000 00000000 000d000f  
3ffffea0:  00000000 3ffef48c 3ffe85f8 3ffef48c  
3ffffeb0:  00000008 00000007 4020e47c 3ffef0b0  
3ffffec0:  3ffef0a0 3ffef48c 00000014 3ffef0b0  
3ffffed0:  3ffef0a0 3fff34d4 3ffeeff4 4020677c  
3ffffee0:  00000000 0012001f 00000000 00000000  
3ffffef0:  002a002f 00000000 00000000 002a002f  
3fffff00:  00000000 00000000 000d000f 00000000  
3fffff10:  00000000 0021002f 00000000 00000000  
3fffff20:  000c000f 00000000 00000000 000b000f  
3fffff30:  00000000 00000000 3ffef2e8 00000000  
3fffff40:  00000000 303a656d 00000000 00000000  
3fffff50:  303a656d 00000000 00000000 303a656d  
3fffff60:  00000000 00000000 0025002f 00000000  
3fffff70:  00000000 0025002f 00000000 3fff336c  
3fffff80:  000e000f 80000000 00000000 feefeffe  
3fffff90:  3fff34d4 3ffe8f0e feefeffe 3ffef4b4  
3fffffa0:  3fffdad0 00000000 3ffef488 3ffef4b4  
3fffffb0:  3fffdad0 00000000 3ffef488 4020e690  
3fffffc0:  feefeffe feefeffe 3fffdab0 40101469  
<<<stack<<<

--------------- CUT HERE FOR EXCEPTION DECODER ---------------

I also disabled all the watchdog commands in the code, but the result did not change

This is the result of exception code decoder:

Decoding stack results
0x40206ecb: delegate::detail::DelegateImpl::operator()() const at C:\Users\Navid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.0\libraries\SoftwareSerial\src\circular_queue/Delegate.h line 1126

0x40204967: multi_sensor_co2_detect() at C:\Users\Navid\Desktop\NPK\Payesh_Node2.0_TEST/Payesh_Node2.0_TEST.ino line 1451

0x4020e4ac: esp_try_delay(unsigned int, unsigned int, unsigned int) at C:\Users\Navid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.0\cores\esp8266*core_esp8266_main.cpp* line 171

0x402067ac: SoftwareSerial::SoftwareSerial() at C:\Users\Navid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.0\cores\esp8266/Print.h line 46

0x4020e6c0: dtostrf(double, signed char, unsigned char, char)* at C:\Users\Navid\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.0\cores\esp8266*core_esp8266_noniso.cpp* line 73

I noticed that when the function multi_sensor_lux_detect(); I remove from the code, the problem is solved, but where is the problem?

multi_sensor_lux_detect();



void multi_sensor_lux_detect(){

  uint32_t startTime;
  uint8_t i;

  // flush the receive buffer
  while (mod.available()) mod.read();

  // switch to transmit mode
  digitalWrite(DE, HIGH);
  digitalWrite(RE, HIGH);
  delay(100);

  // write out the modbus command bytes and wait for the transmission to finish
  mod.write(lux, sizeof(lux));
  mod.flush();
  // switch to receive mode 
  digitalWrite(DE, LOW);
  digitalWrite(RE, LOW);

  i = 0;
  startTime = millis();
  // wait for up to 500ms for a response
  while ( millis() - startTime <= 2000UL ) {
    //delay(50);
    if (mod.available() && i<sizeof(lux_values) ) {
      lux_values[i++] = mod.read();
      if(i>4&&i<7){
       float lux_reg3and4 = ((lux_values[5] << 8) + lux_values[6]);
      lux_reg3and4 = lux_reg3and4;
      pubLUX = lux_reg3and4;
      Serial.println("LUX : "+(String)lux_reg3and4+"");

       int lux;
        lux = (int) (lux_reg3and4 * 1L);
        if (luxcomp != lux){
        luxcomp = lux;
        client.publish(toCharArray("/angizeh/"+SerialNumber+"/24/4/LUX"), toCharArray(String(lux_reg3and4)));
        Serial.println("Published");
        }
      }
      
     }
    }
  
}

if you'd notice Software serial is throwing an error. Why use software serial when the esp32 has 3 hardware serial ports?