Схема и скетч взяты отсюда. Нужно настроить терморегулятор на нагрев. Например
"температура включения" = 76.5c
"температура отключения" = 78.0с
или
"температура включения" = 76.5c
"гистерезис" =1.5с
Автор молчит
код:
"температура включения" = 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% °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");}
/////////////////////////////////////////////////////////////////////////////////////
}
}