From 1186fc9f8c6f1554ca4e6f9b51946c71893cd21d Mon Sep 17 00:00:00 2001 From: Denis Denisov Date: Sat, 14 Dec 2024 09:32:48 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BB=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=83=20=D1=81=20?= =?UTF-8?q?=D1=82=D0=B5=D0=BC=D0=BF=D0=B5=D1=80=D0=B0=D1=82=D1=83=D1=80?= =?UTF-8?q?=D0=BE=D0=B9=20=D0=BD=D0=B0=20=D0=B4=D0=B0=D1=82=D1=87=D0=B8?= =?UTF-8?q?=D0=BA=20DS18B20.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=B8=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D1=83=20?= =?UTF-8?q?=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- defrost_v3.ino | 87 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 59 insertions(+), 28 deletions(-) diff --git a/defrost_v3.ino b/defrost_v3.ino index 2a7f178..8d77d3e 100644 --- a/defrost_v3.ino +++ b/defrost_v3.ino @@ -1,7 +1,12 @@ +#include +#include #include #include #include "config.h" +#include "LittleFS.h" +#define RELAY_PIN D2 +#define TEMP_SENSOR_PIN D5 // network // After how much time without connection we will // reboot (in millis) @@ -15,7 +20,7 @@ IPAddress subnet(MY_NET); // modbus consts and works #define TCP_PORT 15000 #define POLL_INTERVAL 10000 -#define T_UPDATE_INTERVAL 500 +#define T_UPDATE_INTERVAL 2000 #define MODE_AUTO 0 #define MODE_MANUAL 1 @@ -28,6 +33,8 @@ IPAddress subnet(MY_NET); #define REGISTER_SECONDARY_TEMP 5 ModbusIP mb; +OneWire oneWire(TEMP_SENSOR_PIN); +DallasTemperature sensor(&oneWire); char id[64]; @@ -40,9 +47,51 @@ int cur_mode = MODE_AUTO; int cur_t = 0; int cur_state = 0; +bool TryLoad(char *filename) +{ + File f = LittleFS.open(filename, "r"); + if (!f) return false; + String s = f.readStringUntil('\n'); + t_on = atoi(s.c_str()); + s = f.readStringUntil('\n'); + t_off = atoi(s.c_str()); + f.close(); + if (t_on == 0) return false; + return true; +} + +void LoadState() +{ + if (TryLoad("/settings.txt")) return; + TryLoad("/settings.txt.bak"); +} + +void SaveTo(char *filename) +{ + File f = LittleFS.open(filename, "w"); + if (!f) return; + f.println(t_on); + f.println(t_off); + f.close(); +} + +void SaveState() +{ + SaveTo("/settings.txt"); + SaveTo("/settings.txt.bak"); +} + + void setup() { - pinMode(D2, OUTPUT); + if (!LittleFS.begin()) + { + Serial.println("Unable to mount the filesystem"); + ESP.restart(); + } + LoadState(); + pinMode(RELAY_PIN, OUTPUT); + pinMode(TEMP_SENSOR_PIN, INPUT); Serial.begin(115200); Serial.println("Initialised..."); @@ -67,35 +116,15 @@ void setup() mb.addHreg(REGISTER_CUR_TEMP, cur_t); mb.addHreg(REGISTER_CUR_STATE, cur_state); mb.addHreg(REGISTER_SECONDARY_TEMP, cur_t); + // + sensor.begin(); + sensor.setResolution(12); + sensor.requestTemperatures(); } -// thermistor -#define THERMISTORPIN A0 -#define THERMISTORNOMINAL 10000 -#define TEMPERATURENOMINAL 25 -#define NUMSAMPLES 5 -#define BCOEFFICIENT 3950 -#define SERIESRESISTOR 10000 - void UpdateCurrent() { - float average = 0; - for (int i = 0; i < NUMSAMPLES; i++) - { - average += analogRead(THERMISTORPIN); - delay(10); - } - average /= NUMSAMPLES; - average = 1023 / average - 1; - average = SERIESRESISTOR / average; - float steinhart; - steinhart = average / THERMISTORNOMINAL; // (R/Ro) - steinhart = log(steinhart); // ln(R/Ro) - steinhart /= BCOEFFICIENT; // 1/B * ln(R/Ro) - steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To) - steinhart = 1.0 / steinhart; // инвертируем - steinhart -= 273.15; // конвертируем в градусы по Цельсию - cur_t = int(steinhart * 100); + cur_t = int(sensor.getTempCByIndex(0) * 100); last_update = millis(); } @@ -125,9 +154,10 @@ void loop() { cur_state = mb.Hreg(REGISTER_CUR_STATE); } - digitalWrite(D2, cur_state); + digitalWrite(RELAY_PIN, cur_state); if (u) { + SaveState(); Serial.println("Cur state"); Serial.println(cur_state); Serial.println(cur_t); @@ -151,6 +181,7 @@ void loop() } if (current < last_connected || current - last_connected > NON_CONNECTED_REBOOT_TIMEOUT) { + SaveState(); ESP.restart(); } }