diff --git a/src/main.cpp b/src/main.cpp index acc2e6d..894ddc6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -51,12 +51,14 @@ void runStartupChecks() { "", "", ""); delay(DELAY_FOR_STARTUP_CHECKS); - // Этап 5: Проверка WiFi + // Этап 5: Инициализация WiFi и WebSocket oledSetStage(5, TOTAL_STAGES); + bool wifiOk = webServerInit(); + bool wsOk = wsInit(); delay(DELAY_FOR_STARTUP_CHECKS); // Все проверки пройдены - oledSetSystemReady(joyOk && servoOk && ultrasonicOk && actuatorsOk); + oledSetSystemReady(joyOk && servoOk && ultrasonicOk && actuatorsOk && wifiOk && wsOk); } void setup() { @@ -67,9 +69,6 @@ void setup() { // Запуск проверок runStartupChecks(); - webServerInit(); - wsInit(); - robot.lastCmdMs = millis(); } diff --git a/src/server/web_server.cpp b/src/server/web_server.cpp index dd6bc99..0f75042 100644 --- a/src/server/web_server.cpp +++ b/src/server/web_server.cpp @@ -6,10 +6,13 @@ #include "core/controller/controller.h" #include "core/robot_state/robot_state.h" #include "core/ultrasonic/ultrasonic.h" -#include "core/deprecate/lcd_status/lcd_status.h" +#include "core/display/body/body.h" static WebServer server(80); +#define WIFI_RETRY_MAX 5 +#define WIFI_RETRY_DELAY_MS 300 + void handleRoot() { server.send_P(200, "text/html; charset=utf-8", INDEX_HTML); } @@ -65,7 +68,7 @@ void handleMode() { return; } - lcdShowMode(modeToStr(robot.mode)); + oledShowMode(modeToStr(robot.mode)); // lcdShowText("SERVICE MODE", "Waiting..."); server.send(200, "text/plain", String("OK MODE=") + modeToStr(robot.mode)); @@ -88,28 +91,48 @@ void handleStatus() { server.send(200, "application/json", json); } -void webServerInit() { +bool webServerInit() { WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASS); Serial.print("\nConnecting to Wi-Fi"); - while (WiFi.status() != WL_CONNECTED) { + // Показываем экран подключения + char statusBuf[32]; + snprintf(statusBuf, sizeof(statusBuf), "Retry 0/%d", WIFI_RETRY_MAX); + oledShowText("Connecting to WiFi...", statusBuf); + + int retryCount = 0; + while (WiFi.status() != WL_CONNECTED && retryCount < WIFI_RETRY_MAX) { Serial.print("\nRetry connecting to Wi-Fi"); - delay(300); + delay(WIFI_RETRY_DELAY_MS); + retryCount++; + + // Обновляем дисплей с номером попытки + snprintf(statusBuf, sizeof(statusBuf), "Retry %d/%d", retryCount, WIFI_RETRY_MAX); + oledShowText("Connecting to WiFi...", statusBuf); } if (WiFi.status() == WL_CONNECTED) { - lcdShowWiFi(WIFI_SSID, WiFi.RSSI()); + // Показываем успешное подключение + String ipStr = "IP: " + WiFi.localIP().toString(); + oledShowText("WiFi: CONNECTED", ipStr.c_str()); Serial.print("\nConnected. IP: "); Serial.println(WiFi.localIP()); + + // Настраиваем маршруты + server.on("/", handleRoot); + server.on("/cmd", handleCmd); + server.on("/speed", handleSpeed); + server.on("/mode", handleMode); + server.on("/status", handleStatus); + server.begin(); + return true; } - server.on("/", handleRoot); - server.on("/cmd", handleCmd); - server.on("/speed", handleSpeed); - server.on("/mode", handleMode); - server.on("/status", handleStatus); - server.begin(); + // Не удалось подключиться + oledShowText("WiFi: FAILED", "Check router/network"); + Serial.println("\nWiFi connection failed"); + return false; } void webServerLoop() { diff --git a/src/server/web_server.h b/src/server/web_server.h index 884d14e..05fdf44 100644 --- a/src/server/web_server.h +++ b/src/server/web_server.h @@ -1,3 +1,3 @@ #pragma once -void webServerInit(); +bool webServerInit(); void webServerLoop(); diff --git a/src/server/ws_server.cpp b/src/server/ws_server.cpp index 5767588..169ad63 100644 --- a/src/server/ws_server.cpp +++ b/src/server/ws_server.cpp @@ -4,11 +4,12 @@ #include "ws_server.h" #include "core/controller/controller.h" #include "core/robot_state/robot_state.h" -#include "core/display/face/face.h" +#include "core/display/body/body.h" static WebSocketsServer ws(81); // порт 81 static uint32_t lastWsCmdMs = 0; +static bool wsReady = false; void wsEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) { switch (type) { @@ -54,16 +55,16 @@ void wsEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) { } } - else if (msg.startsWith("FACE:")) { - String v = msg.substring(5); - v.toUpperCase(); + // else if (msg.startsWith("FACE:")) { + // String v = msg.substring(5); + // v.toUpperCase(); - if (v == "HAPPY") faceSet(FACE_HAPPY); - else if (v == "ANGRY") faceSet(FACE_ANGRY); - else if (v == "BORED") faceSet(FACE_BORED); - else if (v == "SURPRISED") faceSet(FACE_SURPRISED); - else faceSet(FACE_NEUTRAL); - } + // if (v == "HAPPY") faceSet(FACE_HAPPY); + // else if (v == "ANGRY") faceSet(FACE_ANGRY); + // else if (v == "BORED") faceSet(FACE_BORED); + // else if (v == "SURPRISED") faceSet(FACE_SURPRISED); + // else faceSet(FACE_NEUTRAL); + // } else if (msg.startsWith("SPEED:")) { int v = msg.substring(6).toInt(); @@ -77,9 +78,20 @@ void wsEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) { } } -void wsInit() { +bool wsInit() { + // Показываем статус инициализации WebSocket + // oledShowText("WebSocket: INIT...", "Queue pending"); + ws.begin(); ws.onEvent(wsEvent); + + wsReady = true; + + // Показываем успешную инициализацию + // oledShowText("WebSocket: READY", "Listening on :81"); + Serial.println("WebSocket initialized on port 81"); + + return true; } void wsLoop() { diff --git a/src/server/ws_server.h b/src/server/ws_server.h index d59a3bd..21a80f8 100644 --- a/src/server/ws_server.h +++ b/src/server/ws_server.h @@ -1,4 +1,4 @@ #pragma once -void wsInit(); +bool wsInit(); void wsLoop(); void wsBroadcastStatus();