add init stage 5

This commit is contained in:
cheykrym 2026-03-30 04:32:39 +03:00
parent 197e1360d4
commit 42b0b8b81b
5 changed files with 64 additions and 30 deletions

View File

@ -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();
}

View File

@ -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;
}
// Не удалось подключиться
oledShowText("WiFi: FAILED", "Check router/network");
Serial.println("\nWiFi connection failed");
return false;
}
void webServerLoop() {

View File

@ -1,3 +1,3 @@
#pragma once
void webServerInit();
bool webServerInit();
void webServerLoop();

View File

@ -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() {

View File

@ -1,4 +1,4 @@
#pragma once
void wsInit();
bool wsInit();
void wsLoop();
void wsBroadcastStatus();