#include <WiFi.h>
#include <WebServer.h>
#include <WebSocketsServer.h>

const char* ssid = "Beeline_2G_A7F18A"; // Замените на ваше SSID
const char* password = "iD2tAXJN3e";     // Замените на ваш пароль Wi-Fi

const int micPin = 3; // Используем GPIO 34 для микрофона

WebServer httpServer(80); // Создаем HTTP сервер на порту 80
WebSocketsServer webSocket(81); // Создаем WebSocket сервер на порту 81

unsigned long previousMillis = 0; // Время для отслеживания интервала
const long interval = 200;         // Интервал для считывания уровня шума

void setup() {
    Serial.begin(115200); // Настраиваем скорость последовательного порта
    Serial.println("Starting program...");

    WiFi.begin(ssid, password); // Подключаемся к Wi-Fi
    Serial.println("Connecting to Wi-Fi...");

    while (WiFi.status() != WL_CONNECTED) {
        Serial.print(".");
        delay(100); // Небольшая задержка для отображения статуса подключения
    }

    Serial.println("\nConnected to Wi-Fi");
    Serial.print("Your IP address: ");
    Serial.println(WiFi.localIP());

    // Определяем обработчик HTTP запрашиваем к корневому URL
    httpServer.on("/", []() {
        String htmlResponse = "<!DOCTYPE html><html><head><title>Noise Level</title>";
        htmlResponse += "<script>";
        htmlResponse += "var ws = new WebSocket('ws://192.168.1.12:81');"; // Указание фиксированного адреса
        htmlResponse += "ws.onmessage = function(event) { document.getElementById('noise-level').innerText = event.data; };";
        htmlResponse += "</script></head><body>";
        htmlResponse += "<h1>Noise Level</h1>";
        htmlResponse += "<p id='noise-level'>Waiting for data...</p>";
        htmlResponse += "</body></html>";
        httpServer.send(200, "text/html", htmlResponse);
        Serial.println("HTML page sent...");
    });

    // Запускаем серверы
    httpServer.begin();
    webSocket.begin(); // Запускаем WebSocket сервер
    webSocket.onEvent(webSocketEvent); // Устанавливаем обработчик событий для WebSocket
    Serial.println("Servers started and ready to handle requests...");
}

void loop() {
    httpServer.handleClient(); // Обрабатываем входящие HTTP запросы
    webSocket.loop();          // Обрабатываем входящие WebSocket запросы

    // Неблокирующее считывание уровня шума
    unsigned long currentMillis = millis();
    if (currentMillis - previousMillis >= interval) {
        previousMillis = currentMillis;

        // Чтение уровня шума
        int noiseLevel = analogRead(micPin); // Чтение уровня шума
        int scaledNoiseLevel = map(noiseLevel, 0, 4095, 1, 10);

        // Формируем сообщение для отправки
        String msg = "Noise Level (raw): " + String(noiseLevel) + ", Noise Level (scaled): " + String(scaledNoiseLevel);
        webSocket.broadcastTXT(msg); // Отправляем данные всем клиентам WebSocket
        Serial.print("Sent via WebSocket: ");
        Serial.println(msg);
    }
}

// Обработчик событий WebSocket
void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) {
    switch (type) {
        case WStype_DISCONNECTED:
            Serial.printf("Client %u disconnected\n", num);
            break;
        case WStype_CONNECTED: {
            IPAddress ip = webSocket.remoteIP(num);
            Serial.printf("Client %u connected: %d.%d.%d.%d\n", num, ip[0], ip[1], ip[2], ip[3]);
            break;
        }
        case WStype_TEXT:
            Serial.printf("Received text from client %u: %s\n", num, payload);
            break;
    }
} serial monitor ничего не отображает