Transfert de "fichier" entre arduino et esp8266

Bonjour,

je cherche actuellement un moyen pour transférer un fichier entre mon shield SD branché sur l'arduino mega et un ESP8266 dans l'objectif de me connecter avec le téléphone sur l'esp8266 et récupérer le fichier , mais cela me semble impossible, l'es-ce vraiment ? Le shield SD n'est pas primordial, il peut être retiré, néanmoins il me faudrait donc un moyen de transférer les données sur l'esp8266 et créer le fichier sur celui-ci pour ensuite l'envoyer. Le fichier est un fichier csv de quelques ko.

J'ai commandé un esp32 puisqu'il me suffira d'après les conseil des personnes du forum et simplifiera les choses, néanmoins en attendant j'aimerai pouvoir transférer le fichier à l'aide de l'esp8266 si possible

Merci

Tout dépend du logiciel installé sur l'ESP8266.

Si c'est un firmware AT : impossible.

Transfert entre Mega et ESP -> ligne série.
Stockage du "fichier" sur l'ESP : si assez petit, peut être gardé en mémoire de l'ESP.
Récupération par réseau de ESP vers client réseau: Il faut que l'ESP fasse tourner un serveur (TCP ou UDP ou Web ...)

Cela implique que tu dois écrire ton propre programme pour l'ESP (et donc virer le firmware AT).
Ce programme sera à la fois un serveur réseau et un gestionnaire de ligne série pour recevoir les datas de l'Arduino.

Merci , bon bah du coup pas possible j'ai pas de module fdti pour flash le firmware

Re,

Par hasard si je change le firmware et que j'arrive à programmer l'esp8266 comment transférer un fichier sur la liaison série , il faudrait le "décomposer" pour envoyer données par données puis le recomposer ensuite sur l'esp8266 ? ou on peut envoyer directement un fichier ?

Merci

Tout dépend de la taille. Tu peux l'envoyer par bloc de X octets, ou complet si la taille est réduite.

Ensuite il faut avoir une idée du contenu. Si c'est du texte c'est plus simple.

Ce sont les données de mon data logger , c'est à dire une colonne contenant la date (année mois jour heure minutes secondes) et deux colonne contenant des valeurs comprises entre 0 et 2000.

le fichier fera 500ko environ

Merci

Vu la taille tu n’as guère le choix : tu peux par exemple envoyer le fichier ligne par ligne.

D'accord merci, tu saurai ou trouver un tuto par hasard ?

Côté ARDUINO :

  • ouvrir le fichier
  • lire chaque ligne, envoyer avec Serial.Print()
  • fermer le fichier

Côté ESP8266 :

  • si Serial.available()
  • lire chaque ligne avec Serial.readStringUntil('\n') ou Serial.readBytesUntil('\n', buffer, taille)

Il faut signaler côté ARDUINO la fin de fichier.
Si aucune ligne utile du fichier n'est vide, une ligne vide en fin de fichier peut convenir.

EDIT

Mais si tu charges un firmware perso dans l'ESP8266 les fonctionnalités firmware AT seront perdues.

Merci beaucoup , j'ai vu que certains utilisaient la bibliothèque softwareserial , es-ce nécessaire ici ? Ou suffit il de connecter TX/RX entre l'arduino et l'esp et de suivre ton tuto ?

Par ailleurs je ne comprend pas bien le fonctionnement de la fonction Serial.readStringUntil() , je veux dire par là si j'envoie mes lignes et que j'execute cette fonction sur l'esp8266 , comment les variable sont elles retournées au final ? la fonction va renvoyer un string pour chaque ligne que j'envoie depuis l'arduino et je devrais écrire les string dans un fichier à chaque étape ?

De cette manière ? ou suis-je à coté de la plaque ?

while (Serial.available()!=0){
file.print(Serial.preadStringUntil('\n'));
}

D'ailleurs l'arduino doit elle "attendre" que la ligne soit lue et enregistrée pour envoyer la suivante ?

En tout cas merci beaucoup pour ton aide

softwareserial doit être utilisé si l'on désire communiquer sur d'autres GPIOs que RX et TX.

Lire le fichier à partir de la SD prend du temps. Ecrire le fichier dans SPIFFS prend aussi du temps.
Idéalement il faudrait que l'ESP8266 renvoie un caractère d’acquittement que l'ARDUINO attend avant d'envoyer la ligne suivante.

EDIT : SoftwareSerial sera limité en vitesse. Essayer à 9600 ou 19200.

500ko à 9600 baud (1000 octets/s environ) : le temps de transfert sera de 500 secondes, sans compter les temps de lecture SD et écriture SPIFFS !

Merci pour ces infos , si j'utilise les pin RX et TX c'est limité aussi à 9600baud ?

Bien sûr que non.
Même à 230000 baud ou plus c'est OK.

D'accord merci , je vais essayer de programmer tout ça et faire des essais, j'espère que ça va bien fonctionner