code-sammler-flat-room-group-02b — ESP32 simulation

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

Components

Sketch code

#include <WiFi.h>
#include <esp_now.h>
#include <ArduinoJson.h>
//#include <LittleFS.h>
#include "config.h"

// Diese Funktion wird im echten setup() ganz oben aufgerufen
void initSerial() {
  Serial.begin(115200);
  delay(500); // Kurze Pause, damit der Serielle Monitor bereit ist
  Serial.println("--- System startet ---");
}

// Globale Konfigurationsinstanz
SystemConfig sysCfg;

// Speicher für die aktuellen Werte ALLER bekannten IDs (lokal & remote)
// Im Echtbetrieb empfiehlt sich hier ein dynamischeres Mapping, für die Übersichtlichkeit nutzen wir feste ID-Zustände.
struct IdState {
    uint16_t id;
    int16_t value;
};
IdState globalRegistry[20];
uint8_t registryCount = 0;

// Helfer: Wert einer ID aus der globalen Liste holen
int16_t getRegisterValue(uint16_t id) {
    for (uint8_t i = 0; i < registryCount; i++) {
        if (globalRegistry[i].id == id) return globalRegistry[i].value;
    }
    return 0; // Standardmäßig aus
}

// Helfer: Wert einer ID in der globalen Liste aktualisieren
void setRegisterValue(uint16_t id, int16_t value) {
    for (uint8_t i = 0; i < registryCount; i++) {
        if (globalRegistry[i].id == id) {
            globalRegistry[i].value = value;
            return;
        }
    }
    if (registryCount < 20) {
        globalRegistry[registryCount] = {id, value};
        registryCount++;
    }
}


void loadConfiguration() {
    Serial.println(F("[DEBUG] Starte loadConfiguration()")); Serial.flush();
    loadFallbackConfig();
    
    // GPIOs für die Eingänge vorbereiten
    Serial.printf("[DEBUG] Bearbeite %d Eingaenge...\n", sysCfg.inputCount); Serial.flush();
    for (uint8_t i = 0; i < sysCfg.inputCount; i++) {
        Serial.printf("[DEBUG] Eingang %d: ID=%d, PinA=%d, PinB=%d\n", i, sysCfg.inputs[i].id, sysCfg.inputs[i].pinA, sysCfg.inputs[i].pinB); Serial.flush();
        
        if (sysCfg.inputs[i].pinA < 48) { // Gültige ESP32-S3 Pins prüfen
            pinMode(sysCfg.inputs[i].pinA, INPUT_PULLUP);
        } else {
            Serial.printf("[WARNUNG] Ungueltiger PinA (%d) an Eingang Index %d!\n", sysCfg.inputs[i].pinA, i); Serial.flush();
        }
        
        if (sysCfg.inputs[i].pinB != 255 && sysCfg.inputs[i].pinB < 48) {
            pinMode(sysCfg.inputs[i].pinB, INPUT_PULLUP);
        }
    }

    // PWM für die Ausgänge vorbereiten
    Serial.printf("[DEBUG] Bearbeite %d Gruppen-Ausgaenge...\n", sysCfg.groupCount); Serial.flush();
    for (uint8_t g = 0; g < sysCfg.groupCount; g++) {
        Serial.printf("[DEBUG] Gruppe %d: ID=%d, OutputPin=%d\n", g, sysCfg.groups[g].groupId, sysCfg.groups[g].outputPin); Serial.flush();
        
        if (sysCfg.groups[g].outputPin != 255 && sysCfg.groups[g].outputPin < 48) {
            Serial.println(F("[DEBUG] Setze pinMode OUTPUT")); Serial.flush();
            pinMode(sysCfg.groups[g].outputPin, OUTPUT);
            

            //Hier Fehler XXX
            Serial.print("g ");
            Serial.println(g);
            
             Serial.print(

More projects by bmw550i