Spiffs Lesen/ Variable

Hallo zusammen
ich habe mit dem SPIFFS Speicher ,bzw mit der Variable in die ich die Daten schreiben möchte, ein Problem dass ich nicht verstehe und zwar das Auslesen des Speichers funktioniert wunderbar und ich kann es auch in einer Variable speichern nur leider sobald mein Programm ein paar Zeilen weiter ist und ich die Variable erneut brauche dann kennt mein ESP den Inhalt dieser Variable nicht mehr und ich frag mich warum ich nutze mehrere variablen für Wlan Name, Passwort, MQTT und für den Namen meines ESPs und dieser ist es auch der mich zum verzweifeln bringt. Bei allen anderen funktioniert es nur eben der Name(Hostname) wird nach ein paar Zeilen einfach vergessen.
Leider ist mein Skript ziemlich groß deshalb poste ich nur einen ausschnitt davon vielleicht kann mir ja jemand helfen.

char* ssid;             //Wlan Name
char* passwort;         //Wlan Passwort
char* Hostname;         //Name des Boards
const int buttonPin = 13;       //GPIO Pin Deklarieren
int Ap;
//*****************************SPIFFS***************************************
char* WLan = "/WLan.txt";
char* Password = "/Passwort.txt";
char* Espname ="/Espname.txt";
char* MQAdr = "/MQTTAddresse.txt";
 
int WLAN=0;                                       //Zählt die Verbindungsversuche
void Standardsetup(){
                                  //Standart installation
  Serial.begin(9600);             //Baudrate Bestimmen
  Tastersetup();
  Serial.println();
  delay(500);
  //****************************Ausgabe**************************************
  Serial.println("ESP Gestartet");
  SPIFFSSpeicher();                                     //SPIFFS initialisieren
  WiFi.mode(WIFI_STA);                                  //Wifi Station Modus als Gerät definieren
  Taster();
  //**********************SPIFFS lesen***************************************
  //SSID
      File Name = SPIFFS.open(WLan, "r");
      String ssid = Name.readString();
      ssid.c_str();                         //String zu "const char*"
      Name.close();                         //Schließen der Datei
      Serial.print("ssid:");      
      Serial.println(ssid);
    //Passwort
      File Kennwort = SPIFFS.open(Password, "r");
      String passwort = Kennwort.readString();
      passwort.c_str();                       //String zu "const char*"
      Kennwort.close();                       //Schließen der Datei
      Serial.print("Passwort: ");
      Serial.println(passwort);
    //Hostname auslesen
      File Host = SPIFFS.open(Espname, "r");
      if (Host){
      String Hostname = Host.readString();
      Hostname.c_str();                   //String zu "const char*"
      Host.close();                       //Schließen der Datei
      Serial.print("Hostname: ");
      Serial.println(Hostname);
      Serial.println("Hostname ausgelesen");
      }else{
        Host.close();                       //Schließen der Datei
        Hostname="ESP8266";
      }
    //MQTT Addresse
      File MQTTAdr = SPIFFS.open(MQAdr, "r");
      String mqtt_Addresse = MQTTAdr.readString();
      mqtt_Addresse.c_str();                       //String zu "const char*"
      MQTTAdr.close();                       //Schließen der Datei
      Serial.print("MQTT Addresse: ");
      Serial.println(mqtt_Addresse);
  if(Ap==0){    
  //**********************ins WLAN einloggen*********************************
  WiFi.begin(ssid, passwort);                           //Wifi Starten
  Serial.print("Verbindung wird hergestellt ...");
  while (WiFi.status() != WL_CONNECTED && WLAN < 30) {  //While Schleife mit 2 Bedingungen
    delay(500);
    Serial.print(".");
    WLAN++;
  }   
  if (WLAN == 30) {
    Serial.println();
    Serial.println("WLAN nicht Verfügbar");
    //************************************************************************DeepSleep wenn WLAN nicht Verfügbar
    Sleep();
    } else {
    Serial.println("Verbunden! IP-Adresse: ");
    Serial.println(WiFi.localIP());
  } 
    } else {
      WiFi.disconnect();                      // Soft-Access-Point-Modus --> Access-Point Adresse http://192.168.4.1/
      WiFiscan();
      WiFi.mode(WIFI_AP);
      WiFi.softAP(Hostname);
      Serial.println("Accespoint erstellt");
      createSetupServer();
      WLAN = 0;
    }
  //**********************mDNS Einrichten***********************************
    Serial.println(Hostname);
  if (!MDNS.begin(Hostname)) {
    Serial.println("Fehler beim Einrichten der mDNS!");
    while (1) {
      delay(1000);
    }
  } else {
    //mDNS Name
    Serial.print(Hostname);
    Serial.println(".local");
  }
}

Diese Zeile hat keinen Effekt.
Die anderen dieser Art natürlich auch.

Vielleicht hat das mit den C++ Sichtbarkeitsbereichen zu tun.
z.B. Vielleicht richtest du auch Zeiger auf lokale Variablen.

Wenn das Programm zu groß ist, dann reduziere es auf das absolute Minimum, welches den Fehler noch zeigt.
Ein untestbares Programm ist halt untestbar.
Mehr als eine nebelige Kristallkugel gibts dann nicht.

SPIFFS ist derzeit veraltet und wird möglicherweise in zukünftigen Versionen des Kerns entfernt. Bitte ziehen Sie in Erwägung, Ihren Code nach LittleFS zu verschieben. SPIFFS wird vom Upstream-Entwickler nicht mehr aktiv unterstützt, während LittleFS aktiv weiterentwickelt wird, echte Verzeichnisse unterstützt und für die meisten Operationen um ein Vielfaches schneller ist.

Wurde dir schon einmal mitgeteilt.

Bitte stell die Compiler-Warnungen auf "Alle".

const gehört davor

Da du es selbst bauen möchtest, ein Link zu meinen Esp8266 Login Manager mit Captive Portal als Anregung wie es aussehen könnte.

1 Like

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.