Добавил периоды, перешел на esp32

main
Bill1389 1 year ago
parent 93f7745a88
commit 31b9ba52fb

@ -8,12 +8,14 @@
; Please visit documentation for the other options and examples ; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html ; https://docs.platformio.org/page/projectconf.html
[env:esp12e] ;[env:esp12e]
platform = espressif8266 ;platform = espressif8266
board = esp12e ;board = esp12e
;framework = arduino
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino framework = arduino
;[env:esp32dev] board_build.partitions = no_ota.csv
;platform = espressif32
;board = esp32dev
;framework = arduino

@ -1,4 +1,4 @@
#include <ESP8266WiFi.h> #include <WiFi.h>
#include <NTPClient.h> #include <NTPClient.h>
#include <WiFiUdp.h> #include <WiFiUdp.h>
#include <EEPROM.h> #include <EEPROM.h>
@ -15,10 +15,10 @@ GyverHub hub("MyDevices", "ESP", "");
WiFiUDP ntpUDP; WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org"); NTPClient timeClient(ntpUDP, "pool.ntp.org");
const int ledPin = D4; // Указывайте пин, на котором подключен светодиод #define LED_PIN 2 // Указывайте пин, на котором подключен светодиод
const int fanRelay = D3; // Указывайте пин, на котором подключен светодиод #define FAN_RELAY 22 // Указывайте пин, на котором подключен светодиод
#define DHTPIN 4 // пин (D2) подключения контакта DATA #define DHTPIN 23 // пин (D2) подключения контакта DATA
#define DHTTYPE DHT22 // датчик DHT 22 #define DHTTYPE DHT22 // датчик DHT 22
#define INTERVAL_GET_DATA 2000 // интервала измерений, мс #define INTERVAL_GET_DATA 2000 // интервала измерений, мс
// создание экземпляра объекта DHT // создание экземпляра объекта DHT
@ -26,6 +26,75 @@ DHT dht(DHTPIN, DHTTYPE);
// переменная для интервала измерений // переменная для интервала измерений
unsigned long millis_int1=0; unsigned long millis_int1=0;
int switchLightState;
int switchLightStateOld;
int currentTimeSec;
int startTime;
int stopTime;
int startTimeOld;
int stopTimeOld;
int setHumidity;
int setTemp;
int setHumidityOld;
int setTempOld;
int currentHumidity;
float currentTemp;
bool lampRelayState = 0; // Реле освещения
bool fanCoolingRelayState = 0; // Реле вентилятора отопления
bool fanCirculationRelayState = 0; // Реле вентилятора циркуляции воздуха
bool fanOutdoorAirRelayState = 0; // Реле вентилятора вытяжки
bool waterPumpRelayState = 0; // Реле циркуляционного насоса
bool TENRelayState = 0; // Реле ТЭНа
bool fitoLampRelayState = 0; // Реле фитоламп
bool bit7 = 0; // резерв
// для работы периодов
int statePeriodLamp;
int minutePeriodLamp;
int minuteOnPeriodLamp;
int statePeriodFanCooling;
int minutePeriodFanCooling;
int minuteOnPeriodFanCooling;
int statePeriodFanCirculation;
int minutePeriodFanCirculation;
int minuteOnPeriodFanCirculation;
int statePeriodFanOutdoorAir;
int minutePeriodFanOutdoorAir;
int minuteOnPeriodFanOutdoorAir;
int statePeriodWaterPump;
int minutePeriodWaterPump;
int minuteOnPeriodWaterPump;
int statePeriodTEN;
int minutePeriodTEN;
int minuteOnPeriodTEN;
int statePeriodFitoLamp;
int minutePeriodFitoLamp;
int minuteOnPeriodFitoLamp;
int statePeriod_Reserv;
int minutePeriod_Reserv;
int minuteOnPeriod_Reserv;
bool statusTest = 0;
char currentTime[10]; // Выделение памяти под строку
gh::Log hlog;
void writeIntToEEPROM(int address, int value) void writeIntToEEPROM(int address, int value)
{ {
@ -44,22 +113,6 @@ int readIntFromEEPROM(int address)
return value; return value;
} }
int switchLightState;
int switchLightStateOld;
int currentTimeSec;
int startTime;
int stopTime;
int startTimeOld;
int stopTimeOld;
int setHumidity;
int setTemp;
int setHumidityOld;
int setTempOld;
int currentHumidity;
float currentTemp;
char currentTime[10]; // Выделение памяти под строку
void checkLight() void checkLight()
{ {
@ -97,25 +150,25 @@ void checkLight()
switch (switchLightState) switch (switchLightState)
{ {
case 0: case 0:
digitalWrite(ledPin, LOW); // Включаем светодиод digitalWrite(LED_PIN, LOW); // Включаем светодиод
break; break;
case 1: case 1:
digitalWrite(ledPin, HIGH); // Выключаем светодиод digitalWrite(LED_PIN, HIGH); // Выключаем светодиод
break; break;
case 2: case 2:
//if (((currentHour >= startHours) and (currentMinute >= startMinutes)) and ((currentHour <= stopHours) and (currentMinute < stopMinutes))) //if (((currentHour >= startHours) and (currentMinute >= startMinutes)) and ((currentHour <= stopHours) and (currentMinute < stopMinutes)))
if((startTime <= currentTimeSec) and ( currentTimeSec <= stopTime)) if((startTime <= currentTimeSec) and ( currentTimeSec <= stopTime))
{ {
digitalWrite(ledPin, LOW); // Включаем светодиод digitalWrite(LED_PIN, LOW); // Включаем светодиод
} }
else else
{ {
digitalWrite(ledPin, HIGH); // Выключаем светодиод digitalWrite(LED_PIN, HIGH); // Выключаем светодиод
} }
break; break;
default: default:
digitalWrite(ledPin, HIGH); // Выключаем светодиод digitalWrite(LED_PIN, HIGH); // Выключаем светодиод
break; break;
} }
} }
@ -129,6 +182,7 @@ float get_data_temperature() {
float h = dht.readTemperature(); float h = dht.readTemperature();
return h; return h;
} }
void manageClimate() void manageClimate()
{ {
currentHumidity = get_data_humidity(); currentHumidity = get_data_humidity();
@ -149,28 +203,24 @@ void manageClimate()
if(currentTemp < setTemp) if(currentTemp < setTemp)
{ {
digitalWrite(fanRelay, LOW); // Включаем светодиод digitalWrite(FAN_RELAY, LOW); // Включаем светодиод
} else { } else {
digitalWrite(fanRelay, HIGH); // Выключаем светодиод digitalWrite(FAN_RELAY, HIGH); // Выключаем светодиод
} }
}
// обработчик кнопки (см. ниже)
void btn_cb()
{
Serial.println("click 4");
} }
// обработчик кнопки с информацией о билде (см. ниже)
void btn_cb_b(gh::Build &b)
{
Serial.print("click 5 from client ID: ");
Serial.println(b.client.id);
}
void build(gh::Builder &b)
void build_main(gh::Builder &b)
{ {
b.Title_(F("title1")).value("Освещение"); b.Title_(F("title1")).value("Освещение");
@ -206,6 +256,153 @@ void build(gh::Builder &b)
} }
void build_period(gh::Builder &b)
{
b.Title_(F("title3")).value("Освещение");
if (b.beginRow())
{
b.Switch(&statePeriodLamp).label("Активировать").size(1);
b.Input(&minutePeriodLamp).label("Каждые __ минут");
b.Input(&minuteOnPeriodLamp).label("включить на __ минут");
b.endRow();
}
b.Title_(F("title4")).value("Вентилятор отопления");
if (b.beginRow())
{
b.Switch(&statePeriodFanCooling).label("Активировать").size(1);
b.Input(&minutePeriodFanCooling).label("Каждые __ минут");
b.Input(&minuteOnPeriodFanCooling).label("включить на __ минут");
b.endRow();
}
b.Title_(F("title5")).value("Вентилятор циркуляции");
if (b.beginRow())
{
b.Switch(&statePeriodFanCirculation).label("Активировать").size(1);
b.Input(&minutePeriodFanCirculation).label("Каждые __ минут");
b.Input(&minuteOnPeriodFanCirculation).label("включить на __ минут");
b.endRow();
}
b.Title_(F("title6")).value("Вентиляция");
if (b.beginRow())
{
b.Switch(&statePeriodFanOutdoorAir).label("Активировать").size(1);
b.Input(&minutePeriodFanOutdoorAir).label("Каждые __ минут");
b.Input(&minuteOnPeriodFanOutdoorAir).label("включить на __ минут");
b.endRow();
}
b.Title_(F("title7")).value("Насос котла");
if (b.beginRow())
{
b.Switch(&statePeriodWaterPump).label("Активировать").size(1);
b.Input(&minutePeriodWaterPump).label("Каждые __ минут");
b.Input(&minuteOnPeriodWaterPump).label("включить на __ минут");
b.endRow();
}
b.Title_(F("title8")).value("ТЭН");
if (b.beginRow())
{
b.Switch(&statePeriodTEN).label("Активировать").size(1);
b.Input(&minutePeriodTEN).label("Каждые __ минут");
b.Input(&minuteOnPeriodTEN).label("включить на __ минут");
b.endRow();
}
b.Title_(F("title9")).value("Фитолампы");
if (b.beginRow())
{
b.Switch(&statePeriodFitoLamp).label("Активировать").size(1);
b.Input(&minutePeriodFitoLamp).label("Каждые __ минут");
b.Input(&minuteOnPeriodFitoLamp).label("включить на __ минут");
b.endRow();
}
if (b.Button().label("Сохранить изменения").size(3).click()){
writeIntToEEPROM(5 * sizeof(int), statePeriodLamp);
writeIntToEEPROM(6 * sizeof(int), minutePeriodLamp);
writeIntToEEPROM(7 * sizeof(int), minuteOnPeriodLamp);
writeIntToEEPROM(8 * sizeof(int), statePeriodFanCooling);
writeIntToEEPROM(9 * sizeof(int), minutePeriodFanCooling);
writeIntToEEPROM(10 * sizeof(int), minuteOnPeriodFanCooling);
writeIntToEEPROM(11 * sizeof(int), statePeriodFanCirculation);
writeIntToEEPROM(12 * sizeof(int), minutePeriodFanCirculation);
writeIntToEEPROM(13 * sizeof(int), minuteOnPeriodFanCirculation);
writeIntToEEPROM(14 * sizeof(int), statePeriodFanOutdoorAir);
writeIntToEEPROM(15 * sizeof(int), minutePeriodFanOutdoorAir);
writeIntToEEPROM(16 * sizeof(int), minuteOnPeriodFanOutdoorAir);
writeIntToEEPROM(17 * sizeof(int), statePeriodWaterPump);
writeIntToEEPROM(18 * sizeof(int), minutePeriodWaterPump);
writeIntToEEPROM(19 * sizeof(int), minuteOnPeriodWaterPump);
writeIntToEEPROM(20 * sizeof(int), statePeriodTEN);
writeIntToEEPROM(21 * sizeof(int), minutePeriodTEN);
writeIntToEEPROM(22 * sizeof(int), minuteOnPeriodTEN);
writeIntToEEPROM(23 * sizeof(int), statePeriodFitoLamp);
writeIntToEEPROM(24 * sizeof(int), minutePeriodFitoLamp);
writeIntToEEPROM(25 * sizeof(int), minuteOnPeriodFitoLamp);
writeIntToEEPROM(26 * sizeof(int), statePeriod_Reserv);
writeIntToEEPROM(27 * sizeof(int), minutePeriod_Reserv);
writeIntToEEPROM(28 * sizeof(int), minuteOnPeriod_Reserv);
}
}
void build(gh::Builder& b) {
if (b.build.isSet()) hlog.println(b.build.name);
b.Menu(F("Главная;Периоды"));
switch (hub.menu) {
case 0:
build_main(b);
break;
case 1:
build_period(b);
break;
}
}
void periodLight() {
//Serial.println(statePeriodLamp);
if(statePeriodLamp == 1){
Serial.println(statePeriodLamp);
static gh::Timer tmrLampStart(minutePeriodLamp * 60000); // период минут
if (tmrLampStart)
{
static gh::Timer tmrLampStop(minuteOnPeriodLamp * 60000); // период минут
statusTest = !statusTest;
}
if(statusTest == 1){
Serial.println("ON");
} else {
Serial.println("OFF");
}
}
}
void codingStateReley(){
// Кодируем 8 битов в одно число
uint8_t encodedNumber = (bit7 << 7) | (fitoLampRelayState << 6) | (TENRelayState << 5) | (waterPumpRelayState << 4) |
(fanOutdoorAirRelayState << 3) | (fanCirculationRelayState << 2) | (fanCoolingRelayState << 1) | lampRelayState;
}
void setup() void setup()
{ {
Serial.begin(9600); Serial.begin(9600);
@ -218,6 +415,36 @@ void setup()
setTemp = readIntFromEEPROM(3 * sizeof(int)); setTemp = readIntFromEEPROM(3 * sizeof(int));
setHumidity = readIntFromEEPROM(4 * sizeof(int)); setHumidity = readIntFromEEPROM(4 * sizeof(int));
// для работы периодов
statePeriodLamp = readIntFromEEPROM(5 * sizeof(int));
minutePeriodLamp = readIntFromEEPROM(6 * sizeof(int));
minuteOnPeriodLamp = readIntFromEEPROM(7 * sizeof(int));
statePeriodFanCooling = readIntFromEEPROM(8 * sizeof(int));
minutePeriodFanCooling = readIntFromEEPROM(9 * sizeof(int));
minuteOnPeriodFanCooling = readIntFromEEPROM(10 * sizeof(int));
statePeriodFanCirculation = readIntFromEEPROM(11 * sizeof(int));
minutePeriodFanCirculation = readIntFromEEPROM(12 * sizeof(int));
minuteOnPeriodFanCirculation = readIntFromEEPROM(13 * sizeof(int));
statePeriodFanOutdoorAir = readIntFromEEPROM(14 * sizeof(int));
minutePeriodFanOutdoorAir = readIntFromEEPROM(15 * sizeof(int));
minuteOnPeriodFanOutdoorAir = readIntFromEEPROM(16 * sizeof(int));
statePeriodWaterPump = readIntFromEEPROM(17 * sizeof(int));
minutePeriodWaterPump = readIntFromEEPROM(18 * sizeof(int));
minuteOnPeriodWaterPump = readIntFromEEPROM(19 * sizeof(int));
statePeriodTEN = readIntFromEEPROM(20 * sizeof(int));
minutePeriodTEN = readIntFromEEPROM(21 * sizeof(int));
minuteOnPeriodTEN = readIntFromEEPROM(22 * sizeof(int));
statePeriodFitoLamp = readIntFromEEPROM(23 * sizeof(int));
minutePeriodFitoLamp = readIntFromEEPROM(24 * sizeof(int));
minuteOnPeriodFitoLamp = readIntFromEEPROM(25 * sizeof(int));
statePeriod_Reserv = readIntFromEEPROM(26 * sizeof(int));
minutePeriod_Reserv = readIntFromEEPROM(27 * sizeof(int));
minuteOnPeriod_Reserv = readIntFromEEPROM(28 * sizeof(int));
// Подключение к WiFi // Подключение к WiFi
WiFi.begin(ssid, password); WiFi.begin(ssid, password);
@ -229,8 +456,8 @@ void setup()
Serial.println("Connected to WiFi"); Serial.println("Connected to WiFi");
// Инициализация светодиода // Инициализация светодиода
pinMode(ledPin, OUTPUT); pinMode(LED_PIN, OUTPUT);
pinMode(fanRelay, OUTPUT); pinMode(FAN_RELAY, OUTPUT);
// Настройка NTP // Настройка NTP
timeClient.begin(); timeClient.begin();
@ -251,6 +478,8 @@ void loop()
hub.tick(); hub.tick();
static gh::Timer tmr(1000); // период 1 секунда static gh::Timer tmr(1000); // период 1 секунда
// каждую секунду будем обновлять заголовок // каждую секунду будем обновлять заголовок
if (tmr) if (tmr)

Loading…
Cancel
Save