add init stage 5
This commit is contained in:
parent
197e1360d4
commit
42b0b8b81b
@ -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();
|
||||
}
|
||||
|
||||
|
||||
@ -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() {
|
||||
|
||||
@ -1,3 +1,3 @@
|
||||
#pragma once
|
||||
void webServerInit();
|
||||
bool webServerInit();
|
||||
void webServerLoop();
|
||||
|
||||
@ -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() {
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
void wsInit();
|
||||
bool wsInit();
|
||||
void wsLoop();
|
||||
void wsBroadcastStatus();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user