🛠 Gérer la flash 4 Mo : partitions et LittleFS
Objectifs
Comprendre où vivent les données sur la flash QSPI 4 Mo de l'ESP-12E et utiliser LittleFS, le système de fichiers moderne du core esp8266 (successeur de SPIFFS, plus robuste aux coupures de courant). Le menu « Flash Size » et « Flash Mode » d'Arduino IDE sélectionnent le schéma de partitions gravé en début de flash : bootloader, deux slots de sketch pour l'OTA, zone NVS (calibration Wi-Fi + paramètrès) et partition de fichiers. Une incohérence entre la flash réelle du module et le preset choisi provoque des boot loops caractéristiques. On apprend à formater, écrire, relire un fichier de configuration et afficher l'espace utilisé.
Matériel
- 1 module ESP8266-ESP-12E avec flash 4 Mo (vérifie le marquage : les clones ESP-12 vendus comme 12E ont parfois 512 Ko ou 1 Mo)
- 1 câble USB-série (le plugin « LittleFS Data Upload » ou l'outil ESP8266FS pour pousser des fichiers depuis l'IDE)
- Alimentation 3,3 V stable ≥ 500 mA
- Arduino IDE + core esp8266 récent (LittleFS y est intégré)
Code complet
#include <ESP8266WiFi.h>
#include <LittleFS.h>
void setup {
Serial.begin(115200);
// Montage ; formatage seulement au premier lancement
if (!LittleFS.begin) {
Serial.println("LittleFS absent -> formatage (efface TOUT)");
if (!LittleFS.format) { Serial.println("Echec format : verifie Flash Size 4MB"); while (true) yield; }
LittleFS.begin;
}
// État de la partition
fs::FSInfo info;
LittleFS.info(info);
Serial.printf("Flash totale : %u Ko | LittleFS : %u Ko utilises sur %u Ko\n",
ESP.getFlashChipSize / 1024, info.usedBytes / 1024, info.totalBytes / 1024);
// Ecriture d'un fichier de configuration
{
File f = LittleFS.open("/config.txt", "w");
if (f) { f.println("ssid=mon-réseau"); f.println("seuil=42"); f.close; }
}
// Relecture ligne par ligne
File f = LittleFS.open("/config.txt", "r");
if (f) {
Serial.println("--- config.txt ---");
while (f.available) Serial.write(f.read);
f.close;
} else {
Serial.println("Fichier absent");
}
// Inventaire
File d = LittleFS.open("/");
if (d.isDirectory) {
File e = d.openNextFile;
while (e) { Serial.printf("%s (%u octets)\n", e.name, e.size); e = d.openNextFile; }
}
}
void loop { yield; }
Vérification attendue
Premier lancement : « LittleFS absent -> formatage » puis l'inventaire affiche config.txt avec ses deux lignes. La ligne d'état doit indiquer environ 4096 Ko de flash totale (sinon ton preset est faux). Relance sans toucher au code : plus de formatage, le fichier est conservé — efface-le depuis le moniteur ou reformate pour revérifier le cycle. Pousse un fichier avec l'outil LittleFS Data Upload : il apparaît dans l'inventaire après redémarrage.
Erreurs fréquentes
- Boot loop « ets ... load 0x40... » après téléversement : la taille de flash déclarée ne correspond pas à la puce réelle (preset 4 Mo sur un clone 1 Mo, ou DOUT sur un module QIO) ; teste l'autre Flash Mode (DIO/DOUT) et vérifie le marquage.
- Croire que LittleFS et SPIFFS partagent la partition : ils occupent la même zone avec des formats différents ; passe l'outil de conversion ou formate, sinon begin échoue.
- Écrire à chaque loop : la flash supporte ~100 000 cycles d'écriture par secteur ; garde l'état en RAM et n'écris que rarement (ou par rotation de fichiers).
- Oublier f.close : les données restent en tampon et le fichier apparaît vide après redémarrage.
- Ouvrir trop de fichiers simultanément : la limite est faible (~10), et chaque fichier ouvert consomme de la précieuse RAM (80 Ko de heap au total).
- Formater pour gagner du temps à chaque boot : l'usure prématurée de la flash se paie en corruption quelques mois plus tard.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht11.inoArduinoluxmetre.inoArduinoserveur-web.inoArduino