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 microcontrô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 quelques 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 mais la fonction write fonctionne de la même manière.
- begin() pour initialiser la taille de la mémoire
- put() pour écrire
- get() pour lire
- commit() pour valider le changement
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