si vous savez où est la fonction qui donne les paramètres à sauver c'est assez simple à modifier en utilisant la bibliothèque Preferences pour sauvegarder les données
voici un modèle de code
#include <Preferences.h>
Preferences preferences;
struct {
int calibration1;
float calibration2;
long calibration3;
} etalonnage;
void imprimerCalibration() {
Serial.print("calibration1 = "); Serial.println(etalonnage.calibration1);
Serial.print("calibration2 = "); Serial.println(etalonnage.calibration2);
Serial.print("calibration3 = "); Serial.println(etalonnage.calibration3);
}
void calibration() {
preferences.begin("calibration", false);
// preferences.clear(); // à décommenter une fois si vous voulez oublier la calibration
if (preferences.getBool("calibrationOK", false)) {
// la calibration avait déjà été effectuée
Serial.println("la calibration avait déjà été effectuée");
etalonnage.calibration1 = preferences.getInt("calibration1", 0);
etalonnage.calibration2 = preferences.getFloat("calibration2", 0);
etalonnage.calibration3 = preferences.getLong("calibration", 0);
} else {
// il faut faire la calibration, ici simulée avec des nombres aléatoires
Serial.println("Premier usage, on effectue la calibration");
etalonnage.calibration1 = random(-100, 101);
etalonnage.calibration2 = random(-100, 101) / 47.0;
etalonnage.calibration3 = random(-10000, 10001);
// puis on effectue la sauvegarde pour la prochaine fois
preferences.putInt("calibration1", etalonnage.calibration1);
preferences.putFloat("calibration2", etalonnage.calibration2);
preferences.putLong("calibration", etalonnage.calibration3);
// et on crée une entrée pour se souvenir que la calibration a été effectuée
preferences.putBool("calibrationOK", true);
}
imprimerCalibration();
preferences.end();
}
void setup() {
Serial.begin(115200);
calibration();
}
void loop() {}
on utilise une clé spéciale du nom calibrationOK pour savoir si les données de calibration ont été déjà stockées. Si oui on ne fait que les lire, si non on effectue la calibration avec le process standard (ici simulé avec des nombres aléatoires) et on enregistre les valeurs sous forme de clé/valeur (utiliser la bonne fonction putXXX() en fonction du type XXX de votre variable) et on écrit la clé spéciale calibrationOK à vrai pour le prochain boot.
chargez le code ci dessus. au premier lancement vous verrez
Premier usage, on effectue la calibration
calibration1 = 32
calibration2 = -0.09
calibration3 = 7749
puis si vous rebootez (faites un reset de l'ESP32)
la calibration avait déjà été effectuée
calibration1 = 32
calibration2 = -0.09
calibration3 = 7749
➜ on a bien relu les valeurs
une fois qu'on a compris le principe, au lieu de s'ennuyer à sauver chaque champ de la structure, on peut sauver la structure elle même en binaire avec
putBytes(const char* key, const void* value, size_t len)
et la relecture se faite avec
getBytes(const char* key, void * buf, size_t maxLen)
ce qui fait que l'on peut simplement rajouter autant de champs que l'on veut dans la structure, elle se sauve et se recharge d'un bloc.