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

Web-Log-Terminal: vollständige h-Ausgabe (Puffer 64), größere Anzeige und Stick-to-Bottom-Scroll-Logik.

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

Components

Sketch code

// Version: B2.16

// ===================================================================
// SKETCH.INO - TEIL 1 (Definitionen, Variablen & Prototypen)
// ===================================================================
#include <WiFi.h>
#include <WebServer.h>
WebServer server(80);

#include <esp_now.h>
#include <ArduinoJson.h>
#include <esp_task_wdt.h> 
#include "esp_mac.h" 
#include "config.h"
#include "webpage.h"
#include <stdarg.h> 
#include <ArduinoOTA.h>  // ✅ Neu für drahtlose Updates

#define WDT_TIMEOUT_SECONDS 5 

uint32_t myLocalSequenceNumber = 0;
uint32_t simSequenceCounter = 0; 

bool logToSerialActive = true;    
bool logToEspNowActive = false;   
bool logToWebActive = true;    

#define WEB_LOG_MAX_LINES 64
String webLogBuffer[WEB_LOG_MAX_LINES];
uint8_t webLogBufferIdx = 0;
uint32_t webLogSequence = 0;   // Monotone Sequenznummer je Logzeile (fuer Browser-Inkrement-Abgleich)

struct MsgFingerprint { uint16_t srcId; uint32_t seqNum; };
#define MESH_HISTORY_SIZE 20
MsgFingerprint meshHistory[MESH_HISTORY_SIZE];
uint8_t meshHistoryIdx = 0;

unsigned long lastWifiCheckTime = 0;
const unsigned long wifiCheckInterval = 10000; 

// --- COMPILER-FORWARD-PROTOTYPEN ---
void sendBroadcast(LightControlPayload &payload);
void processDebugCommand(const char* cmdStr);
void checkLocalInputs();
void evaluatePrioritiesAndOutputs();
void printSystemConfig(const SystemConfig& cfg);
void printGlobalRegistry();
void handleWebDebugCommand(const char* webCmdStr);
String webProcessor(const String& var);
void handleApiStatus();
void registerWebEndpoints();
void loadConfiguration();
void checkWifiBackgroundEngine();
void processReceivedPacket(const uint8_t* sourceMac, const LightControlPayload& packet);
void initArduinoOTA();
void executeCentralCommand(String inputStr);

// ===================================================================
// NEUE ZENTRALE PARSER-FUNKTION (TEIL 1)
// ===================================================================
void executeCentralCommand(String inputStr) {
    inputStr.trim(); 
    if (inputStr.length() == 0) return;

    // --- PRÄFIX 'l': Lokale Monitor-Steuerung ---
    if (inputStr.startsWith("l")) {
        if (inputStr == "l 0" || inputStr == "l0") { 
            logToSerialActive = false; 
        }
        else if (inputStr == "l 1" || inputStr == "l1") { 
            logToSerialActive = true; 
            systemLogf("[SYS] Serial-Log EIN\n"); 
        } 
        return;
    }

    // --- PRÄFIX 'w': Interaktiver Webserver & UI Simulator ---
    if (inputStr.startsWith("w") || inputStr.startsWith("W")) {
        String sub = inputStr.substring(1); sub.trim();
                   
        if (sub == "" || sub == "index" || sub == "page") {
            systemLogf("\n--- [WEB-SIM] Generiere HTML-Oberfläche (GET /) ---\n");
            systemLogf("HTML-MOCK -> Hostname: %s | IP: 11.22.33.44\n", webProcessor("HOSTNAME").c_str());
            systemLogf("HTML-MOCK -> Schieberegler-Werte: WW:%s | R:%s | B:%s\n",

More projects by bmw550i