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)));
}