Étiquettes :

L’EEPROM est une mémoire interne du microcontrôleur ESP8266 qui permet de garder en mémoire des données après redémarrage de la carte. Lorsqu’on travaille avec des microcontrôleurs, il est intéressant de conserver en mémoire des données notamment l’identifiant et le mot-de-passe du Wifi.

Matériel

  • Ordinateur
  • NodeMCU ESP8266
  • Câble USB A Mâle/Micro B Mâle

Principe de fonctionnement

Le micrcontrôleur ESP8266 dispose d’une zone mémoire Flash pour simuler l’EEPROM de l’Arduino. C’est un emplacement mémoire particulier du microcontrôleur dans laquelle les données restent en mémoire même après que la carte soit éteinte. Une chose importante à noter est que l’EEPROM a une taille et une durée de vie limitée. Les cellules mémoires peuvent être lues autant de fois que nécessaire mais le nombre de cycle d’écriture est limité à 100 000. Il est conseillé de bien faire attention à la taille des données enregistrées et à la fréquence à laquelle vous souhaitez les mettre à jour. La mémoire EEPROM de l’ESP8266 a une taille de 4Mo.


Si vous souhaitez enregistrer en temps réel les données d’une flotte de capteurs pour tracer des courbes, il vaut mieux s’orienter vers un module de carte SD pour stocker les données.

Code avec la librairie EEPROM

Pour s’interfacer avec l’EEPROM de l’ESP8266, nous pouvons utiliser la librairie EEPROM.h très similaire à celle pour Arduino avec deux différences. Avant d’utiliser la fonction, il faut initialiser la taille de la mémoire avec begin() et la fonction update n’existe pas.

  • begin() pour initialiser la taille de la mémoire
  • put() pour écrire
  • get() pour lire
    D’autres fonctions de la librairie peuvent être employées selon l’utilisation que vous avez de l’EEPROM.
//Libraries
#include <EEPROM.h>//https://github.com/esp8266/Arduino/blob/master/libraries/EEPROM/EEPROM.h

//Constants
#define EEPROM_SIZE 12

void setup() {
  //Init Serial USB
  Serial.begin(115200);
  Serial.println(F("Initialize System"));
  //Init EEPROM
  EEPROM.begin(EEPROM_SIZE);

  //Write data into eeprom
  int address = 0;
  int boardId = 18;
  EEPROM.put(address, boardId);
  address += sizeof(boardId); //update address value

  float param = 26.5;
  EEPROM.put(address, param);
  EEPROM.commit();

  //Read data from eeprom
  address = 0;
  int readId;
  EEPROM.get(address, readId);
  Serial.print("Read Id = ");
  Serial.println(readId);
  address += sizeof(readId); //update address value

  float readParam;
  EEPROM.get(address, readParam); //readParam=EEPROM.readFloat(address);
  Serial.print("Read param = ");
  Serial.println(readParam);

  EEPROM.end();
}

void loop() {}

Résultat

Les valeurs lues correspondent bien aux valeurs enregistrées. Vous pouvez retirer la partie écriture et relancer le code pour vérifier que les valeurs sont bien gardées en mémoire.

Applications

  • Garder en mémoire le ssid et mot de passe du réseau Wifi sur un ESP8266

Sources

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie