Переделал работу с температурой на датчик DS18B20. Добавил сохранение и загрузку настроек
This commit is contained in:
+59
-28
@@ -1,7 +1,12 @@
|
|||||||
|
#include <OneWire.h>
|
||||||
|
#include <DallasTemperature.h>
|
||||||
#include <ESP8266WiFi.h>
|
#include <ESP8266WiFi.h>
|
||||||
#include <ModbusIP_ESP8266.h>
|
#include <ModbusIP_ESP8266.h>
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "LittleFS.h"
|
||||||
|
|
||||||
|
#define RELAY_PIN D2
|
||||||
|
#define TEMP_SENSOR_PIN D5
|
||||||
// network
|
// network
|
||||||
// After how much time without connection we will
|
// After how much time without connection we will
|
||||||
// reboot (in millis)
|
// reboot (in millis)
|
||||||
@@ -15,7 +20,7 @@ IPAddress subnet(MY_NET);
|
|||||||
// modbus consts and works
|
// modbus consts and works
|
||||||
#define TCP_PORT 15000
|
#define TCP_PORT 15000
|
||||||
#define POLL_INTERVAL 10000
|
#define POLL_INTERVAL 10000
|
||||||
#define T_UPDATE_INTERVAL 500
|
#define T_UPDATE_INTERVAL 2000
|
||||||
|
|
||||||
#define MODE_AUTO 0
|
#define MODE_AUTO 0
|
||||||
#define MODE_MANUAL 1
|
#define MODE_MANUAL 1
|
||||||
@@ -28,6 +33,8 @@ IPAddress subnet(MY_NET);
|
|||||||
#define REGISTER_SECONDARY_TEMP 5
|
#define REGISTER_SECONDARY_TEMP 5
|
||||||
|
|
||||||
ModbusIP mb;
|
ModbusIP mb;
|
||||||
|
OneWire oneWire(TEMP_SENSOR_PIN);
|
||||||
|
DallasTemperature sensor(&oneWire);
|
||||||
|
|
||||||
char id[64];
|
char id[64];
|
||||||
|
|
||||||
@@ -40,9 +47,51 @@ int cur_mode = MODE_AUTO;
|
|||||||
int cur_t = 0;
|
int cur_t = 0;
|
||||||
int cur_state = 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()
|
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.begin(115200);
|
||||||
Serial.println("Initialised...");
|
Serial.println("Initialised...");
|
||||||
|
|
||||||
@@ -67,35 +116,15 @@ void setup()
|
|||||||
mb.addHreg(REGISTER_CUR_TEMP, cur_t);
|
mb.addHreg(REGISTER_CUR_TEMP, cur_t);
|
||||||
mb.addHreg(REGISTER_CUR_STATE, cur_state);
|
mb.addHreg(REGISTER_CUR_STATE, cur_state);
|
||||||
mb.addHreg(REGISTER_SECONDARY_TEMP, cur_t);
|
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()
|
void UpdateCurrent()
|
||||||
{
|
{
|
||||||
float average = 0;
|
cur_t = int(sensor.getTempCByIndex(0) * 100);
|
||||||
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);
|
|
||||||
last_update = millis();
|
last_update = millis();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,9 +154,10 @@ void loop()
|
|||||||
{
|
{
|
||||||
cur_state = mb.Hreg(REGISTER_CUR_STATE);
|
cur_state = mb.Hreg(REGISTER_CUR_STATE);
|
||||||
}
|
}
|
||||||
digitalWrite(D2, cur_state);
|
digitalWrite(RELAY_PIN, cur_state);
|
||||||
if (u)
|
if (u)
|
||||||
{
|
{
|
||||||
|
SaveState();
|
||||||
Serial.println("Cur state");
|
Serial.println("Cur state");
|
||||||
Serial.println(cur_state);
|
Serial.println(cur_state);
|
||||||
Serial.println(cur_t);
|
Serial.println(cur_t);
|
||||||
@@ -151,6 +181,7 @@ void loop()
|
|||||||
}
|
}
|
||||||
if (current < last_connected || current - last_connected > NON_CONNECTED_REBOOT_TIMEOUT)
|
if (current < last_connected || current - last_connected > NON_CONNECTED_REBOOT_TIMEOUT)
|
||||||
{
|
{
|
||||||
|
SaveState();
|
||||||
ESP.restart();
|
ESP.restart();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user