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

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

La librairie ESP8266FtpServer.h développée par David Paiva (nailbuster) permet d’ajouter un petit serveur FTP à un projet ESP8266. On pourra l’utiliser pour récupérer des fichiers de données ou mettre à jour à distance les fichiers de l’interface HTML, le fichier de données d’une acquisition de données.

 

Le système de fichier SPIFFS pour ESP8266 permet de stocker les fichiers dans la zone mémoire du module ESP8266. On pourra séparer le code de l’interface HTML (fichier HTML, feuille de style CSS, code javascript) ainsi que des fichiers de données ou de paramètres. La librairie fs.h est une implémentation simplifiée du système de fichier SPIFFS avec du code C++ Arduino qui ne propose aucune méthode pour accéder aux fichiers à distances en FTP.

Limitations du système de fichier SPIFFS

Avant de commencer, n’oubliez pas que le système de fichier SPIFFS est très limité.

  • Il n’y a aucune gestion d’arborescence. Les fichiers sont stockés à plat dans la zone mémoire
  • Il est possible d’utiliser le caractère / dans le nom de fichier. On peut créer une pseudo arborescence
  • Le nom de fichier est limité à 31 caractères utiles en incluant l’extension de fichier (4 caractères)
  • Evitez d’utiliser SPIFFS au delà de 128Mo de stockage
  • Le temps d’écriture est très variable

Ajouter la librairie ESP8266FtpServer.h à un projet ESP8266

La librairie ESP8266FtpServer.h est encore en cours de développement. C’est une adaptation de la librairie Arduino de Gallegojm. Elle peut nous rendre bien des services dans deux situations.

Tout d’abord, si vous développé une interface HTML pour un projet ESP8266, vous pourrez mettre à jour les fichiers sans avoir à passer par l’IDE Arduino.

Second cas de figure, vous utilisez l’ESP8266 pour développer un système d’acquisition de données autonome. Vous pouvez profiter du système de fichier SPIFFS pour enregistrer des mesures. Pratique pour reprendre un enregistrement en cas de redémarrage. Cette solution évite également de devoir ajouter un lecteur de carte SD.

Allez sur la page GitHub du projet ici puis téléchargez le code du projet

Ajouter la librairie ESP8266FtpServer à un projet ESP8266

Décompressez l’archive ZIP puis déplacez les fichiers ESP8266FtpServer.cpp et ESP8266FtpServer.h à la racine du projet.

Créer un serveur FTP sur un ESP8266

Créer un nouveau croquis sur l’IDE Arduino et coller le code suivant.

Modifier les paramètres suivants :

  • Identifiant et mot de passe WiFi
  • Identifiant et mot de passe du serveur FTP
#include <ESP8266WiFi.h>
#include "ESP8266FtpServer.h"

const char* ssid = "enter_your_ssid";
const char* password = "enter_your_password";
const char* ftp_user = "esp8266";
const char* ftp_password = "esp8266";
//#define FTP_DEBUG true //enable debug on serial | active les messages debug vers le port série

FtpServer ftpSrv;   
void setup()
{
  Serial.begin(112500);

  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print(" | IP address: ");
  Serial.println(WiFi.localIP());

  Serial.println(F("Inizializing FS..."));

  // Mount SPIFFS File system 
  if (SPIFFS.begin()) {
    Serial.println("SPIFFS opened!");
    // Then start FTP server when WiFi connection in On
    ftpSrv.begin(ftp_user, ftp_password);   
  }
}

void loop() {
  //make sure in loop you call handleFTP()!!
  ftpSrv.handleFTP();        
}

Comment fonctionne le code C++

Comme les fichiers de la librairie sont au même niveau que le fichier ino, on déclare la librairie ESP8266FtpServer.h entre guillemets pour indiquer au compilateur qu’on doit utiliser les fichiers locaux.

#include "ESP8266FtpServer.h"

On créé ensuite l’objet C++ qui permettra de démarrer le serveur FTP et gérer les demandent externes

FtpServer ftpSrv;

A la mise sous tension de l’ESP32, on démarre le serveur FTP à l’aide de la méthode begin() dans le setup(). La méthode begin de l’objet FtpServer prend deux paramètres qui permettent de définir les identifiants de connexion au serveur FTP (utilisateur, mot de passe).

if (SPIFFS.begin()) {
  Serial.println("SPIFFS opened!");
  ftpSrv.begin("esp8266","esp8266");    //username, password for ftp.  set ports in ESP8266FtpServer.h  (default 21, 50009 for PASV)
}

Pour rendre accessible le serveur FTP, il faut appeler à chaque execution de la boucle loop la méthode handleFTP().

void loop(void){
  ftpSrv.handleFTP();
}

D’autres paramètres peuvent être configurés directement dans la librairie

  • define FTP_DEBUG décommentez pour activer l’envoi des messages de debug sur le moniteur série (pratique pour la mise au point)
  • FTP_CTRL_PORT port du serveur FTP. Par défaut, c’est le 21
  • FTP_TIME_OUT temps avant déconnexion automatique (j’ai un doute sur son bon fonctionnement)

C’est terminé, vous pouvez maintenant accéder à vos fichiers à l’aide d’un client FTP tel que FileZilla.

Accéder au système de fichier SPIFFS à l’aide du client FTP Filezilla

Dans la version actuelle, il n’y a que le mode passif qui est supporté. Le SFTP (FTP sécurisé) n’est pas supporté. Si vous ne connaissez pas Filezilla, vous pouvez commencer par lire ce tutoriel.

A LIRE AUSSI :
Comment se connecter en FTP à un Raspberry Pi

Lancez FileZilla. Le plus facile pour se connecter à un ESP8266 en FTP et d’utiliser le gestionnaire de site. J’ai rencontré des difficultés en utilisant la barre de connexion rapide. Ouvrez le gestionnaire de site depuis le menu Fichier et configurez l’accès comme ceci :

  • Hôte adresse IP de l’ESP8266
  • Port 21 (ou celui configuré par la clé FTP_CTRL_PORT)
  • Protocole TFP – Protocole de Transfert de Fichiers
  • Chiffrement Connexion FTP simple (non sécurisé)
  • Type d’authentification  Normale
  • Identifiant et mot de passe 

 filezilla esp8266 ftp connexion spiffs

Lancez la connexion en cliquant sur Connexion. La connexion est maintenant enregistrée par FileZilla, il ne sera plus nécessaire de le refaire.

Comme la connexion n’est pas sécurisée, vous devez accepter l’avertissement avant de pouvoir vous connecter à l’ESP32.

esp32 ftp spiffs filezilla autoriser acces non securise

Une fois la connexion établie, vous avez un accès à tous les fichiers du répertoire Data du projet Arduino.

filezilla fichiers spiffs esp8266 wemos d1 mini

En activant les messages de debug, voici ce qui se passe sur le moniteur série de l’IDE Arduino.

esp8266 ftp spiffs filezilla moniteur serie ide arduino

On gagne beaucoup de temps dans le développement des interfaces HTML en évitant de devoir re-téléverser tout le code du projet sur l’ESP8266.

Le fork de dplasa pour les fichiers LittleFS

Daniel Plasa (page GitHub) a réalisé une adaptation (fork) de la librairie pour la rendre compatible avec le système de fichier LittleFS.

Allez sur GitHub ici et téléchargez le code source du projet

Fork du projet esp8266ftpserver pour système de fichier LittleFS pour ESP32 et ESP8266

Décompresser directement le dépôt GitHub dans le dossier Documents -> Arduino -> Libraries

Relancez l’IDE Arduino

L’exemple LittleFSserver permet d’accéder à distance à la zone mémoire LittleFS en FTP

Exemple FTP LittleFS pour ESP8266

Comme c’est un fork, la programmation est similaire au projet initial de nailbuster.

La librairie n’est pas encore compatible avec l’ESP32.

Mises à jour

14/08/2020 Ajout du fork de Daniel Plasa permettant l’accès au système de fichier LittleFS en FTP

Avez-vous aimé cet article ?
[Total: 0 Moyenne: 0]
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

3 Commentaires
  1. Petite précision sur la gestion des dossiers. C’est une limitation de SPIFFS qui ne gère pas les dossiers et se limite à un niveau de profondeur. En cas de dossier, le chemin est inclus dans le nom du fichier comme on le voit dans ton screenshot. Il n’y a aucune amélioration à attendre de ce côté là, je le crains.

    • Merci beaucoup Jean-Baptiste. Finalement ce n’est pas vraiment un problème pour l’usage qu’on va en faire. Ce n’est pas une clé USB 🙂 Ca surprend la première fois. On range tout bien les fichiers dans des dossiers séparés 😉

  2. très bon tuto.

    Merci.

    J’utilise le serveur ftp depuis un certain temps déjà, mais comme dit dans le tuto, il souffre de quelques faiblesses dont celle d’être un ftp simple (pas sftp).
    Donc la présence d’un port 21 ouvert en permanence me dérange un peu.
    pour régler ce PB j’ai ajouté :
    void FtpServer::close () { // pour fermer le serveur ftp
    ftpServer.close();
    }
    Dans le fichier ESP8266FtpServer.cpp et en ajoutant la déclaration :
    void close();
    dans la partie “public” de ESP8266FtpServer.h

    De cette façon, il est possible d’activer et de désactiver le serveur ftp uniquement lorsque c’est nécessaire.

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