Преглед на файлове

New state machine

master
gituser преди 1 седмица
родител
ревизия
e2aad4abb2
променени са 2 файла, в които са добавени 113 реда и са изтрити 31 реда
  1. 104
    30
      LEDLamp.ino
  2. 9
    1
      sloeber.ino.cpp

+ 104
- 30
LEDLamp.ino Целия файл

#include <WebSocketsServer.h> #include <WebSocketsServer.h>
#include <EEPROM.h> #include <EEPROM.h>
#include <DNSServer.h> #include <DNSServer.h>
#include "States.h"


const int ledPin = LED_BUILTIN; // The built-in LED on the Wemos D1 Mini is on GPIO2 (D4)

ESP8266WebServer webServer(80);
WebSocketsServer webSocket(81);
DNSServer dnsServer;
AppState state = STATE_BOOT;
unsigned long connectStart = 0;


const int ledPin = LED_BUILTIN; // The built-in LED on the Wemos D1 Mini is on GPIO2 (D4)
const byte DNS_PORT = 53; const byte DNS_PORT = 53;


// AP Daten // AP Daten
bool valid; bool valid;
}; };


ESP8266WebServer webServer(80);
WebSocketsServer webSocket(81);
DNSServer dnsServer;
Config config; Config config;


// ---------- EEPROM ---------- // ---------- EEPROM ----------
void webSocketEvent(uint8_t num, WStype_t type, uint8_t *payload, size_t length) { void webSocketEvent(uint8_t num, WStype_t type, uint8_t *payload, size_t length) {


switch (type) { switch (type) {

case WStype_CONNECTED: { case WStype_CONNECTED: {

IPAddress ip = webSocket.remoteIP(num); IPAddress ip = webSocket.remoteIP(num);

Serial.printf(
"WS Client %u verbunden von %d.%d.%d.%d\n",
num,
ip[0], ip[1], ip[2], ip[3]);

Serial.printf("WS Client %u verbunden von %d.%d.%d.%d\n", num, ip[0], ip[1], ip[2], ip[3]);
webSocket.sendTXT(num, "Connected"); webSocket.sendTXT(num, "Connected");
break; break;
} }
break; break;


case WStype_TEXT: { case WStype_TEXT: {

String msg = String((char*) payload); String msg = String((char*) payload);

Serial.print("WS empfangen: "); Serial.print("WS empfangen: ");
Serial.println(msg); Serial.println(msg);


} }
} }


void setState(AppState newState) {
Serial.printf("STATE %s -> %s\n", stateToString(state), stateToString(newState));
state = newState;
}

void handleBoot() {

if (config.valid) {
WiFi.mode(WIFI_STA);
WiFi.begin(config.ssid, config.pass);
setState(STATE_CONNECTING);
}
else {
startAP();
setState(STATE_AP_MODE);
}
}

void handleConnecting() {

if (WiFi.status() == WL_CONNECTED) {
startSTAWebServer();
setState(STATE_STA_MODE);
return;
}

if (millis() - connectStart > 10000) {
Serial.println("Connect Timeout");
startAP();
setState(STATE_AP_MODE);
}
}

void handleAPMode() {
dnsServer.processNextRequest();
webServer.handleClient();
}

void handleSTAMode() {
webServer.handleClient();
webSocket.loop();

if (WiFi.status() != WL_CONNECTED) {
Serial.println("WLAN verloren");
WiFi.begin(config.ssid, config.pass);
connectStart = millis();
setState(STATE_CONNECTING);
}
}

void handleError() {
digitalWrite(ledPin, LOW);
}

void startSTAWebServer()
{
Serial.println("Starte STA Services");

// Webseite
webServer.on("/", handleRoot);

// optional
webServer.on("/save", HTTP_POST, handleSave);
webServer.begin();

// WebSocket
webSocket.begin();
webSocket.onEvent(webSocketEvent);

Serial.print("HTTP Server: http://");
Serial.println(WiFi.localIP());

Serial.print("WebSocket: ws://");
Serial.print(WiFi.localIP());
Serial.println(":81/");
}

// ---------- SETUP ---------- // ---------- SETUP ----------
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);


loadConfig(); loadConfig();


if (config.valid && connectSTA()) {
Serial.println("STA Mode aktiv");
} else {
Serial.println();
Serial.println();
Serial.println("Starte Captive Portal");
startAP();
}
setState(STATE_BOOT);
connectStart = millis();
} }


// ---------- LOOP ---------- // ---------- LOOP ----------
void loop() { void loop() {


if (WiFi.getMode() == WIFI_AP) {
switch (state) {
case STATE_BOOT:
handleBoot();
break;


dnsServer.processNextRequest();
webServer.handleClient();
case STATE_AP_MODE:
handleAPMode();
break;


return;
}
case STATE_CONNECTING:
handleConnecting();
break;


webServer.handleClient();
case STATE_STA_MODE:
handleSTAMode();
break;


webSocket.loop();
case STATE_ERROR:
handleError();
break;
}
} }

+ 9
- 1
sloeber.ino.cpp Целия файл

//This is a automatic generated file //This is a automatic generated file
//Please do not modify this file //Please do not modify this file
//If you touch this file your change will be overwritten during the next build //If you touch this file your change will be overwritten during the next build
//This file has been generated on 2026-06-07 22:47:36
//This file has been generated on 2026-06-08 17:59:19


#include "Arduino.h" #include "Arduino.h"
#include "Arduino.h" #include "Arduino.h"
#include <WebSocketsServer.h> #include <WebSocketsServer.h>
#include <EEPROM.h> #include <EEPROM.h>
#include <DNSServer.h> #include <DNSServer.h>
#include "States.h"


void saveConfig() ; void saveConfig() ;
void loadConfig() ; void loadConfig() ;
void startAP() ; void startAP() ;
bool connectSTA() ; bool connectSTA() ;
void webSocketEvent(uint8_t num, WStype_t type, uint8_t *payload, size_t length) ; void webSocketEvent(uint8_t num, WStype_t type, uint8_t *payload, size_t length) ;
void setState(AppState newState) ;
void handleBoot() ;
void handleConnecting() ;
void handleAPMode() ;
void handleSTAMode() ;
void handleError() ;
void startSTAWebServer() ;
void setup() ; void setup() ;
void loop() ; void loop() ;



Loading…
Отказ
Запис