Chat here about code rewrites, mods, etc... with respect to the github project https://github.com/esp8266/Arduino

Moderator: igrr

User avatar
By tabeta_03
#90902 Hello Dears
I have a Static IP service.I want to forward the nodemcu port for access from outside the local network and through the internet.I designed a form and a uint or int variable (uint port;) and I intend to use eeprom to store it. Apparently everything is fine, but when the variable I put front the ESP8266WebServer (ESP8266WebServer server(port);), it receives IP from the router, but I do not have access to the root with the port contract after the IP (192.168.1.10:90) in the browser, while if I Put any other number in place of the variable, it will work without any problem!!!
How I can fix this problem?
Sorry about my bad english.

Code: Select all#define ONE_WIRE_BUS D3
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //D1&D2
#include <DallasTemperature.h>
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);

#include <SHT1x.h>
#define dataPin  14 //data s3
#define clockPin 12 //cloc s1
SHT1x sht1x(dataPin, clockPin);

#include <EEPROM.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h> 

#define HEATER  D7
#define STEAM   D8

#include <RtcDS1307.h>
RtcDS1307<TwoWire> Rtc(Wire);
byte termometer[8] = //icon for termometer
{
    B00100,
    B01010,
    B01010,
    B01110,
    B01110,
    B11111,
    B11111,
    B01110
};
byte droplet[8] = //icon for water droplet
{
    B00100,
    B00100,
    B01010,
    B01010,
    B10001,
    B10001,
    B10001,
    B01110,
};
byte Degree[8] = //icon for Degree
{
    B01110,
    B01010,
    B01110,
    B00000,
    B00110,
    B01000,
    B01000,
    B00110
};
byte mini[8] = //icon for minimum
{
    B01110,
    B01110,
    B01110,
    B01110,
    B11111,
    B11111,
    B01110,
    B00100
};
byte maxi[8] = //icon for maximum
{
    B00100,
    B01110,
    B11111,
    B11111,
    B01110,
    B01110,
    B01110,
    B01110
};


const char* ssid = "DALI_CHA";
const char* password = "";

float getTemperature() {
  float Temp;
    do {
    DS18B20.requestTemperatures();
    Temp = DS18B20.getTempCByIndex(0);
    delay(100);
    } while (Temp == 85.0 || Temp == (-127.0));
    return Temp;
  }

float Temp;
float Humidity;
int heatmin=0;
int heatmax=0;
int humimin=0;
int humimax=0;
int maxTemp =-100;
int minTemp=100;
int maxHumidity =-100;
int minHumidity=100;
int firstdigit;
int firstdigit2;
uint port;

void setupe()
{
 EEPROM.begin(1024);
 port=EEPROM.read(5);
 EEPROM.end();
 }


ESP8266WebServer server(port);
const char root [] =
"<!DOCTYPE HTML>\n"
"<title>DALI CHAI MONITORING</title>\n"
"<body bgcolor=\"black\">\n"
"<font face=\"Arial Black\">\n"
"<table style=\"height: 100%; margin-left: auto; margin-right: auto;\" width=\"100%;\">\n"
"<tbody>\n"
"<tr style=\"height: 100%;\">\n"
"<td style=\"width: 100%; height: 100%;\">\n"
"<h1 style=\"text-align: center;\"><span style=\"color: #ffff00;\">WELCOME TO DALI CHAI SMART FARM WIFI</span></h1>\n"
"<hr /></td>\n"
"</tr>\n"
"<tr style=\"height: 100%;\">\n"
"<td style=\"width: 100%; height: 100%; text-align: center;\">\n"
"<h2><a href=/view><span style=\"color: #ffff00;\">Sensor Data</span></a></h2>\n"
"<h2><a href=/setting><span style=\"color: #ffff00;\">Setting</span></a></h2>\n"
"<h2><span style=\"color: #ffff00;\">About</span></h2>\n"
"<h2><span style=\"color: #ffff00;\">Contact</span></h2>\n"
"<hr /></td>\n"
"</tr>\n"
"<tr style=\"height: 100%;\">\n"
"<td style=\"width: 100%; height: 100%; text-align: center;\">\n"
"<h4 style=\"text-align: center;\"><span style=\"color: #ffff00;\"><span id=\"result_box\" class=\"\" lang=\"en\"><span class=\"\">This page is designed using open source software and belongs to Mehr 15 Abhar CO-OP.</span></span></span></h4>\n"
"</td>\n"
"</tr>\n"
"</tbody>\n"
"</table>\n"
"<p>&nbsp;</p>\n"
"</font>\n"
"</body>\n"
"</html>\n";


const char set [] =
"<!DOCTYPE HTML>"
"<html>"
"<head>"
"<meta name = \"viewport\" content = \"width = device-width, initial-scale = 1.0, maximum-scale = 1.0, user-scalable=0\">"
"<title>Setting</title>"
"<style>"
"\"body { background-color: #808080; font-family: Arial, Helvetica, Sans-Serif; Color: #000000; }\""
"</style>"
"</head>"
"<body>"
"<h1>Setting</h1>"
"<FORM name=Form1 action=\"/setting\" method=\"post\">"
"<P>"
"Enter Min T:<input name=\"Hheatmin\"type=\"number\"><BR>"
"Enter Max T:<input name=\"Hheatmax\"type=\"number\"><BR>"
"Enter Min H:<input name=\"Hhumimin\"type=\"number\"><BR>"
"Enter Max H:<input name=\"Hhumimax\"type=\"number\"><BR>"
"<INPUT type=\"submit\" value=\"Send\" return fals;>"
"</P>"
"</FORM>"
"<FORM action=\"/setting\" method=\"post\">"
"<P>"
"<INPUT type=\"radio\" name=\"rest\" value=\"1\">Rest MIN & MAX<BR>"
"<INPUT type=\"submit\" value=\"Send\">"
"</P>"
"</FORM>"
"<FORM name=Form2 action=\"/setting\" method=\"post\">"
"<P>"
"Enter local port:<input name=\"Hport\"type=\"number\"><BR>"
"<INPUT type=\"submit\" value=\"Send\" return fals;>"
"</P>"
"</FORM>"
"<a href=\"/\">Main menu</a>""<br>"
"</body>"
"</html>";

   
LiquidCrystal_I2C lcd(0x3F,20,4);

void setup()
{
  Serial.begin(9600);
  EEPROM.begin(1024);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println(WiFi.localIP());
 
     
  server.begin();
  server.on("/",handleRoot);
  server.on("/setting",handleset);
  server.on("/view",handleview);
  server.on("/view/advance",handleadvance);

   
  Wire.pins(D2,D1);   
  lcd.begin();
  lcd.createChar(1,termometer);
  lcd.createChar(2,droplet);
  lcd.createChar(3,Degree);
  lcd.createChar(4,mini);
  lcd.createChar(5,maxi);
   
  heatmin=EEPROM.read(1);
  heatmax=EEPROM.read(2);
  humimin=EEPROM.read(3);
  humimax=EEPROM.read(4);
  port=EEPROM.read(5);
 
 
  pinMode(HEATER,OUTPUT);
  pinMode(STEAM,OUTPUT);
//------------------------------- Rtc ----------------------------------
   
//------------------------------- Rtc ----------------------------------   
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.write(1);
      lcd.write(2);
      delay(500);
      lcd.setCursor(18,0);
      lcd.write(2);
      lcd.write(1);delay(500);
      lcd.setCursor(2,0);
      lcd.print("DALI CHAI SERISE");delay(500);
      lcd.setCursor(0,1);
      lcd.print("Smart Farme WIFI WEB");delay(750);
      lcd.setCursor(0,2);
      lcd.print("KEYLES IP&WEB CONFIG");delay(750);
      lcd.setCursor(0,3);
      lcd.print("MEHR 15 ABHAR  V99.1");delay(1000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Please Wait ");delay(500);
      lcd.print(".");delay(500);
      lcd.print(".");delay(500);
      lcd.print(".");delay(500);
      lcd.print(".");delay(500);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("RTC:");
      lcd.setCursor(0,1);
      lcd.print("WEB SERVER:");
      lcd.setCursor(0,2);
      lcd.print("DS18B20:");
      lcd.setCursor(0,3);
      lcd.print("SHT10:");delay(500);
      lcd.setCursor(13,0);
      lcd.print("started");delay(500);
      lcd.setCursor(13,1);
      lcd.print("started");delay(500);
      lcd.setCursor(13,2);
      lcd.print("started");delay(500);
      lcd.setCursor(13,3);
      lcd.print("started");delay(500);
      lcd.clear();
      }
//------------------------------- HTML CODE ----------------------------------
 
 void handleRoot()
{
  server.send(200, "text/html", root);
}


void returnFail(String msg)
{
  server.sendHeader("Connection", "close");
  server.sendHeader("Access-Control-Allow-Origin", "*");
  server.send(500, "text/plain", msg + "\r\n");
}
 
 void handleset()
  {
    if (server.hasArg("Hheatmin")) {
    handleSubmit();
  }
   else if (server.hasArg("rest")) {
    handleSubmit2();
  }
  else if (server.hasArg("Hport")) {
    handleSubmit3();
  }
    else {
    server.send(200, "text/html", set);
  }
  }
 

void handleSubmit()
{
 
  if (!server.hasArg("Hheatmin")) return returnFail("BAD ARGS");
  heatmin=server.arg("Hheatmin").toInt();{EEPROM.put(1,heatmin);EEPROM.commit();}
  server.send(200, "text/html", set);
 
  if (!server.hasArg("Hheatmax")) return returnFail("BAD ARGS");
  heatmax=server.arg("Hheatmax").toInt();{EEPROM.put(2,heatmax);EEPROM.commit();}
  server.send(200, "text/html", set);

  if (!server.hasArg("Hhumimin")) return returnFail("BAD ARGS");
  humimin=server.arg("Hhumimin").toInt();{EEPROM.put(3,humimin);EEPROM.commit();}
  server.send(200, "text/html", set);

  if (!server.hasArg("Hhumimax")) return returnFail("BAD ARGS");
  humimax=server.arg("Hhumimax").toInt();{EEPROM.put(4,humimax);EEPROM.commit();}
  server.send(200, "text/html", set);
 
  }

 
void handleSubmit2()
{
  String restvalue;

  if (!server.hasArg("rest")) return returnFail("BAD ARGS");
  restvalue = server.arg("rest");
  if (restvalue == "1") {
    maxTemp=Temp;
    minTemp=Temp;
    maxHumidity =Humidity;
    minHumidity=Humidity;
    server.send(200, "text/html",set);
    }
  else {
    returnFail("Fail");
        }
    }
void handleSubmit3()
{
  if (port==0)
  {port=80;}
  if (!server.hasArg("Hport")) return returnFail("BAD ARGS");
  port=server.arg("Hport").toInt();{EEPROM.put(5,port);EEPROM.commit();}
  server.send(200, "text/html", set);
  EEPROM.end();
  }
   
void handleview()
  {
        String cssClass = "mediumhot";
 
    if (Temp < heatmin)
      cssClass = "cold";
    else if (Temp > heatmax)
      cssClass = "hot";
 
    String view = "<!DOCTYPE html><html><head><title>""Summary Sensor Data""</title><meta charset=\"utf-8\" /><meta name=\"viewport\" content=\"width=device-width\" /><style>\n";
    view += "html {height: 100%;}";
    view += "div {color: #fff;font-family: 'Arial Black';font-weight: 400;left: 50%;position: absolute;text-align: center;top: 50%;transform: translateX(-50%) translateY(-50%);}";
    view += "h1 {font-size: large;font-weight: 400; margin: 0}";
    view += "h2 {font-size: 80%;font-weight: 400; margin: 0}";
    view += "h3 {font-size: 60%;font-weight: 400; margin: 0}";
    view += "body {height: 100%;}";
    view += ".cold {background: linear-gradient(to bottom, #7abcff, #0665e0 );}";
    view += ".mediumhot {background: linear-gradient(to bottom, #81ef85,#057003);}";
    view += ".hot {background: linear-gradient(to bottom, #fcdb88,#d32106);}";
    view += "</style></head><body class=\"" + cssClass + "\"><div>"
               "<h1>"+WiFi.localIP().toString()+"</h1>""<br>"
               "<h2>""T : "+Temp +"&deg;C""<br></h2>"
               "<h2>""H : "+Humidity +"%""<br></h2>""<br>";
    view +="<h3>""<a href=\"/view/advance\">Advance</a>""<br>";
    view +="<a href=\"/\">Main menu</a>""</h3>""</div></body></html>";
    view +=("<meta http-equiv=\"refresh\" content=\"10\">");
    server.send(200, "text/html", view);
  }
  void handleadvance()
   {
    String cssClass = "mediumhot";
 
    if (Temp < heatmin)
      cssClass = "cold";
    else if (Temp > heatmax)
      cssClass = "hot";
 
    String advance = "<!DOCTYPE html><html><head><title>""Advance Sensor Data""</title><meta charset=\"utf-8\" /><meta name=\"viewport\" content=\"width=device-width\" /><style>\n";
    advance += "html {height: 100%;}";
    advance += "div {color: #fff;font-family: 'Arial Black';font-weight: 400;left: 50%;position: absolute;text-align: center;top: 50%;transform: translateX(-50%) translateY(-50%);}";
    advance += "h1 {font-size: large;font-weight: 400; margin: 0}";
    advance += "h2 {font-size: 80%;font-weight: 400; margin: 0}";
    advance += "h3 {font-size: 60%;font-weight: 400; margin: 0}";
    advance += "h4 {font-size: 40%;font-weight: 400; margin: 0}";
    advance += "body {height: 100%;}";
    advance += ".cold {background: linear-gradient(to bottom, #7abcff, #0665e0 );}";
    advance += ".mediumhot {background: linear-gradient(to bottom, #81ef85,#057003);}";
    advance += ".hot {background: linear-gradient(to bottom, #fcdb88,#d32106);}";
    advance += "</style></head><body class=\"" + cssClass + "\"><div>"
               "<h1>"+WiFi.localIP().toString()+"</h1>""<br>"
               "<h2>""T : "+Temp +"&deg;C""<br></h2>"
                           "<h3>""Max Temperature : "+maxTemp+"&deg;C"+"<br>"
                           "Min Temperature : "+minTemp+"&deg;C""<br>"
                           +"Set Min Temperature : "+heatmin+"&deg;C""<br>"
                           +"Set Max Temperature : "+heatmax+"&deg;C""</h3>""<br>"
                           "<h2>""H : "+Humidity +"%""<br></h2>"
                           "<h3>""Max Humidity : "+maxHumidity+"%"+"<br>"
                           "Min Humidity : "+minHumidity+"%""<br>"
                           +"Set Min Humidity : "+humimin+"%""<br>"
                           +"Set Max Humidity : "+humimax+"%""</h3>""<br>";
    advance +="<h4>""<a href=\"/view\">Summary</a>""<br>";
    advance +="<a href=\"/\">Main menu</a>""</h4>""</div></body></html>";
    advance +=("<meta http-equiv=\"refresh\" content=\"10\">");
    server.send(200, "text/html",advance);
  }

//------------------------------- HTML CODE ----------------------------------
void loop() {
     
  Temp = getTemperature();
  delay(500);
  Humidity = sht1x.readHumidity();
  delay(500);
   
   if (Temp<minTemp){minTemp = Temp;}
   if (Temp>maxTemp){maxTemp = Temp;}

   if (Humidity<minHumidity){minHumidity= Humidity;}
   if (Humidity>maxHumidity){maxHumidity = Humidity;}
   
//----------------------------- Relay Control -----------------------------------

    if ( Temp < heatmin ) digitalWrite(HEATER,HIGH);
    if ( Temp > heatmax and Temp > heatmin ) digitalWrite(HEATER,LOW);
   

    if ( Humidity < humimin ) digitalWrite(STEAM,HIGH);
    if ( Humidity > humimax and Temp > humimin ) digitalWrite(STEAM,LOW);
   
   

//---------------------------- LCD ----------------------------------------------
      lcd.setCursor(0, 0);
      lcd.write(1);
      lcd.setCursor(2, 0);
      lcd.print(Temp,2);
      lcd.setCursor(7, 0);
      lcd.write(3);
      lcd.setCursor(9, 0);
      lcd.write(5);
      lcd.setCursor(10, 0);
      lcd.print(maxTemp);
      lcd.setCursor(13, 0);
      lcd.write(4);
      lcd.setCursor(14, 0);
      lcd.print(minTemp);
      lcd.setCursor(17, 0);
      lcd.print("R:");
      lcd.setCursor(19, 0);
      if (digitalRead(HEATER)==HIGH){lcd.setCursor(19, 0);lcd.print("H");}
      else {lcd.setCursor(19, 0);lcd.print("L");}
      lcd.setCursor(0,1);
      lcd.write(2);
      lcd.setCursor(2, 1);
      lcd.print(Humidity,2);
      lcd.setCursor(7, 1);
      lcd.print("%");
      lcd.setCursor(9, 1);
      lcd.write(5);
      lcd.setCursor(10, 1);
      lcd.print(maxHumidity);
      lcd.setCursor(13, 1);
      lcd.write(4);
      lcd.setCursor(14, 1);
      lcd.print(minHumidity);
      lcd.setCursor(17, 1);
      lcd.print("R:");
      lcd.setCursor(19, 1);
      if (digitalRead(STEAM)==HIGH){lcd.setCursor(19, 1);lcd.print("H");}
      else {lcd.setCursor(19, 1);lcd.print("L");}
      lcd.setCursor(0, 2);
      lcd.print("ST:");
      lcd.setCursor(3, 2);
      lcd.print(heatmin);
      if (heatmin < 100 && heatmin > 0 ){lcd.setCursor(5, 2);lcd.print(" ");}
      if (heatmin < 10 && heatmin > 0 ){lcd.setCursor(4, 2);lcd.print("  ");}
      if (heatmin == 0 ){lcd.setCursor(4, 2);lcd.print("  ");}
      lcd.setCursor(6, 2);
      lcd.print("/");
      lcd.setCursor(7, 2);
      lcd.print(heatmax);
      if (heatmax < 100 && heatmax > 0 ){lcd.setCursor(9, 2);lcd.print(" ");}
      if (heatmax < 10 && heatmax > 0 ){lcd.setCursor(8, 2);lcd.print("  ");}
      if (heatmax == 0 ){lcd.setCursor(8, 2);lcd.print("  ");}
      lcd.setCursor(12, 2);
      lcd.print("SH:");
      lcd.setCursor(15, 2);
      lcd.print(firstdigit);
      if (humimin < 100)firstdigit = humimin;
      else if (humimin < 1000)firstdigit = humimin / 10;
      if (humimax < 10 && heatmax > 0 ){lcd.setCursor(16, 2);lcd.print(" ");}
      lcd.setCursor(17, 2);
      lcd.print("/");
      lcd.setCursor(18, 2);
      lcd.print(firstdigit2);
      if (humimax < 100)firstdigit2 = humimax;
      else if (humimax < 1000)firstdigit2 = humimax / 10;
      if (humimax < 10 && heatmax > 0 ){lcd.setCursor(19, 2);lcd.print(" ");}
      lcd.setCursor(0, 3);
      lcd.print(WiFi.localIP());
      WiFiClient client;
      if (WiFi.localIP()==!WiFi.status()){lcd.setCursor(0, 3);lcd.print("Disconnected    ");}
      else {lcd.setCursor(0, 3);lcd.print(WiFi.localIP());}
      lcd.setCursor(15, 3);
      lcd.print(port);
      server.handleClient();
          }

https://imgur.com/JLxFGNm
https://imgur.com/gpbdHos
https://imgur.com/AQVNCS9
https://imgur.com/iBQN9fd

Image
Image
Image
Image