• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Помогите разобраться в скетче терморегулятора

goya4

New member
Схема и скетч взяты отсюда. Нужно настроить терморегулятор на нагрев. Например
"температура включения" = 76.5c
"температура отключения" = 78.0с

или

"температура включения" = 76.5c
"гистерезис" =1.5с
Автор молчит :(
код:


Код:
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>

/////////////////////////////////////////////////////////////////////////////////////
const char* ssid = "Название вашей сети";                       // Название Вашей WiFi сети
const char* password = "Пароль от вашей сети";                      // Пароль от Вашей WiFi сети
////////////////// Если необходимо статический IP ESP8266 ///////////////////////////
IPAddress ip(192,168,2,110);                             // Статический IP ESP8266
IPAddress gateway(192,168,2,1);                          // Статический IP роутера
IPAddress subnet(255,255,255,0);                         // Маска сети
/////////////////////////////////////////////////////////////////////////////////////

String inputMessage = "";                            //
String lastTemperature;

/////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////// HTML веб-страница /////////////////////////////////
const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML><html><head>
  <title>Терморегулятор на ESP8266</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta charset='UTF-8'>
  </head><body>
  <h2>Температура: %TEMPERATURE% &deg;C</h2>
  <form action="/get">
  Температура включения: <input type="number" step="0.1" name="threshold_input" value="%THRESHOLD%" required><br>
   </head><body>
  <input type="submit" value="Сохранить">
  </form>
</body></html>)rawliteral";
/////////////////////////////////////////////////////////////////////////////////////

void notFound(AsyncWebServerRequest *request) {
  request->send(404, "text/plain", "Not found");
}

AsyncWebServer server(80);

String processor(const String& var){
  Serial.println(var);
  if(var == "TEMPERATURE"){
    return lastTemperature;
  }
  else if(var == "THRESHOLD"){
    return inputMessage;
  }
  return String();
}

const char* PARAM_INPUT = "threshold_input";

/////////////Интервал между обновлением показаний датчика DS18B20////////////////////
unsigned long previousMillis = 0;    
const long interval = 1000;  

/////////////////////////////////////////////////////////////////////////////////////
const int output = 4;                   // Вывод GPIO куда подключено реле
const int oneWireBus = 2;               // Вывод GPIO куда подключен DS18B20    
OneWire oneWire(oneWireBus);
DallasTemperature sensors(&oneWire);
/////////////////////////////////////////////////////////////////////////////////////

void setup()
{
EEPROM.begin(512);                                    
Serial.begin(115200);                                    // Создаем последовательную связь на скорости 115200
WiFi.mode(WIFI_STA);                                    
WiFi.begin(ssid, password);                              // Передаем данные о WiFI сети
WiFi.config(ip, gateway, subnet);                        // Передаем данные о WiFI сети

///////////////////////  Проверка подключение к Wi-Fi сети  /////////////////////////
  if (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("WiFi Failed!");
    return;}
/////////////////////////////////////////////////////////////////////////////////////

  Serial.println();                                       // Новая строка              
  Serial.print("ESP IP Address: http://");                // Печать текста
  Serial.println(WiFi.localIP());                         // Отправка IP
  pinMode(output, OUTPUT);                                // Установка вывода output, как выход
  digitalWrite(output, LOW);                              // Устанавливаем output в LOW
  sensors.begin();                                        // Инициализация DS18B20

//////////////////////////  Оправка WEB страницы клиенту  //////////////////////////
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
  request->send_P(200, "text/html", index_html, processor);});
/////////////////////////////////////////////////////////////////////////////////////

///////////////////////////  Получение данных cо страницы  //////////////////////////
  server.on("/get", HTTP_GET, [] (AsyncWebServerRequest *request) {
    if (request->hasParam(PARAM_INPUT))
    {
     inputMessage = request->getParam(PARAM_INPUT)->value();
     EEPROM.put(0,inputMessage);                         // Запись данных в EEPROM
     EEPROM.commit();                                  
    }
request->send(200, "text/html", "<meta charset='UTF-8'>" "Запрос отправлен на ESP.<br><a href=\"/\">Назад </a>");
  });

  server.onNotFound(notFound);
  server.begin();
}

void loop()
{
EEPROM.get(0, inputMessage);                                           // Чтение данных с EEPROM
unsigned long currentMillis = millis();                                // Записываем данные в currentMillis

  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    sensors.requestTemperatures();                                     // Чтение даных о температуре
    float temperature = sensors.getTempCByIndex(0);                    // Запись данных температуры в temperature
    Serial.print(temperature);                                         // Отправка данных о температуре
    Serial.println(" *C");                                             // Печать текста
    lastTemperature = String(temperature);                            

////////////////////////////////////  Включение реле  ///////////////////////////////
    if(temperature < inputMessage.toFloat()){
       digitalWrite(output, LOW);
       Serial.println("Relay ON");}
/////////////////////////////////////////////////////////////////////////////////////      

////////////////////////////////////  Выключение реле  //////////////////////////////
    else if(temperature > inputMessage.toFloat()) {
       digitalWrite(output, HIGH);
       Serial.println("Relay OFF");}
/////////////////////////////////////////////////////////////////////////////////////
  }
}
 

esp340

Active member
Нужно настроить терморегулятор на нагрев. Например
"температура включения" = 76.5c
"температура отключения" = 78.0с

или

"температура включения" = 76.5c
"гистерезис" =1.5с
Код:
 ////////////////////////////////////  Выключение реле  //////////////////////////////
 else if(temperature > inputMessage.toFloat()+гистерезис) {
 

goya4

New member
Спасибо esp340, но не совсем понятно, как это реализовать через веб-интерфейс.
Может есть схема простого термостата, для обычного нагревателя, который греет до достижения T уставки и выключает нагреватель, с гистерезисом, заданным константой. В веб-меню должна быть прописана установка и текущая температура, кнопки плюс и минус с шагом в один градус.
 

esp340

Active member
В веб-меню должна быть прописана установка и текущая температура, кнопки плюс и минус с шагом в один градус.
В таком случае это называется не " ... разобраться в скетче терморегулятора", а написать все с нуля. Открываете умные книжки, читаете, смотрите примеры и пишете код. Если что-то не будет получаться - обращаетесь на форум за советами. Или идете в платный раздел где вам, возможно, кто-то согласится за вознаграждение написать код.
 

goya4

New member
Уважаемый esp340. Во первых, мне действительно непонятен этот скетч с его веб интерфейсом. Во вторых, если не удастся его запустить в нужном режиме, то, возможно у кого на примете есть другая схема ну очень простого терморегулятора. Схем данных девайсов (бесплатно!) в инете полно, но они для меня имеют избыточный функционал. Мне не нужна куча таймеров, mqtt и т.п. Просто Вкл. и Выкл. по заданной температуре.
 

esp340

Active member
схема ну очень простого терморегулятора. Просто Вкл. и Выкл. по заданной температуре.
Ну так а чем этот не подходит? Задали через web-панель температуру включения, температура выключения автоматом рассчитается по заданному в скетче гистерезису. Проще по-моему некуда.
 

Ф.И.О.

New member
Есть хороший урок для управления через вэб. страницу. Я на него опирался тыц... Только немного доработал под свои нужды. В оригинале порог включения-отключения один. У меня на включение один порог, на отключение другой порог. То есть их 2.
 

Ф.И.О.

New member
Можно еще тут мосмотреть. Это я перенес на SPIFFS, заменил термодатчик, сделал русские коментарии.
 
Сверху Снизу