Savoir si mon EEPROM est vide ou non

Salut tout le monde, je cherche un moyen de vérifier si mon EEPROM est vide ou non.

J'ai déjà tenté ce bout de code sauf que si mon Arduino est neuf bah il plante et redémarre :

int addr_ssid = 50;
int addr_password = 51;

const char *ssid = "xxxxx";
const char *password = "xxxxx";

void setup() {

Serial.begin(115200);
  EEPROM.begin(512);

  for (int i = addr_ssid; i < addr_ssid + 50; ++i)
  {
    ssid += char(EEPROM.read(i));
  }

  for (int i = addr_password; i < addr_password + 255; ++i)
  {
    password += char(EEPROM.read(i));
  }
}

Merci à vous

Ce code est bourré d'incohérences.
Comment peux-tu avoir :

  • un ssid à l'adresse 50, de longueur 50, donc qui va occuper les adresses de 50 à 100
  • un password à l'adresse 51, de longueur 255

Les deux se chevauchent largement !

D'autre part ssid += x ne fait qu'incrémenter le pointeur ssid, idem pour le password :woozy_face:

Tu ferais mieux de regrouper ssid et password dans une structure et de lire l'ensemble avec EEPROM.get()

Un ssid fait au maximum 32 caractères, un password 63 :

#include "EEPROM.h"

struct id
{
  char ssid[33];
  char password[64];
};

struct id id = {"myssid", "mypass"};

void setup() {
  Serial.begin(115200);
  EEPROM.begin(512);
  // Deux lignes pour enregistrer id (à commenter après le premier lancement)
  EEPROM.put(0, id);
  EEPROM.commit();
  memset(&id, 0, sizeof(id));
  EEPROM.get(0, id);
  Serial.printf("ssid: %s\n", id.ssid);
  Serial.printf("password: %s\n", id.password);
}

void loop() {
}

Effectivement, en relisant c'est des erreurs

Merci pour ta réponse, pourrais tu juste m'expliquer plus le fonctionnement du code s'il te plaît.

Est-ce que le char[.] est bien compatible avec ça :

Après je ne connais pas cette structure enfin comment ça marche et qu'est-ce que c'est.

struct id id = {"myssid", "mypass"};

Pour l'instant je vais te poser que ces questions et dès que j'aurais compris je t'en poserai une autre.

Merci en tout cas

On peut passer un tableau de char à une méthode qui attend un char *.
Au sujet de la structure :

EEPROM est un peu dépassé pour stocker des paramètres. La préférence actuelle est plutôt preferences :

Je vais lire ça pour en apprendre un peu plus

C'est super ça !

Je ne connaissais pas et c'est pile poil ce qu'il me faut.

Encore merci

Certainement plus pratique :slight_smile:

J'ai une question : coté durée de vie en écritures multiples Eeprom ou Flash même combat.
Et même désavantage Flash.
Référence datasheet avr nombre max d'écriture garanti :
Flash 10 000
Eeprom 100 000

La Flash reste un moyen de stokage à ménager.

Oui mais dans le cas d'un ESP32 EEPROM = FLASH.
https://docs.espressif.com/projects/espressif-esp-faq/en/latest/software-framework/storage.html
Typical flash lifetime is 100 k erase cycles.
Et dans le cas de PepeMax, c'est pour du paramètre de fonctionnement, pas pour enregistrer des donnée périodiquement.