سلام اساتید محترم هدف ساختن یه ترموستات برای کنترل دما و رطوبت هست از nodemcu استفاده کردم ال سی دی و سنسور dht11 و رله دو کانال الان از طریق کلید ها و ال سی دی هم دما و رطوبت رو میتونم ببینم و هم کنترل کنم تو قسمت وب سرور هم کد html اضافه کردم که طبق عکس میتونم دما و رطوبت و حداقل و حد اکثرشو ببینم ولی نمیدونم چطور میتونم اون تکست باکس هایی که برای ورود حداقل و حد اکثر هست طوری تعریف کنم که حالت ورودی داشته باشه و اعداد رو به نود بفرسته و اونجا برابر با متغییر های حداقل و حد اکثر رطوبت و دما قرار بده لطفا یه نگاههی به کد بندازید و در صورت امکان برام تغییرش بدید که بتونم از صفحه وب متغییر ها رو کنترل کنم.



کد:
#include <Wire.h> 

 #include <LiquidCrystal_I2C.h> //D1&D2
#include <Adafruit_Sensor.h>
#include <DHT.h>

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


#define DHTTYPE DHT11
#define UP      1   //RX
#define SET     D0
#define DOWN    3   //TX
#define HEATER  D7
#define STEAM   D8

DHT dht1( D4, DHTTYPE); 

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

IPAddress ip(192, 168, 0, 107);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress DNS(8, 8, 8, 8);
const char* ssid = "DALI_CHAI";
const char* password = "";
ESP8266WebServer server(80);


float Temp;
float Humidity;
int count=1;
int menu=1;

unsigned long previousMillis = 0;
unsigned long currentMillis =0;
const long interval = 10000;

int heatmin=0;
int heatmax=0;
int humimin=0;
int humimax=0;
int maxTemp =-100;
int minTemp=100; 
int maxHumidity =-100;
int minHumidity=100; 

LiquidCrystal_I2C lcd(0x3F, 16, 2);

void setup()
{
  Serial.begin(9600);
  WiFi.config(ip, gateway, subnet, DNS);
  WiFi.begin(ssid, password);
  EEPROM.begin(1024); 
  server.begin();
  
  lcd.begin();
  lcd.createChar(1,termometer);
  lcd.createChar(2,droplet);
  lcd.createChar(3,Degree);
  lcd.createChar(4,mini);
  lcd.createChar(5,maxi);
  
  dht1.begin();
  heatmin=EEPROM.read(1);
  heatmax=EEPROM.read(2);
  humimin=EEPROM.read(3);
  humimax=EEPROM.read(4);
 
  pinMode(UP,INPUT);
  pinMode(DOWN,INPUT);
  pinMode(SET,INPUT);

 
  pinMode(HEATER,OUTPUT);
  pinMode(STEAM,OUTPUT);
      
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.write(1);
      lcd.write(2);
      delay(1000);
      lcd.setCursor(14,0);
      lcd.write(2);
      lcd.write(1);
      delay(1000);
      lcd.setCursor(3,0);
      lcd.print("DALI  CHAI");
      delay(2000);
      lcd.setCursor(0,1);
      lcd.print("Smart Farme WIFI");
      delay(4000);
startup();
}


void startup(){

    currentMillis = millis();
    
//------------------------------- HTML CODE ----------------------------------
server.on("/", []() {
      float temp = dht1.readTemperature();
      float Humidity = dht1.readHumidity();
    
    

    String cssClass = "mediumhot";
  
    if (temp < 0)
      cssClass = "cold";
    else if (temp > 20)
      cssClass = "hot";
  
     String message = "<!DOCTYPE  html><html><head><title>""</title><meta  charset=\"utf-8\" /><meta name=\"viewport\"  content=\"width=device-width\" /><style>\n";
    message += "html {height: 100%;}";
     message += "div {color: #fff;font-family: 'Arial Black';font-weight:  400;left: 50%;position: absolute;text-align: center;top: 50%;transform:  translateX(-50%) translateY(-50%);}";
    message += "h1 {font-size: xlarge;font-weight: 400; margin: 0}";
    message += "h2 {font-size: xxxlarge;font-weight: 400; margin: 0}";
    message += "h3 {font-size: small;font-weight: 400; margin: 0}";
    message += "h4 {font-size: xsmall;font-weight: 400; margin: 0}";
    message += "body {height: 100%;}";
    message += ".cold {background: linear-gradient(to bottom, #7abcff, #0665e0 );}";
    message += ".mediumhot {background: linear-gradient(to bottom, #81ef85,#057003);}";
    message += ".hot {background: linear-gradient(to bottom, #fcdb88,#d32106);}";
    message += "</style></head><body class=\"" + cssClass + "\"><div>"
               "<h1>""Office""<br><br></h1>"
                "<h2>""T : "+temp  +"&deg;C""<br></h2><h3>""Max Temperature :  "+maxTemp+"&deg;C"+"<br>""Min Temperature :  "+minTemp+"&deg;C""</h3>""<br>"
                "<h2>""H : "+Humidity +"%""<br></h2><h3>""Max  Humidity : "+maxHumidity+"%"+"<br>""Min Humidity :  "+minHumidity+"%""</h3><br>"+"</div></body></html>";
     message +="<h4><form action='http://192.168.0.107/submit'  method='POST'> Enter Min T:<input name=\"formTemp\"  type=\"number\"> <input type=\"submit\">  </form></h4><br>";
    message +="<form  action='http://192.168.0.107/submit' method='POST'> Enter Max  T:<input name=\"formTemp\" type=\"number\"> <input  type=\"submit\"> </form> <br>";
    message  +="<form action='http://192.168.0.107/submit' method='POST'> Enter  Min H:<input name=\"formTemp\" type=\"number\"> <input  type=\"submit\"> </form> <br>";
    message  +="<form action='http://192.168.0.107/submit' method='POST'> Enter  Max H:<input name=\"formTemp\" type=\"number\"> <input  type=\"submit\"> </form> <br>";
                                          
    message +=("<meta http-equiv=\"refresh\" content=\"10\">");
    
    
    server.send(200, "text/html", message);
  });
//------------------------------- LOADING ... --------------------------------
      menu=1;
      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();
      delay(1000);

//------------------------------- MENU 1 --------------------------------

  while(menu==1){
      lcd.setCursor(0, 0);
      lcd.write(1);
      lcd.setCursor(1, 0);
      lcd.print(" ");
      lcd.setCursor(2, 0);
      lcd.print("Enter min T:");
      lcd.setCursor(0, 1);
      lcd.print(heatmin);
      lcd.setCursor(3, 1);
      lcd.write(3);
      
      if (digitalRead(UP))   {heatmin++;delay(200);}
      if (digitalRead(DOWN)) {heatmin--;delay(200);}
      if (heatmin < 10 ) heatmin=10;
      if (heatmin > 99)  heatmin=99;

      if (digitalRead(SET)) {EEPROM.write(1,heatmin);EEPROM.commit(); lcd.clear(); lcd.print("Saved ..."); delay(2000); menu=2;}
      if (millis() - currentMillis > 30000) { lcd.clear(); break;}
    }

//------------------------------- MENU 2 --------------------------------
  while(menu==2){
      lcd.setCursor(0, 0);
      lcd.write(1);
      lcd.setCursor(1, 0);
      lcd.print(" ");
      lcd.setCursor(2, 0);
      lcd.print("Enter max T:");
      lcd.setCursor(0, 1);
      lcd.print(heatmax);
      lcd.setCursor(3, 1);
      lcd.write(3);
      
      if (digitalRead(UP))   {heatmax++;delay(200);}
      if (digitalRead(DOWN)) {heatmax--;delay(200);}
      if (heatmax < 10 ) heatmax=10;
      if (heatmax > 99)  heatmax=99;

      if (digitalRead(SET)) {EEPROM.write(2,heatmax);EEPROM.commit(); lcd.clear(); lcd.print("Saved ..."); delay(2000); menu=3;}
      if (millis() - currentMillis > 60000) { lcd.clear(); break;}
    }

//------------------------------- MENU 3 --------------------------------
  while(menu==3){
      lcd.setCursor(0, 0);
      lcd.write(2);
      lcd.setCursor(1, 0);
      lcd.print(" ");
      lcd.setCursor(2, 0);
      lcd.print("Enter min H:");
      lcd.setCursor(0, 1);
      lcd.print(humimin);
      lcd.setCursor(3, 1);
      lcd.print("%");
      
      if (digitalRead(UP))   {humimin++;delay(200);}
      if (digitalRead(DOWN)) {humimin--;delay(200);}
      if (humimin < 10 ) humimin=10;
      if (humimin > 99)  humimin=99;

      if (digitalRead(SET)) {EEPROM.write(3,humimin); EEPROM.commit();lcd.clear(); lcd.print("Saved ..."); delay(2000); menu=4;}
      if (millis() - currentMillis > 90000) { lcd.clear(); break;}
    }

//------------------------------- MENU 4 --------------------------------
  while(menu==4){
      lcd.setCursor(0, 0);
      lcd.write(2);
      lcd.setCursor(1, 0);
      lcd.print(" ");
      lcd.setCursor(2, 0);
      lcd.print("Enter max H:");
      lcd.setCursor(0, 1);
      lcd.print(humimax);
      lcd.setCursor(3, 1);
      lcd.print("%");
      
      if (digitalRead(UP))   {humimax++;delay(200);}
      if (digitalRead(DOWN)) {humimax--;delay(200);}
      if (humimax < 10 ) humimax=10;
      if (humimax > 99)  humimax=99;

       if (digitalRead(SET)) {EEPROM.write(4,humimax);EEPROM.commit();  lcd.clear(); lcd.print("Saved ..."); delay(2000); lcd.clear(); break;}
      if (millis() - currentMillis > 120000) { lcd.clear(); break;}
    }
  {
      EEPROM.end();}
}

void loop() {
    
    
        Humidity = dht1.readHumidity();
        Temp = dht1.readTemperature();
        
   
   if (Temp<minTemp){minTemp = Temp;}
   if (Temp>maxTemp){maxTemp = Temp;}

   if (Humidity<minHumidity){minHumidity= Humidity;}
   if (Humidity>maxHumidity){maxHumidity = Humidity;}
   
//-----------------------------  Serial Print -----------------------------         
  if (isnan(Temp) || isnan(Humidity)) {
    Serial.println("Failed to read from DHT #1");
  } else {
    Serial.print("Humidity: "); 
    Serial.print(Humidity);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(Temp);
    Serial.println(" *C\t");
    Serial.print("MAX Humidity: "); 
    Serial.print(maxHumidity);
    Serial.print(" %\t");
    Serial.print("MIN Humidity: "); 
    Serial.print(minHumidity);
    Serial.println(" %\t");
    Serial.print("MAX Temperature: "); 
    Serial.print(maxTemp);
    Serial.print(" *C\t");
    Serial.print("MIN Temperature: "); 
    Serial.print(minTemp);
    Serial.println(" *C\t");
  }
       

//----------------------------- Relay Control -----------------------------------

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

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

//---------------------------- LCD ----------------------------------------------
    switch (count){
      case 1:
    
      lcd.setCursor(0, 0);
      lcd.write(1);
      lcd.setCursor(2, 0);
      lcd.print(Temp,1);
      lcd.setCursor(6, 0);
      lcd.write(3);
      lcd.setCursor(8, 0);
      lcd.write(5);
      lcd.setCursor(9, 0);
      lcd.print(maxTemp);
      lcd.setCursor(12, 0);
      lcd.write(4);
      lcd.setCursor(13, 0);
      lcd.print(minTemp);
      lcd.setCursor(0,1);
      lcd.write(2);
      lcd.setCursor(2, 1);
      lcd.print(Humidity,1);
      lcd.setCursor(6, 1);
      lcd.print("%");
      lcd.setCursor(8, 1);
      lcd.write(5);
      lcd.setCursor(9, 1);
      lcd.print(maxHumidity);
      lcd.setCursor(12, 1);
      lcd.write(4);
      lcd.setCursor(13, 1);
      lcd.print(minHumidity,1);
     }     

     count++;
    if (count>4) count=1;
    delay(1000);
    if (digitalRead(SET)) startup();
    server.handleClient();
}