Tommy56, ich bin dir unglaublich dankbar. Stark das du dir so viel Zeit genommen hast. Jetzt klappt alles wie gewünscht!!
Ich habe die Seek Variante genutzt. Langfristig möchte ich nicht nur SSID und PW speichern, aber das war jetzt ein gutes Beispiel
Vielleicht nochmal für alle, die ähnliches brauchen den kompletten Code mit Tommys Lösungen. Vielleicht findet sich so ja über die Zeit noch eine bessere Methode.
Hier der Hauptcode, welchen ich so schmal wie möglich halten wollte:
#include <ArduinoJson.h>
#include <FS.h>
#include "Config.h"
void setup() {
delay(10); Serial.begin(115200); delay(10);
Start_SPIFFS();
CreateDemoData("/config.json", true);
PrintFile("/config.json");
Change_Config("/config.json","SSID","NEUE SSID", true);
PrintFile("/config.json");
}
void loop() {
}
Hier die Config.h
//================================================================================================
//====================================== SPIFFS MOUNTEN ==========================================
//================================================================================================
void Start_SPIFFS() {
if (!SPIFFS.begin()) {
Serial.println("Fehler: Dateisystem konnte nicht eingebunden werden");
return;
}
}
//================================================================================================
//========================================== Laden ===============================================
//================================================================================================
String loadValue(String Path, String Name) {
File configFile = SPIFFS.open(Path, "r");
if (!configFile) {
Serial.println("Fehler: Die Datei " + Path + " konnte nicht geöffnet werden");
return "Fehler";
}
size_t size = configFile.size();
if (size > 1024) {
Serial.println("Fehler: Die Datei ist zu groß");
return "Fehler";
}
// Allocate a buffer to store contents of the file.
std::unique_ptr<char[]> buf(new char[size]);
// We don't use String here because ArduinoJson library requires the input
// buffer to be mutable. If you don't use ArduinoJson, you may as well
// use configFile.readString instead.
configFile.readBytes(buf.get(), size);
StaticJsonBuffer<200> jsonBuffer;
JsonObject& json = jsonBuffer.parseObject(buf.get());
if (!json.success()) {
Serial.println("Fehler: Parsen fehlgeschlagen. Name: " + Name);
return "Fehler";
}
String result = json[Name];
return result;
}
//================================================================================================
//===================================== DEMODATEN ANLEGEN ========================================
//================================================================================================
void CreateDemoData(String Path, bool debug) {
SPIFFS.remove(Path);
StaticJsonBuffer<200> jsonBuffer;
//JSON anlegen
JsonObject& json = jsonBuffer.createObject();
//JSON - Objekte anlegen
json["SSID"] = "DEMO_SSID";
json["Passwort"] = "123456789";
//Möglicherweise vorhandene Datei (Path) aus SPIFFS löschen
SPIFFS.remove(Path);
//Neue Datei anlegen
File configFile = SPIFFS.open(Path, "w");
if (!configFile) {
if (debug) {
Serial.println("Fehler: Demodaten konnten nicht gespeichert werden");
}
}
json.printTo(configFile);
if (debug) {
Serial.println("Demodaten wurden angelegt");
}
}
//================================================================================================
//==================================== Value aktualisieren =======================================
//================================================================================================
bool Change_Config(String Path, String Key, String Value, bool debug) {
File configFile = SPIFFS.open(Path, "r+");
if (!configFile) {
Serial.println("Fehler: Die Datei " + Path + " konnte nicht geöffnet werden");
return false;
}
//Hier prüfe ich ob die Datei zu groß ist
size_t size = configFile.size();
if (size > 1024) {
Serial.println("Fehler: Die Datei ist zu groß");
return false;
}
std::unique_ptr<char[]> buf(new char[size]);
configFile.readBytes(buf.get(), size);
//Hier wird der Inhalt der config.json Dateu in "json" gepackt
StaticJsonBuffer<200> jsonBuffer;
JsonObject& json = jsonBuffer.parseObject(buf.get());
if (!json.success()) {
Serial.println("Fehler: Parsen fehlgeschlagen");
return false;
}
json[Key] = Value;
configFile.seek(0,SeekSet);
json.printTo(configFile);
if (debug) {
Serial.println("Werte erfolgreich geändert");
}
return true;
}
//================================================================================================
//==================================== Ganze Datei ausgeben ======================================
//================================================================================================
void PrintFile(String Path) {
Serial.println("");
Serial.println("==================================== " + Path + " ====================================");
Serial.println("");
File f = SPIFFS.open(Path, "r");
Serial.println( f.readStringUntil('\n') );
Serial.println("");
Serial.println("=======================================================================================");
Serial.println("");
}
Hier die Ausgabe im SM:
Demodaten wurden angelegt
==================================== /config.json ====================================
{"SSID":"DEMO_SSID","Passwort":"123456789"}
=======================================================================================
Werte erfolgreich geändert
==================================== /config.json ====================================
{"SSID":"NEUE SSID","Passwort":"123456789"}
=======================================================================================
Die Funktion loadValue habe ich jetzt immer nur mitgenommen. Diese stammt noch aus meinen ersten Versuchen und funktioniert u.U. aktuell nicht bzw. muss noch angepasst werden. Darum kümmere ich mich später.
Nochmal vielen Dank an Tommy!!
Edit:
Wer noch nie SPIFFS auf seinem Controller genutzt hat muss erstmal formatieren… Also nicht verzweifeln 
SPIFFS.format()
Referenz: https://github.com/esp8266/Arduino/blob/master/doc/filesystem.md#format