Ich bin Udo und seit ein paar Wochen im Sketch-Fieber!
Ich habe wirklich schon tagelang im Netz gelesen und lande immer wieder hier bei euch ;D Super Forum!!!
Genauer kam ich über die Sonoff SV mit ESP8266 zu dem ganzen Thema als ich las, dass die Teile über die Arduino IDE programmiert werden können... und seit dem lerne ich C++, da mein Basic nicht mehr ausreicht
Ich komme schon ganz gut mir den Variblentypen, Arrays, Structs, Eeprom get + put usw. klar....
Aber nun fehlt mit ein gescheiter Ansatz:
Ich möchte (mal wieder ) eine WLAN Solar/Boiler-Steuerung bauen... mit Webif zum Werte ändern und diese sollen dauerhaft im "Eeeprom" (Flash) abgelegt werden. 3 Tempsensoren und ein Stellmotor sind vorhanden.
Ich habe 15 Byte- und Bool-Variablen (sens1, sens2, sens3, pinBoiler, pinSolar, pinRL, Regler, Schutz, Motor, Max, Min, Diff, Hyst, Frost, INI)
Nun meine Fragen:
Wäre es sinnvoll, diese Variablen in einem Struct abzulegen oder alle einzeln zu verwalten ?
Wie ist der sinnvollste Ablauf der allerersten Konfiguration:
Ich möchte beim ersten Start Standard-Werte setzen.
Möglichkeit wäre, dass direkt nach dem Start und nach der WLAN Konfig eine Setupseite aufgerufen wird, ich meine Werte einstelle (Standardwerte sind schon vorausgefüllt im Webif) und das dann absende. Im Eeeprom wird Adresse 0 (INI) von 255 auf 1 gesetzt und so weiß ich, dass ab dann bei Start die Werte aus dem Eeprom gelesen werden.
Möglichkeit wäre, dass ich direkt nach dem Start auf 255 im Eeprom in Adresse 0 prüfe und wenn 255 (noch nie geschrieben) dann alle Adressen (Struct?) mit den Standardwerten beschreibe und diese später im Webif, wenn man etwas ändern möchte, auslese und wieder schreibe, da put ja nur die geänderten Werte überschreibt und es die Lebensdauer verlängert.
Soweit, so unklar... wie würdet ihr diese Erst-Konfig ablaufen lassen?
die Werte die du auf Eprom ablegen willst sind in einer Struktur gut aufgehoben. Die kannst Du dann mit Get und Put einfach auslesen oder spiechern.
Bedenke aber das die Anzahl der Schreibvorgänge begrenzt ist. Messwerte gehören da nicht hin. Es sollten also nur Werte sein die nicht ständig geändert werden.
Warum willst Du z.B die Pin-Nummer im Eprom ablegen? Das sollten doch nur Sollwerte,und eventuell Regelparameter sein.
Ich hab das bisher so gemacht das ich im Setup den Eprom auslese. Wenn da nichts zulässigens drin steht stelle ich Werte als Voreinstellung ein.
@Rentner: Stimmt, mit den Pins muss ich noch gucken. Ich hatte evtl. angedacht, auch alle 3 Sesnoren an einen Pin zu hängen und über das WebIf dann die Indizes zuordbar zu machen (falls mal einer abtaucht, was wohl aber seltenst passiert).
@Tommy: Danke, das hatte ich noch nicht auf dem Schirm!
Auf den ersten Blick (als Newbie) ist für meine paar Variblen-Bytes die EEprom Version einfacher zu handhaben, finde ich. Oder übersehe ich einen entscheidenden Vorteil von LittleFS für meine Zwecke? grübel
Die Schreibhäufigkeit ist gleich, da beides im Flash landet (EEPROM.h ist nur eine Emulation). Das kommt darauf an, ob Du noch mehr Sachen (evtl. auch später) speichern willst (css/js Dateien z.B.) dann würde sich auf alle Fälle das Filesystem empfehlen.
Dann musst Du erkennen, ob es der erste Start ist.
Beim FS, ob die Datei da ist oder beim EEPROM ob ein bestimmtes Feld einen bestimmten Wert hat oder nicht.
Gruß Tommy
Edit: Meist setzt man im Code die Defaultwerte und überschreibt sie im Setup mit den gespeicherten Werten, wenn welche da sind. Damit hast Du immer gültige Werte.
PROGMEM ist für Konstanten nicht für Variablen. Und da auch nur für größere Dinge wie Strukturen und Arrays. Das sorgt nur dafür dass die Dinge nicht im RAM landen, sondern im Flash bleiben
Sorry hatte ich übersehen, Wenn Du einen Webserver laufen lassen willst, wirst Du ja sicher die Webseite im FS des ESP speichern. Damit macht es natürlich mehr Sinn auch die Sollwerte, Voreinstellungen in einer Datei abzuspeichern. Das könnte eine Textdatei sein die mit dem Download Tool auf den ESP kommt. Wenn die Datei vorhanden ist stehen auch gültige werte drinn, wenn nicht hardcodierte Voreinstellungen.
Ich habe noch 2 Fragen zur strukturierten Programmierung:
Mein struct besteht ja aus verschiedenen Einstellungen (Temperaturen, Schaltzustände, Indizes Tempsensoren)
und nun suche ich sinnvolle Bezeichnungen... wie würdet ihr das benennen?
Ich dachte an diese Bezeichungen:
Und gern würde ich meine Variablen im Code immer komplett groß schreiben, weil ich es übersichtlich finde und sofort sehe, dass es um meine Werte geht... spricht da was gegen?