Период
parent
31b9ba52fb
commit
5d8283387e
@ -0,0 +1,165 @@
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <NTPClient.h>
|
||||
#include <WiFiUdp.h>
|
||||
#include <EEPROM.h>
|
||||
|
||||
const char *ssid = "Bill1389";
|
||||
const char *password = "B4cvxw43bt";
|
||||
|
||||
#define GH_INCLUDE_PORTAL
|
||||
#include <GyverHub.h>
|
||||
GyverHub hub("MyDevices", "ESP", "");
|
||||
|
||||
WiFiUDP ntpUDP;
|
||||
NTPClient timeClient(ntpUDP, "pool.ntp.org");
|
||||
|
||||
const int ledPin = D4; // Указывайте пин, на котором подключен светодиод
|
||||
|
||||
void writeIntToEEPROM(int address, int value)
|
||||
{
|
||||
// EEPROM.begin(sizeof(value));
|
||||
EEPROM.put(address, value);
|
||||
EEPROM.commit();
|
||||
// EEPROM.end();
|
||||
}
|
||||
|
||||
int readIntFromEEPROM(int address)
|
||||
{
|
||||
int value;
|
||||
// EEPROM.begin(sizeof(value));
|
||||
EEPROM.get(address, value);
|
||||
// EEPROM.end();
|
||||
return value;
|
||||
}
|
||||
|
||||
int switchLightState;
|
||||
int switchLightStateOld;
|
||||
int currentTimeSec;
|
||||
int startTime;
|
||||
int stopTime;
|
||||
int startTimeOld;
|
||||
int stopTimeOld;
|
||||
|
||||
char currentTime[10]; // Выделение памяти под строку
|
||||
|
||||
void checkLight()
|
||||
{
|
||||
// Получаем текущее время
|
||||
int currentHour = timeClient.getHours() + 3;
|
||||
int currentMinute = timeClient.getMinutes();
|
||||
int currentSeconds = timeClient.getSeconds();
|
||||
|
||||
if (startTimeOld != startTime)
|
||||
{
|
||||
writeIntToEEPROM(sizeof(int), startTime);
|
||||
startTimeOld = startTime;
|
||||
}
|
||||
|
||||
if (stopTimeOld != stopTime)
|
||||
{
|
||||
|
||||
writeIntToEEPROM(2 * sizeof(int), stopTime);
|
||||
stopTimeOld = stopTime;
|
||||
}
|
||||
|
||||
snprintf(currentTime, sizeof(currentTime), "%02d:%02d", currentHour, currentMinute);
|
||||
currentTimeSec = currentHour * 3600 + currentMinute * 60 + currentSeconds;
|
||||
|
||||
// Проверяем условие освещения
|
||||
|
||||
if (switchLightState != switchLightStateOld)
|
||||
{
|
||||
writeIntToEEPROM(0, switchLightState);
|
||||
switchLightStateOld = switchLightState;
|
||||
}
|
||||
|
||||
switch (switchLightState)
|
||||
{
|
||||
case 0:
|
||||
digitalWrite(ledPin, LOW); // Включаем светодиод
|
||||
break;
|
||||
case 1:
|
||||
digitalWrite(ledPin, HIGH); // Выключаем светодиод
|
||||
break;
|
||||
case 2:
|
||||
if((startTime <= currentTimeSec) and ( currentTimeSec <= stopTime))
|
||||
{
|
||||
digitalWrite(ledPin, LOW); // Включаем светодиод
|
||||
}
|
||||
else
|
||||
{
|
||||
digitalWrite(ledPin, HIGH); // Выключаем светодиод
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
digitalWrite(ledPin, HIGH); // Выключаем светодиод
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void build(gh::Builder &b)
|
||||
{
|
||||
|
||||
b.Title_(F("title1")).value("Освещение");
|
||||
if (b.beginRow())
|
||||
{
|
||||
b.Time_("startTime", &startTime).label("Время включения").size(2);
|
||||
b.Label_(F("currentTime")).label("Текущее время").color(0xd55f30).size(2);
|
||||
|
||||
b.Time_("stopTime", &stopTime).label("Время отключения").size(2);
|
||||
b.endRow();
|
||||
}
|
||||
|
||||
{
|
||||
gh::Row r(b);
|
||||
b.Tabs_("tab", &switchLightState).text("Включить;Выключить;По таймеру").label("Выключатель света").size(3);
|
||||
}
|
||||
}
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(10400);
|
||||
EEPROM.begin(128);
|
||||
|
||||
switchLightState = readIntFromEEPROM(0);
|
||||
startTime = readIntFromEEPROM(sizeof(int));
|
||||
stopTime = readIntFromEEPROM(2 * sizeof(int));
|
||||
|
||||
// Подключение к WiFi
|
||||
WiFi.begin(ssid, password);
|
||||
while (WiFi.status() != WL_CONNECTED)
|
||||
{
|
||||
delay(1000);
|
||||
Serial.println("Connecting to WiFi...");
|
||||
}
|
||||
Serial.println("Connected to WiFi");
|
||||
|
||||
// Инициализация светодиода
|
||||
pinMode(ledPin, OUTPUT);
|
||||
|
||||
// Настройка NTP
|
||||
timeClient.begin();
|
||||
hub.mqtt.config(IPAddress(95, 30, 222, 200), 1883);
|
||||
hub.config(F("MyDevices"), F("ESP"), F(""));
|
||||
// подключить билдер
|
||||
hub.onBuild(build);
|
||||
|
||||
// запуск!
|
||||
hub.begin();
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
timeClient.update(); // Обновляем время
|
||||
checkLight();
|
||||
hub.tick();
|
||||
static gh::Timer tmr(1000); // период 1 секунда
|
||||
|
||||
if (tmr)
|
||||
{
|
||||
|
||||
hub.update(F("currentTime")).value(String(currentTime));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue