#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
#include <ESP8266WebServer.h>
#include <math.h>

// Параметры дисплея
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// Пины
#define BUZZER_PIN 14

// Данные для подключения к Wi-Fi по умолчанию
String ssid = "Mesto_Chistoty";
String password = "Mesto13092022";

// Настройка NTP-клиента
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 3600 * 3, 60000);

// Веб-сервер
ESP8266WebServer server(80);

// Время будильника
String alarmTime = "--:--";
bool alarmActivated = false;

// Контроль времени для отображения IP
unsigned long displayStart;
bool showDate = false;

// Инициализация точки доступа
void setupAccessPoint() {
    Serial.println("Переход в режим точки доступа...");
    WiFi.softAP("ESP_CLOCK", "12345678");

    display.clearDisplay();
    display.setCursor(0, 10);
    display.println("AP Mode Active!");
    display.setCursor(0, 20);
    display.print("SSID: ESP_CLOCK");
    display.display();

    server.on("/", []() {
        String html = "<html><head><title>Настройка WiFi</title></head><body>";
        html += "<h1>Настройка WiFi</h1>";
        html += "<form action=\"/save\" method=\"GET\">";
        html += "SSID: <input type=\"text\" name=\"ssid\"><br>";
        html += "Пароль: <input type=\"password\" name=\"password\"><br>";
        html += "<input type=\"submit\" value=\"Сохранить\">";
        html += "</form>";
        html += "</body></html>";
        server.send(200, "text/html", html);
    });

    server.on("/save", []() {
        if (server.hasArg("ssid") && server.hasArg("password")) {
            ssid = server.arg("ssid");
            password = server.arg("password");
            server.send(200, "text/html", "<html><body><h1>Настройки сохранены. Перезагрузка...</h1></body></html>");
            delay(1000);
            ESP.restart();
        } else {
            server.send(200, "text/html", "<html><body><h1>Ошибка. Введите SSID и пароль.</h1></body></html>");
        }
    });

    server.begin();
    Serial.println("Сервер запущен в режиме AP");
}

void setup() {
    Serial.begin(115200);
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
    display.setTextSize(1);
    display.setTextColor(SSD1306_WHITE);

    pinMode(BUZZER_PIN, OUTPUT);
    digitalWrite(BUZZER_PIN, LOW);

    display.clearDisplay();
    display.setCursor(0, 10);
    display.println("Подключение к WiFi...");
    display.display();

    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid.c_str(), password.c_str());

    int attempts = 0;
    while (WiFi.status() != WL_CONNECTED && attempts < 20) {
        delay(500);
        Serial.print(".");
        ++attempts;
    }

    if (WiFi.status() != WL_CONNECTED) {
        setupAccessPoint();
    } else {
        Serial.println("WiFi подключено");
        display.clearDisplay();
        display.setCursor(0, 10);
        display.println("WiFi Connected!");
        display.setCursor(0, 20);
        display.print("IP: ");
        display.println(WiFi.localIP());
        display.display();
        delay(2000);

        timeClient.begin();
    }
}

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

    // Остальной код...
} код работает корректно но при включении устройсва вместо логотипа иероглиф