#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
#include <TM1637Display.h>

// Настройки Wi-Fi
const char* ssid = "Mesto_Chistoty";
const char* password = "Mesto13092022";

// Настройки дисплея TM1637

   #define CLK 14 // GPIO14
   #define DIO 12 // GPIO12

 

TM1637Display display(CLK, DIO);

// Настройки NTP клиента
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 0, 60000); // Обновление каждые 60 секунд

// Настройки веб-сервера
ESP8266WebServer server(80);

// Переменные для будильника
int alarmHour = -1;
int alarmMinute = -1;
bool alarmSet = false;

void setup() {
  Serial.begin(115200);

  // Инициализация дисплея
  display.setBrightness(0x0f);

  // Подключение к Wi-Fi
  WiFi.begin(ssid, password);
  Serial.print("Подключение к Wi-Fi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println(" Подключено!");
  Serial.print("IP адрес: ");
  Serial.println(WiFi.localIP());

  // Запуск NTP клиента
  timeClient.begin();

  // Настройка веб-сервера
  server.on("/", handleRoot);
  server.on("/setTime", handleSetTime);
  server.on("/setAlarm", handleSetAlarm);
  server.begin();
  Serial.println("Веб-сервер запущен");
}

void loop() {
  timeClient.update();
  server.handleClient();

  // Получение текущего времени
  unsigned long epochTime = timeClient.getEpochTime();
  int currentHour = timeClient.getHours();
  int currentMinute = timeClient.getMinutes();

  // Отображение времени на дисплее
  int displayTime = currentHour * 100 + currentMinute;
  display.showNumberDecEx(displayTime, 0b01000000, true);

  // Проверка будильника
  if (alarmSet && currentHour == alarmHour && currentMinute == alarmMinute) {
    triggerAlarm();
  }

  delay(1000);
}

void handleRoot() {
  String html = "<html><br/>  <head><br/>    <title>Онлайн-часы</title><br/>    <meta charset='UTF-8'><br/>  </head><br/>  <body><br/>    <h2>Настройка времени</h2><br/>    <form action='/setTime' method='POST'><br/>      Часовой пояс (UTC): <input type='number' name='offset' min='-12' max='14' required><br><br/>      <input type='submit' value='Установить время'><br/>    </form><br/>    <h2>Настройка будильника</h2><br/>    <form action='/setAlarm' method='POST'><br/>      Часы: <input type='number' name='hour' min='0' max='23' required><br><br/>      Минуты: <input type='number' name='minute' min='0' max='59' required><br><br/>      <input type='submit' value='Установить будильник'><br/>    </form><br/>  </body><br/>  </html>";
  server.send(200, "text/html", html);
}

void handleSetTime() {
  if (server.hasArg("offset")) {
    int offset = server.arg("offset").toInt() * 3600; // Перевод часового пояса в секунды
    timeClient.setTimeOffset(offset);
    server.send(200, "text/html", "<html><body><h3>Часовой пояс установлен!</h3><a href='/'>Назад</a></body></html>");
  } else {
    server.send(400, "text/plain", "Параметр 'offset' не найден");
  }
}

void handleSetAlarm() {
  if (server.hasArg("hour") && server.hasArg("minute")) {
    alarmHour = server.arg("hour").toInt();
    alarmMinute = server.arg("minute").toInt();
    alarmSet = true;
    server.send(200, "text/html", "<html><body><h3>Будильник установлен!</h3><a href='/'>Назад</a></body></html>");
  } else {
    server.send(400, "text/plain", "Параметры 'hour' и 'minute' не найдены");
  }
}

void triggerAlarm() {
  // Реализация будильника (например, звуковой сигнал или мигание светодиода)
  Serial.println("Будильник сработал!");
  // Сброс будильника после срабатывания
  alarmSet = false;
}
добавь отображение времени на сервере