Problème affichage données page HTML

Bonjour à tous,

J’ai comme projet d’intégrer une page HTML sur une ESP32 sur un réseau Wi-Fi local émit par cette ESP32. De plus, je dois afficher des données variables sur la page HTML, des données correspondant à des relevés de température. Ces données sont stockées sur une carte SD reliée à l’ESP32 où cette dernière ira chercher les données (dans un fichier texte dans l’idéal). J’espère que jusqu’ici c’est clair.

J’ai donc écrit un code où la Wi-Fi est émise, le site HTML est créé et un fichier texte est créé dans la carte SD où j’écris simplement en attendant d’avoir la version finale avec les capteurs. Donc pour le moment, j’essaie d’afficher sur le site HTML les données écrites sur la carte SD.

Seulement, si je poste sur le forum c’est que j’ai rencontré un problème sur l’affichage des “valeurs” sur le site HTML. Par exemple, je veux afficher “Temps1” devant la température du logement 1 alors qu’aucun caractère n’est affiché. Seul un “0” est présent.

Vous trouverez mon code si joint.

J’aimerais donc trouver un peu d’aide pour avancer sur ce projet et pallier ce problème sur lequel je traîne depuis une semaine.

Wifi_HTML_carteSD.ino (8.35 KB)

Évite de mettre ton SSID et ton pass en clair sur des forums…

char buffer[1]="";//code SD

Ceci définit un tableau d’un seul caractère.

 int i = 0;                                      //myFile1
    while(myFile1.available())                    //myFile1
    {                                             //myFile1
      buffer[i] = myFile1.read();                 //myFile1
      i++;                                        //myFile1
    }                                             //myFile1

Ceci lit plusieurs caractères et les stocke dans le tableau à une seule case. D’où dépassement de capacité, et … exécution potentiellement aléatoire.

           client.print("<div style=\"text-align:center\"> <h3>Température : ");
            client.print(myFile1);

Ici tu affiches le pointeur de ton fichier et pas la valeur de la température.

String currentLine = "";Je te conseille d’éviter l’utilisation des String qui peuvent causer des problèmes de mémoire (quoique sur ESP32, il y a de la marge). Utilise plutôt des cstring (tableaux de caractères).

Super merci!
Oui c’est vrai je n’ai pas fait attention.

Mais malgré le fait que j’augmente mon tableau jusqu’à 25 caractères. Le même soucis se présente, c’est à dire le “0”.

  myFile1 = SD.open("/test.txt", FILE_READ);      //myFile1
  int i = 0;                                      //myFile1
    while(myFile1.available())                    //myFile1
    {                                             //myFile1
      buffer[i] = myFile1.read();                 //myFile1
      i++;                                        //myFile1
    }                                             //myFile1
    myFile1.close();                              //myFile1

  myFile2 = SD.open("/test2.txt", FILE_READ);     //myFile2
  int j = 0;                                      //myFile2
    while(myFile2.available())                    //myFile2
    {                                             //myFile2
      buffer[j] = myFile2.read();                 //myFile2
      j++;                                        //myFile2
    }                                             //myFile2
    myFile2.close();                              //myFile2

D’abord tu écris le contenu du premier fichier dans ton buffer. Puis tu écris le contenu du second fichier dans le même buffer. Donc, déjà, tu perds le contenu du premier fichier.

            client.print("<div style=\"text-align:center\"> <h3>Température : ");
            client.print(myFile1);
            client.println("</h3></div>");
            client.print("<div style=\"text-align:center\"> <h3>Consommation : ");
            client.print(myFile2);

Ensuite, au lieu d’écrire le contenu du fichier, tu écris le pointeur de fichier : c’est différent.

Tu dois définir deux buffers : un pour le premier fichier et un pour le second.

  myFile1 = SD.open("/test.txt", FILE_READ);      //myFile1
  int i = 0;                                      //myFile1
    while(myFile1.available())                    //myFile1
    {                                             //myFile1
      buffer1[i] = myFile1.read();  // buffer 1
      i++;                                        //myFile1
    }                                             //myFile1
    myFile1.close();                              //myFile1

  myFile2 = SD.open("/test2.txt", FILE_READ);     //myFile2
  int j = 0;                                      //myFile2
    while(myFile2.available())                    //myFile2
    {                                             //myFile2
      buffer2[j] = myFile2.read();   // buffer2
      j++;                                        //myFile2
    }                                             //myFile2
    myFile2.close();                              //myFile2

Ensuite tu écris le contenu des buffers sur ton site :

            client.print("<div style=\"text-align:center\"> <h3>Température : ");
            client.print(buffer1);
            client.println("</h3></div>");
            client.print("<div style=\"text-align:center\"> <h3>Consommation : ");
            client.print(buffer2);

Bien sûr, tu auras déclaré les variables buffer1 et 2 auparavant

Super! Merci beaucoup! J'ai pu corriger ce problème et avancer sur mon projet.