IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

SPIFFS - Ecriture de fichiers - Nombre ? [Arduino ESP32]


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut SPIFFS - Ecriture de fichiers - Nombre ?
    Bonjour à tous

    Ma question est: puis-je avoir 100 fichiers de 8 octets déclarés dans le système SPIFFS d'un ESP32 avec 3.145.728 octets de flash memory?

    J'utilise le système de fichiers SPIFFS pour stocker des informations de 8 octets.
    exemples: O1500715 qui correspond à Ouverture du système 1 à 50% à 07h15.
    Mes fichiers devraient s'appeler: M00, M01, M02,......., jusqu'à M99 si j'ai 100 fichiers.

    Je n'ai pas trouvé d'information sur la taille prise par enregistrement.
    Si quelqu'un pouvait m'éclairer. Merci

  2. #2
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 889
    Par défaut
    Salut Mormic.

    Ce n'est pas une bonne idée de procéder ainsi.
    Si je devais gérer vos données, j'utiliserai pour cela l'organisation séquentielle indexée.
    Sauf que jusqu'à présent, je n'en ai pas eu besoin.
    Et je n'ai pas cherché à savoir comme faire dans un ESP32 pour répondre à votre question.
    Attention, je ne parle pas des SGBD, qui pour la plupart aujourd'hui sont de type relationnelle.

    Si par contre, la volumétrie risque d'être un problème, dans ce cas, oui, il vous faut une base de données.
    Elle sera distante, sur un serveur, comme MySql et votre ESP32 devra y accéder.

    Cordialement.
    Artemus24.
    @+

  3. #3
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    Merci Artemus pour cette solution.

    Si je devais gérer vos données, j'utiliserai pour cela l'organisation séquentielle indexée.
    C'est à dire que je devrais mettre toutes mes informations bout à bout dans un seul fichier SPIFFS et avoir un fichier index qui m'indique où sont les infos.
    par exemple: O1500715F2801920O5602130... pour les données et 000816... pour l'index sur deux ou trois octets selon la taille du fichier.

    ou bien en recherchant en série les débuts d'enregistrement par leur longeur.
    par exemple: 08O150071508F280192010O560213027.....

    Je préfère ne pas avoir à utiliser une base de données externes pour ce projet.

    Cordialement
    Michel

  4. #4
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 889
    Par défaut
    Salut mormic.

    Ma réponse est ce qui m'est venu à l'esprit en vous lisant.
    A vrai dire, ce n'est pas la plus judicieuse du tout, mais l'idée est bien d'indexer ses données.

    Votre question est légitime mais nous ne connaissons pas la raison qui vous amène à stocker vos données.
    Pourquoi avez-vous besoin de stocker cela dans la mémoire flash de l'ESP32 ?

    Cela me fait penser à une trace de chaque changement d'état de vos systèmes.
    Le système 1 s'ouvre à telle heure avec telle niveau d'ouverture.
    Puis il va se ferme à telle autre heure et ainsi de suite durant toute la journée.

    Et ensuite, qu'est-ce que vous faite de ces données ?
    Le lendemain, je suppose que ceux de la veille sont supprimées, non ?

    Citation Envoyé par mormic
    Je préfère ne pas avoir à utiliser une base de données externes pour ce projet.
    Pourquoi donc ? Pas de statistiques en vue sur une longue période ?
    Histoire de connaitre le rendement de vos système, par exemple.

    Je ne suis pas du tout familiarisé avec le SPIFFS.
    J'utilise LITTLE FS pour stocker des fichiers de type HTML, CSS et javascript.
    Ceux-ci ne sont lus et envoyés car dans mon projet domotique, je gère un mini serveur web.

    Quelle est la volumétrie de ce stockage ?
    Vous dites : " si j'ai 100 fichiers."
    Dois-je comprendre que vous pourriez avoir bien plus de 100 fichiers ? Quelle est le maximum ?

    La taille de la mémoire flash est limité à 4Mo. Est-ce suffisant ?

    J'ai fait une recherche sur le net afin de connaitre les ordres à appliquer au SPIFFS.
    Le SPIFFS est-il opérationnel : "if(!SPIFFS.begin(true)){".
    Pour ouvrir en mode append : "myfile = SPIFFS.open("/test.txt", FILE_APPEND);".
    Pour ouvrir en mode read : "myfile = SPIFFS.open("/test.txt", FILE_READ);".
    Pour fermer : "myfile.close();".
    Pour ajouter : "myFile.print("votre ligne");".
    Pour lire séquentiellement : "while(myFile.available()) { String line = myFile.read()); }"

    Je n'ai rien trouvé sur une lecture relative et c'est dommage car cela vous aurait évité de créer un tableau.

    Au démarrage de votre ESP32, vous lisez le contenu de votre fichier SPIFFS que vous stocker dans une structure.
    La structure sera un tableau indicé. Les indices en 'C' commence à partir de 0. Elle est la suivante :
    --> mode : 1 char : ouverture ou fermeture
    --> system : 1 char : numéro d'identification du système.
    --> pour : 1 smallint : pourcentage
    --> heure : 1 integer : l'heure.

    Rappel : smallint occupe deux octets, tandis que integer occupe quatre octets

    A chaque nouvelle ajout, vous le faites en fin de fichier.

    Citation Envoyé par mormic
    Je n'ai pas trouvé d'information sur la taille prise par enregistrement.
    C'est celle de la structure, donc huit octets + un octet contenant le caractère nul.
    Le nul est la marque de fin de la chaîne de caractères.

    Dans votre tableau, pour accéder à la nième ligne, il suffit de dire tab[n]. Pour lire l'heure, tab[n].heure.

    Cordialement.
    Artemus24.
    @+

  5. #5
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    Votre question est légitime mais nous ne connaissons pas la raison qui vous amène à stocker vos données.
    Pourquoi avez-vous besoin de stocker cela dans la mémoire flash de l'ESP32 ?
    Je charge dans la mémoire flash des programmes de manoeuvre de volets roulants . Par exemple "Ouvrir le volet N°1 à 100% à 07h00, Fermer le volet N° 1 de 40% à 12h15, etc (soit 8 octets nécessaires)
    Au niveau du SPIFFS, l'enregistrement se fait ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //***************** Ecriture SPIFFS **********************************
    void ecritureFichier(fs::FS &fs, const char *dir, const char *message){
      File fic = fs.open(dir, FILE_WRITE);
      if(!fic){
        sBt.println(msg[1]);    //"Pas de fichier"
        return;
      }
      if(fic.print(message)){
        sBt.println(msg[2]);    //"Fichier ecrit"
      } else {
        sBt.println(msg[3]);    //"Erreur d'ecriture"
      }
      fic.close();
    }
    Avec pour dir par exemple: /M05.txt dans lequel le message est mon enregistrement O1800715 pour Ouverture volet 1 de 80% à 07h15.
    Je peux avoir jusqu'à 10 programmes de 10 manoeuvres. En fonction de la saison, ou autre, je sélectionne un programme. Celui-ci restera actif jusqu'au moment où j'en sélectionnerai un autre.
    Donc j'ai besoin de 10 x 10 x 8 octets ce qui n'est pas énorme.
    C'est assez simpliste, mais cela fonctionne bien avec pour l'instant que quelques fichiers. Je ne voudrais pas, après avoir monté tout le système, me rendre compte qu'il y a une limite.
    Ce que je ne sais pas, c'est si le système SPIFFS accepte d'avoir 100 pseudo-directories. C'est à dire puis-je avoir de /M00.txt à M99.txt fichiers.
    La solution serait d'essayer sur ma maquette de programmer 100 manoeuvres ce qui est fastidieux et pas très élégant!

    Sinon je vous remercie pour toutes les informations intéressantes que vous divulguez.

    Cordialement
    Michel

  6. #6
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    683
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 683
    Par défaut
    Salut,

    D’après la doc que j'ai lue en diagonale, chaque fichier occupera au minimum 4096 octets.
    Il est donc préférable de tout mettre dans un seul fichier et des fonctions genre seek/fseek permettront de s'y déplacer facilement.

    https://docs.espressif.com/projects/...ge/spiffs.html

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Arduino ESP32] [Arduino EDI 2.x] Installer système de fichiers SPIFFS
    Par Artemus24 dans le forum Arduino
    Réponses: 10
    Dernier message: 18/07/2025, 16h49
  2. [Arduino ESP32] SPIFFS - Ecriture des fichiers - incompréhension
    Par mormic dans le forum Arduino
    Réponses: 8
    Dernier message: 05/02/2023, 09h18
  3. Réponses: 6
    Dernier message: 30/06/2021, 18h24
  4. Ecriture liste de nombre dans un fichier
    Par fredd0 dans le forum Débuter
    Réponses: 2
    Dernier message: 23/03/2008, 12h58
  5. Ecriture de fichier
    Par Walm dans le forum C
    Réponses: 4
    Dernier message: 10/09/2003, 15h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo