code-sammler-flat-room-group-06a — ESP32 simulation

ESP32-S3 Lichtsteuerung: Schalter/Taster-Eingänge, RGB-LED-Ausgang, Web-UI (ArduinoJson, WebServer). Board-Position korrigiert (war negativ).

An interactive ESP32 circuit simulation you can run free in your browser on Velxio, by bmw550i.

Components

Sketch code

//sketch.ino
//Erste Teile config.h
// ===================================================================
// Teil 3: GLOBALE DEBUG-FLAGS, SYSTEMLOGF (MIT IDENTITÄT) & CRC16
// ===================================================================
#include <WiFi.h>
// UMBGESTELLT (2026): ESPAsyncWebServer -> ESP32-Core WebServer.
// Grund: Das mitgelieferte AsyncTCP-Bundle kompiliert nicht mehr mit der
// neuen ESP-IDF-v5-Toolchain (xQueueHandle / CONFIG_ESP_TASK_WDT_TIMEOUT_S entfernt).
// Der Core-WebServer (arduino-esp32 3.x) bietet dieselbe AsyncWebServerRequest-API.
#include <WebServer.h>
// Erstellt das reale Server-Objekt auf Port 80
WebServer server(80);

#include <esp_now.h>
#include <ArduinoJson.h>
#include <esp_task_wdt.h> 
#include "esp_mac.h" // ESP-IDF v5: esp_read_mac() + ESP_MAC_WIFI_STA
#include "config.h"
#include "webpage.h"
#include <stdarg.h> 


#define WDT_TIMEOUT_SECONDS 5 


uint32_t myLocalSequenceNumber = 0;
uint32_t simSequenceCounter = 0; 

bool logToSerialActive = true;    
bool logToEspNowActive = false;   
bool logToWebActive = false;    // <--- NEU: Globales Flag für Web-Logging

struct MsgFingerprint {
    uint16_t srcId;
    uint32_t seqNum;
};

#define MESH_HISTORY_SIZE 20
MsgFingerprint meshHistory[MESH_HISTORY_SIZE];
uint8_t meshHistoryIdx = 0;

void sendBroadcast(LightControlPayload &payload);
// Prototyp, falls noch nicht deklariert
void processDebugCommand(const char* cmdStr);

// Simulierte Webserver-Schnittstelle
void handleWebDebugCommand(const char* webCmdStr) {
    if (logToSerialActive) {
        Serial.print(F("[WEB-UI Endpunkt] Verarbeite Befehl: "));
        Serial.println(webCmdStr);
    }
    processDebugCommand(webCmdStr); // Weiterleitung an den zentralen Parser
}

void systemLogf(const char* format, ...) {
    char buffer[128]; 
    va_list args;
    va_start(args, format);
    vsnprintf(buffer, sizeof(buffer), format, args);
    va_end(args);

    if (logToSerialActive) {
        Serial.print(buffer);
    }

    // --- NEU: FALLBACK / DATA STREAM FÜR DAS WEB-INTERFACE ---
    if (logToWebActive) {
        if (logToSerialActive) {
            Serial.print(F("[WEB-STREAM-BUFFER]: "));
            Serial.print(buffer);
        }
    }

    if (logToEspNowActive) {
        LightControlPayload logPacket;
        memset(&logPacket, 0, sizeof(logPacket));
        logPacket.version = PROTO_VERSION_1;
        logPacket.type = MSG_DEBUG_LOG;               
        logPacket.deviceType = DEV_TYPE_LIGHT_ACTOR;  
        logPacket.errorCode = ERR_NONE;
        logPacket.flat = 1; logPacket.floor = 1; logPacket.room = 1;
        logPacket.targetGroup = 0;                    
        logPacket.espDeviceId = sysCfg.myEspId;
        logPacket.srcAddress.id = sysCfg.myEspId; 
        memcpy(logPacket.senderMac, sysCfg.myMacAddress, 6);
        strncpy(logPacket.data.logText, buffer, sizeof(logPacket.data.logText) - 1); 
        simSequenceCounter++;
        logPacket.sequenceNumber = simSequenceCounter;
        s

More projects by bmw550i