[[microc:accueilmc|{{ :iconemaison.jpg?nolink&30|Sommaire Microcontrôleur}}]]
====== Microcontrôleurs - ESP - Le système de fichiers LittleFS ======
{{ :arduino:memoire:esp8266-spiffs-file-system.jpg?nolink&350|}}
[Mise à jour le 18/8/2023]
* **Sources**
* Le système de fichiers d'un ESP8266
* **Lectures connexes**
* Wiki [[arduino:uc:esp8266|La carte ESP8266 Feather Huzzah]]
* Utilisation de la mémoire SPIFFS d'un ESP8266
* ESP8266. Lire, écrire, modifier des fichiers SPIFFS avec la librairie FS.h
* ESP32. Débuter avec la librairie SPIFFS.h pour lire, écrire, modifier des fichiers.
==== 1. Le système de fichier LittleFS (évolution de SPIFFS)====
* **Sources**
* Le système de fichiers d'un ESP8266
===1.1 Généralités ===
Le système de fichiers **SPIFFS** (sous licence MIT) a été conçu par **Peter Andersson** pour les plateformes légères disposant de peu de mémoire vive. C'est un système de fichiers très simple, **ne supportant pas l'utilisation de répertoires**, mais proposant une interface de programmation assez similaire à celle de GNU/Linux (POSIX).
Une astuce existe, car le caractère "/" est utilisable dans un nom de fichier.
On pourra donc écrire : **/img/logo.png** comme nom de fichier pour simuler un fichier logo.png situé dans un répertoire img.
board_build.filesystem = littlefs monitor_speed = 115200==== 3. Contenu de la zone mémoire File System ==== Les bibliothèques **FS.h** et **LittleFS.h** fournissent les fonctionnalités nécessaires à la mise en oeuvre du système de fichiers. Le code du croquis **infos** ci-dessous affiche l'état du stockage de la zone mémoire du système de fichier d'un ESP8266 et les éventuels fichiers présents.
// IDE : Arduino
// Ressource "Le système de fichiers d'un ESP8266"
// https://arduino-esp8266.readthedocs.io/en/latest/filesystem.html
#include
#include
void setup() {
FSInfo fs_info;
Serial.begin(115200);
delay(500);
if (!LittleFS.begin()) {
Serial.println("Une erreur est apparue lors du montage de LittleFS");
}
else {
//LittleFS.format(); // RAZ zone SPI
LittleFS.info(fs_info);
Serial.println();
Serial.print("Total (octets): ");
Serial.println(fs_info.totalBytes);
Serial.print("Libre(octets): ");
Serial.println(fs_info.totalBytes - fs_info.usedBytes);
Serial.print("Taille de bloc(octets): ");
Serial.println(fs_info.blockSize);
Serial.print("Taille de page(octets): ");
Serial.println(fs_info.pageSize);
Serial.print("Fichiers ouverts simultanément max: ");
Serial.println(fs_info.maxOpenFiles);
Serial.print("Nb caractères max fich: ");
Serial.println(fs_info.maxPathLength);
}
Serial.println("Racine:");
Dir dir = LittleFS.openDir("/");
while (dir.next()) {
Serial.print(dir.fileName());
Serial.print("\t\t");
Serial.println(dir.fileSize());
}
}
void loop() {
delay(100);
}
//Exemple// de résultat obtenu dans le moniteur série si la zone mémoire du système de fichiers est vide. \\ __//Remarque//__ : ouvrir le moniteur série dans l'IDE Arduino avant de télécharger le fichier.
{{ :arduino:memoire:littlefsvide.png?nolink&300 |}}
{{ :arduino:uc:platformioico.png?nolink&50|}}
Algorithme serveurHTTP // Initialisations Se connecter au point d'accès wifi Démarrer le système de fichiers Créer les gestionnaires de requête avec les paramètres : chemin et nom de la fonction de gestion Répéter (toujours) début Attendre une requête fin\\ === 4.3 Code === * **Croquis Arduino**
// IDE Arduino
// https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WebServer
// Bibliothèques
#include
#include
// Connexion au wifi
#include
// mDNS pour la résolution des noms des hôtes
#include
// EEPROM : émule une EEPROM dans l'ESP8266
#include
// Serveur HTTP
#include
// ---------------------------------------------------------------------------------
// Structure pour la configuration de la connexion au réseau wifi
struct EEconf
{ // Les champs sont remplis avec les données préalablement placées en EEPROM émulée
// en utilisant le croquis infoClientMQTT_ESP8266.ino
char ssid[32]; // SSID du réseau. Exemple : SynBoxLAN,
char password[64]; // Mot de passe du réseau. Exemple : 12345678
char myhostname[32]; // Nom donné au client MQTT. Exemple : ESP8266_1
} readconf;
// Objet pour la connexion au réseau wifi
WiFiClient espClient;
// Création d'un serveur HTTP
ESP8266WebServer server(80);
// Connexion au réseau Wifi
// ---------------------------------------------------------------------------------
void setup_wifi()
{
// Mode station
WiFi.mode(WIFI_STA);
Serial.println();
Serial.print("Tentative de connexion à ");
Serial.println(readconf.ssid);
// Connexion au Wifi
WiFi.begin(readconf.ssid, readconf.password);
while (WiFi.status() != WL_CONNECTED)
{
delay(5000);
Serial.print(".");
}
// Affichage
Serial.println("");
Serial.println("Connexion au Wifi ok");
Serial.print("MAC: ");
Serial.println(WiFi.macAddress());
Serial.print("Adresse IP : ");
Serial.println(WiFi.localIP());
// Configuration de mDNS
WiFi.hostname(readconf.myhostname);
if (!MDNS.begin(readconf.myhostname))
{
Serial.println("Erreur de configuration mDNS !");
}
else
{
Serial.println("Répondeur mDNS démarré");
Serial.println(readconf.myhostname);
}
}
// Initialisation
void setup() {
// Configuration du moniteur série
Serial.begin(115200); // pour les tests
delay(500);
// Lecture des paramètres sauvegardés en EEPROM par ARD_ESP_SauveInfosClientMqtt.ino
EEPROM.begin(sizeof(readconf));
EEPROM.get(0, readconf);
// Connexion au Wifi
setup_wifi();
// Démarrage du système de fichiers
if (!LittleFS.begin()) {
Serial.println("Erreur initialisation LittleFS");
}
// Gestionnaires de requête
// (Les requêtes sont automatiquement gérées par la bibliothèque ESP8266WebServer)
server.serveStatic("/", LittleFS, "/index.html");
server.serveStatic("/index.html", LittleFS, "/index.html");
server.serveStatic("/page1.html", LittleFS, "/page1.html");
server.serveStatic("/page2.html", LittleFS, "/page2.html");
server.serveStatic("/page3.html", LittleFS, "/page3.html");
server.serveStatic("/physique.png", LittleFSS, "/physique.png");
server.serveStatic("/menu.css", LittleFS, "/menu.css");
server.serveStatic("/style.css", LittleFS, "/style.css");
server.begin();
}
void loop() {
// Attente et gestion des requêtes
server.handleClient();
}
{{ :arduino:uc:platformioico.png?nolink&50|}}