сделай  сервер в темных цвета и добавь логику оповещения через thinger.io о том что кнопка нажата на устройство и сообщение прочитано #include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
#include <ArduinoOTA.h>
#include <ESP8266WebServer.h>
#include <ThingerESP8266.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32

// Wi-Fi settings
const char* ssid = "Beeline_2G_A7F18A"; 
const char* password = "iD2tAXJN3e"; 

// OTA password
const char* otaPassword = "35539900";

// Thinger.io credentials
#define THINGER_USERNAME "PavelMy"
#define THINGER_DEVICE_ID "ESPPROGECT1"
#define THINGER_DEVICE_CREDENTIAL "Asus35539900"

// Pin definitions
#define BUZZER_PIN D5 // Zummer (buzzer) pin
#define BUTTON_PIN D6 // Physical button pin
#define LED_PIN D7    // External LED pin

// Create an instance of the display
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// NTP client settings
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 10800, 60000); // Time offset in seconds (3 hours)

// Web server
ESP8266WebServer server(80);

// Thinger.io instance
ThingerESP8266 thing(THINGER_USERNAME, THINGER_DEVICE_ID, THINGER_DEVICE_CREDENTIAL);

// Variables
String alarmTime = "";
bool alarmSet = false;
bool alarmTriggered = false;

String receivedMessage = "";
int textXPosition = SCREEN_WIDTH; // Scrolling text
String scrollMessage = "";

// Flags for LED and buzzer states
bool ledState = false;
bool buzzerState = false;

// Variables for text sizes on the display
int timeTextSize = 2;    // Text size for time
int otherTextSize = 1;   // Text size for alarm and other messages

void handleRoot() {
    String html = 
    "<!DOCTYPE html>"
    "<html>"
    "<head>"
    "<meta name='viewport' content='width=device-width, initial-scale=1.0'/>"
    "<style>"
    "body { font-family: Arial, sans-serif; text-align: center; }"
    "h1 { font-size: 1.5em; }"
    "button { margin: 5px; padding: 10px; font-size: 1.2em; cursor: pointer; }"
    "</style>"
    "</head>"
    "<body>"
    "<h1>Device Control</h1>"
    "<div>"
    "<form action='/toggle_led' method='POST'>"
    "<button type='submit'>" + String(ledState ? "Turn OFF LED" : "Turn ON LED") + "</button>"
    "</form>"
    "</div>"
    "<div>"
    "<form action='/toggle_buzzer' method='POST'>"
    "<button type='submit'>" + String(buzzerState ? "Turn OFF Buzzer" : "Turn ON Buzzer") + "</button>"
    "</form>"
    "</div>"
    "</body>"
    "</html>";
    server.send(200, "text/html", html);
}

void handleToggleLED() {
    ledState = !ledState; // Toggle the LED state
    digitalWrite(LED_PIN, ledState ? HIGH : LOW);
    Serial.println(ledState ? "LED turned ON" : "LED turned OFF");

    // Redirect to the main page
    server.sendHeader("Location", "/");
    server.send(303);
}

void handleToggleBuzzer() {
    buzzerState = !buzzerState; // Toggle the buzzer state
    digitalWrite(BUZZER_PIN, buzzerState ? HIGH : LOW);
    Serial.println(buzzerState ? "Buzzer turned ON" : "Buzzer turned OFF");

    // Redirect to the main page
    server.sendHeader("Location", "/");
    server.send(303);
}

void setup() {
    Serial.begin(115200);
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
    display.clearDisplay();
    display.setTextWrap(false);

    pinMode(BUZZER_PIN, OUTPUT);
    pinMode(BUTTON_PIN, INPUT_PULLUP); 
    pinMode(LED_PIN, OUTPUT);

    // Initialize states
    digitalWrite(BUZZER_PIN, LOW);
    digitalWrite(LED_PIN, LOW);

    Serial.println("Connecting to Wi-Fi...");
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    Serial.println("\nConnected to Wi-Fi");
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());

    timeClient.begin();
    ArduinoOTA.setPassword(otaPassword);
    ArduinoOTA.begin();

    // Set up web server routes
    server.on("/", HTTP_GET, handleRoot);
    server.on("/toggle_led", HTTP_POST, handleToggleLED);
    server.on("/toggle_buzzer", HTTP_POST, handleToggleBuzzer);

    server.begin();
    Serial.println("Web server started");

    thing.add_wifi(ssid, password);

    // Add Thinger.io resources
    thing["display_message"] << [](pson& in) {
        if (in.is_string()) {
            receivedMessage = (const char*) in;
            scrollMessage = receivedMessage;
            textXPosition = SCREEN_WIDTH;
            Serial.print("Received message: ");
            Serial.println(receivedMessage);

            // Indicate message received visually
            digitalWrite(LED_PIN, HIGH); 
        }
    };
}

void loop() {
    ArduinoOTA.handle();
    server.handleClient();
    timeClient.update();
    thing.handle();

    String formattedTime = timeClient.getFormattedTime();

    // Handle button press to clear scrolling message
    if (digitalRead(BUTTON_PIN) == LOW) {
        scrollMessage = "";
        digitalWrite(LED_PIN, LOW); // Turn off LED
        delay(300); // Simple debounce
    }

    display.clearDisplay();

    // Display current time
    display.setTextSize(timeTextSize);
    display.setFont();
    display.setTextColor(SSD1306_WHITE);
    display.setCursor(0, 0);
    display.print(formattedTime);

    // Display alarm if set
    if (alarmSet) {
        display.setTextSize(otherTextSize);
        display.setCursor(0, 16);
        display.print("Alarm: ");
        display.print(alarmTime);
    }

    // Display scrolling message
    if (scrollMessage != "") {
        textXPosition -= 2;
        if (textXPosition < -128) {
            textXPosition = SCREEN_WIDTH;
        }
        display.setTextSize(otherTextSize);
        display.setCursor(textXPosition, 24);
        display.print(scrollMessage);
    }

    display.display();

    delay(30);

    // Buzzer handling if triggered manually
    if (buzzerState) {
        digitalWrite(BUZZER_PIN, HIGH);
        delay(100);
        digitalWrite(BUZZER_PIN, LOW);
        delay(100);
    }
}