ESP8266. Sketch data upload pour IDE Arduino. Téléverser des fichiers vers la zone SPIFFS

Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram

Le plugin Sketch Data Upload pour l’IDE Arduino permet de téléverser des fichiers dans la zone mémoire de l’ESP8266 réservée au système de fichier (FS) géré à l’aide du système de fichier SPIFFS. Même si le système SPIFFS est déprécié (et donc ne recevra plus de mises à jour), il subsiste encore dans de nombreux exemples et projets ESP8266. 

 

Les fichiers téléversés devront obligatoirement être gérés à l’aide de la librairie FS.h qui prend en charge le système de fichier SPIFFS
Le système de fichier SPIFFS est déprécié et ne recevra plus de mises à jour dans le futur. Il est fortement conseillé d’utiliser la librairie LittleFS qui lui succède à partir de maintenant. Le transfert de fichiers dans le File System nécessite l’installation de l’outil LittleFS Data Upload pour l’IDE Arduino détaillé dans cet article.
A LIRE AUSSI :
ESP8266. Téléverser avec LittleFS Data Upload pour IDE Arduino

La taille de la mémoire flash varie en fonction du module ESP8266 embarqué sur la carte de développement. Les modules récents disposent généralement d’une mémoire flash de 4Mo dont on pourra allouer 1Mo, 2Mo ou 3Mo au système de fichier (File System – FS).

Pour en savoir plus sur les modules ESP8266

A LIRE AUSSI :
Quel ESP8266EX choisir en 2020. Alimentation, langage C++ Arduino IDE, MicroPython, ESP Easy

Comment organiser les fichiers d’un projet ESP8266 avec SPIFFS ?

Voici un exemple d’arborescence des fichiers d’un projet ESP8266 dont le code de l’interface HTML est séparé du code Arduino. En général, les fichiers d’un serveur WEB sont stockés dans un dossier nommé www.

www/
├── index.html
├── style.css
├── code.js
code.ino

En dehors des fichiers du code Arduino (fichiers .ino, .cpp, .h), tous les autres fichiers devront être déplacés dans un dossier data. L’arborescence du projet Arduino devient celle-ci

Dossier data d'un projet ESP8266

Il est pas possible de créer des sous-dossiers dans le répertoire data. Toutefois, lors du transfert, les fichiers seront mis “à plat”, c’est à dire que les sous-dossiers ne seront pas créés, à la place le fichier prendra comme nom le chemin d’accès. Le séparateur “/” sera intégré au nom de fichier.

Par exemple

data/
├── subfolder
   ├── index.hmtl

deviendra

/data/subfolder/index.hmtl

Vous risquez vite de rencontrer des problèmes si vous dépassez 31 caractères utiles. Par conséquent, il est préférable de limiter la profondeur de l’arborescence.

Installer les outils ESP8266fs (Sketch Data Upload) pour l’IDE Arduino

1 Avant de commencer, vous devez installer le SDK ESP8266 d’Espressif sur l’IDE Arduino. Tout est expliqué en détail dans cet article.

A LIRE AUSSI :
ESP8266. Débuter sur IDE Arduino. Librairies, GPIO, programmation Web Serveur, Client Web, drivers

2 Allez ensuite ici sur GitHub pour récupérer la dernière release (mise à jour) du plugin ESP8266fs pour l’IDE Arduino. Cliquer sur le lien vers l’archive zip du plugin pour lancer le téléchargement.

Télécharger la dernière release du plugin esp8266fs pour IDE Arduino sur GitHub

 

3 Ouvrez le dossier de travail de l’IDE Arduino. En général, il se trouve dans le dossier Mes Documents sur Windows et Documents sur macOS ou Linux. Pour connaître le chemin vers le dossier Arduino, vous pouvez ouvrir les préférences de l’IDE Arduino

Dossier de travail de l'IDE Arduino

 

4 Créez un nouveau dossier appelé tools

5 Décompressez l’archive directement dans le dossier tools. Ne changez pas l’arborescence

Installation du fichier esp8266fs.jar dans le répertoire tool de l'IDE Arduino

6 Rechargez l’IDE Arduino. Après redémarrage, vous devez avoir une nouvelle option dans le dossier outils appelée ESP8266 Sketch Data Upload.

Plugin esp8266fs sketch data upload correctement installé sur l'IDE Arduino

Tout est prêt.

Choisir la taille allouée au système de fichier (FS)

Il est possible d’allouer une certaine quantité de la mémoire flash de l’ESP8266 au système de fichier (FS).

Les modules ESP8266 disposent d’une mémoire flash (similaire aux clés USB). La mémoire flash est découpée et chaque espace est réservée pour chaque fonction :

  • Sketch code C++ du projet
  • OTA update zone tampon utilisée pour télécharger une nouvelle mise à jour du sketch
  • File System (FS) c’est ce qui nous intéresse ici
  • EEPROM une petite zone mémoire qui simule l’EEPROM de l’Arduino. On pourra y stocker des paramètres
  • WiFi config est une zone réservée pour le stockage des paramètres de connexion lorsqu’on développe directement en C++ avec le SDK ESP-IDF
|--------------|-------|---------------|--|--|--|--|--|
^              ^       ^               ^     ^
Sketch    OTA update   File system   EEPROM  WiFi config (SDK)

La taille de la mémoire flash varie d’un fabricant à un autre mais la norme est de 4Mo.

Sélectionner votre carte ESP8266 depuis le menu Outils -> Carte de développement

Puis vous pourrez choisir la quantité de mémoire flash allouée au système de fichier depuis le menu Outils -> Flash Size

Par exemple pour la LoLin – WeMos d1 Mini, il existe 4 choix possibles : aucune allocation 1Mo 2Mo ou 3Mo.

Sélectionner la dimension de la zone mémoire de l'ESP8266 depuis le menu outil de l'IE Arduino

Un programme de test avec SPIFFS

Dans cet exemple, nous allons donc utiliser la librairie FS.h qui est une implémentation du système de fichier SPIFFS.

Créer un nouveau croquis, coller le code ci-dessous et sauvegarder

#include "FS.h"
 
void setup() {
  Serial.begin(115200);

  // Launch SPIFFS file system | Démarre le système de fichier SPIFFS
  if(!SPIFFS.begin()){
    Serial.println("An Error has occurred while mounting SPIFFS");
    return;
  }

  // Open test file in read only mode | Ouvre le fichier de test en lecture seule
  File file = SPIFFS.open("/test.txt", "r");
  if(!file){
    // File not found | le fichier de test n'existe pas
    Serial.println("Failed to open test file");
    return;
  }

  // Display file content on serial port | Envoie le contenu du fichier test sur le port série
  Serial.println();
  Serial.println("Read test.txt file content:");
  while(file.available()){
    Serial.write(file.read());
  }
  file.close();
}
 
void loop() {

}

Que fait ce code ?

On déclare la librairie FS.h qui permet d’accéder à la zone mémoire à l’aide du système de fichier SPIFFS.

#include "FS.h"

On démarre le système de fichier SPIFFS. On signale l’erreur en cas de problème. Ici, le programme s’arrête en cas d’erreur.

if(!SPIFFS.begin()){
  Serial.println("An Error has occurred while mounting SPIFFS");
  return;
}

On ouvre le fichier test.txt avec la méthode open(nom_de_fichier, option) en écriture seule en spécifiant l’option “r” (pour read only). Utilisez l’option “w” pour pouvoir écrire (et écrire) dans un fichier.

File file = SPIFFS.open("/test.txt", "r");

On envoie sur le port série le contenu du fichier texte

while(file.available()){ 
  Serial.write(file.read()); 
}

Et on referme le fichier

file.close();

Ajouter des fichiers dans le dossier data

Il existe un raccourcis permettant d’ouvrir directement le dossier du projet Arduino depuis le menu Croquis -> Montrer le dossier du croquis

Ouvrir le répertoire du projet depuis l'IDE Arduino

Créer un fichier texte avec n’importe quel éditeur de texte et coller un “Hello World” ou n’importe quel texte de votre choix.

Enregistrer le fichier en lui donnant le nom test.txt.

arduino code test spiffs esp8266 text file

Téléverser des fichiers dans la zone mémoire de l’ESP8266 ?

Attention, avant de téléverser des fichiers dans la zone mémoire, le moniteur série et le traceur de graph doivent être fermés.

Pour téléverser les fichiers enregistrés dans la dossier data, il suffit de lancer l’outil depuis le menu Outils -> ESP8266 Sketch Data Upload

Plugin esp8266fs sketch data upload correctement installé sur l'IDE Arduino

L’opération ne dure que quelques secondes

The sketch name had to be modified.
Sketch names must start with a letter or number, followed by letters,
numbers, dashes, dots and underscores. Maximum length is 63 characters.
[SPIFFS] data    : /Users/projetsdiy/Documents/Arduino/projetsdiy/ESP8266/SPIFFS/Test_with_text_file/data
[SPIFFS] size    : 2024
[SPIFFS] page    : 256
[SPIFFS] block   : 8192
/test.txt
skipping .DS_Store
[SPIFFS] upload  : /var/folders/x_/w_k_y_ys531cxjfyvqpk1bwc0000gn/T/arduino_build_315789/Test_with_text_file.spiffs.bin
[SPIFFS] address  : 0x200000
[SPIFFS] reset    : --before default_reset --after hard_reset
[SPIFFS] port     : /dev/cu.usbserial-1420
[SPIFFS] speed    : 921600
[SPIFFS] python   : /Users/projetsdiy/Library/Arduino15/packages/esp8266/tools/python3/3.7.2-post1/python3
[SPIFFS] uploader : /Users/projetsdiy/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.1/tools/upload.py

esptool.py v2.8
Serial port /dev/cu.usbserial-1420
Connecting....
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: b4:e6:2d:13:**:**
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 2072576 bytes to 2687...

Writing at 0x00200000... (100 %)
Wrote 2072576 bytes (2687 compressed) at 0x00200000 in 0.1 seconds (effective 213870.0 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
Remarque. A chaque fois que les fichiers du dossier data sont modifiés, il faudra les téléverser de nouveau manuellement.

Ouvrez le moniteur série et faites un RESET du module ESP8266. Voici ce que vous devriez voir

hello world read test file esp8266 spiffs

 

Il est tout à fait possible d’accéder au système de fichier SPIFFS sur ESP8266 via un client FTP. C’est surtout pratique lorsqu’on développe des projets avec une interface HTML et que l’on ne souhaite pas forcément passer par l’IDE Arduino à chaque fois qu’on souhaite téléverser les fichiers.

A LIRE AUSSI :
ESP8266. Accéder en FTP aux fichiers SPIFFS ou LittleFS. Librairies ESP8266FtpServer et FTPClientServer

Lire, écrire, ajouter des données à un fichier par programmation

Dans la plupart des cas, on aura besoin d’accéder et manipuler (écrire, ajouter des données, renommer, supprimer…) des fichiers directement par programmation avec du code Arduino. C’est possible avec la librairie FS.h présentée dans cet article

A LIRE AUSSI :
ESP8266. Lire, écrire, modifier des fichiers SPIFFS avec la librairie FS.h

Erreurs courantes

OSError: [Errno 16] Resource busy fermer le moniteur série

Mises à jour

11/08/2020 Première publication de l’article

Avez-vous aimé cet article ?
[Total: 1 Moyenne: 5]
Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram

Vous avez aimé ce projet ? Ne manquez plus aucun projet en vous abonnant à notre lettre d’information hebdomadaire!

quel modèle esp8266 choisir
Quel modèle d'ESP8266EX choisir en 2020 ?
guide choix esp32 development board
Quel ESP32 choisir en 2020 ?

Vous rencontrez un problème avec ce sujet ?

Peut-être que quelqu’un a déjà trouvé la solution, visitez le forum avant de poser votre question

Nous serions ravis de connaître votre avis

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Domotique et objets connectés à faire soi-même