ESP, serveur WEB hébergé sur SD et non via SPIFFS

Bonjour,

Je me pose la question depuis plusieurs jours sur possibilité de mise à jours facile de mon serveur web hébergé par mon ESP32.

Actuellement les fichiers HTML CSS et JS de mon serveur WEB sont envoyé dans la mémoire SPIFFS de l'ESP 32 via le logiciel Arduino. Rien de bien compliqué mais pas vraiment "commercial" comme approche pour imaginer un aspect "client" notamment pour les mise à jours des fichiers du serveur (ajout de fonctions, augmentation des options ou autres).

Ainsi je me suis posé la question de rendre le processus beaucoup plus simple en utilisant une carte SD qui remplacerais la mémoire SPIFFS.
Mais sur internet je ne trouve aucune explications pour l'utilisation d'une carte SD à la place de la mémoire SPIFFS. J'ai donc tout naïvement simplement remplacé le code :

server.on("/index.html", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send(SPIFFS, "/index.html", "text/html");
  });

Par le code :

server.on("/index.html", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send(SD, "/index.html", "text/html");
  });

Mais bon cela aurait été beaucoup trop facile :slight_smile:

Du coup mes interrogations sont :

-> Est-il possible d'héberger les fichiers web directement sur la carte SD ?
-> Si cela n'est pas possible, est-il possible de rendre plus "user friendly" le transfert de fichier de l'ordinateur dans la mémoire SPIFFS de l'esp32 ?

Merci de votre aide

Flyer-74

Il faut lire les fichier soi-même avec SDFat, ensuite envoyer le contenu à l'aide d'une autre méthode :

request->send(200, "text/html", message);

En procédant de la sorte on perd l'avantage des templates AsyncWebServer, si on les utilise.

D'autre part, l'utilisation d'une SD rend l'application tributaire de la SD elle même, et de sa qualité.
J'ai déjà rencontré des difficultés aléatoires sur un serveur WEB avec certaines SD, y compris de marque connue.

En conservant SPIFFS, il ne devrait pas être bien compliqué d'ajouter une petite interface graphique par dessus esptool.py.

Je suis tout de même surpris que le client ait la possibilité de charger lui même ces fichiers.

 request->send(200, "text/html", message);

Si je comprends bien tu dois récupérer les infos du fichier dans une variable nommé "message" et la cela fonctionne ?

Est ce qu'il est possible de transférer des données depuis la carte SD dans la mémoire SPIFFS ? En parlant d'une interface graphique, on parle depuis le serveur déjà hébergé dans lequel on pourrait upload les fichiers nécessaires et l'ESP supprimerais les ancien et ajouterais les nouveau ?

L'idée n'étant pas que le client change 50 fois par semaine les fichiers du serveur mais que au fur et à mesure des mois / années, le "client" puisse mettre à jours le serveur afin d'y ajouter les dernières fonctionnalités développées. Je ne vois pas comment faire autrement qu'en modifiant immédiatement les fichiers HTML / CSS / JS dans la mémoire de l'ESP.

Merci

Flyer-74

Bonjour

Tu n'es pas obligé d'héberger tes fichiers ressource (html css, js) sur l'ESP lui-même.
L'hébergement peut être déporté sur un serveur tiers et commun à tes ESP.

Mais si tu souhaites que tout soit logé dans l'ESP, tu peux aussi les intégrer directement dans le code source du programme téléversé, sans utiliser SPIFFS.

Si tu regardes le code source de cette bibliothèque, tu y trouveras des choses dont tu peux t'inspirer directement, notamment un utilitaire python qui transforme un répertoire de fichiers ressources en une sous-bibliothèque dans laquelle les fichiers sont convertis en variables progmem.

Et en y ajoutant ArduinoOTA, tu pourras mettre à jour tes fichiers ressource, via un simple téléversement à distance.

En effet j'ai envie d'être totalement en local et donc aucun serveur hébergé à distance.

J'ai bien aussi l'idée de la "MAJ" OTA il faut que je me renseigne sur le sujet qui a l'air vraiment super chouette !

Après j'ai trouvé un super auto ici : SUPER TUTO

J'ai essayé sans grandes convictions et franchement je dois dire que c'est assez énorme ! On à accès aux fichiers stockés dans la mémoire SPIFFS via un FTP et donc, hormis quelque petits réglages initial, on a presque plus qu'a glisser déposer dans un sens ou dans l'autre pour gérer les fichiers !

C'est un bon début étant donné qu'on à pas a modifier tous les jours les fichiers c'est jouable !

Flyer-74