Probleme Arduino avec webserveur et datalogger

Bonjour,

Voila quelques semaines que je me suis lancé dans la réalisation d’un petit projet à base d’arduino UNO et d’ethernet Shield. Je souhaiterais via le réseau local piloter 2 relais et lire une température ainsi que pouvoir stocker sur carte SD les mesures de température et les temps de fonctionnement des relais.
Grace aux nombreux exemples j’ai réussi à faire marcher le serveur WEB depuis un fichier “index.htm” stocké sur la carte SD mais impossible accéder à la carte SD pour y écrire les données à intervalle régulier. Soit le fichier texte ne s’ouvre pas soit le programme d’écoute client HTTP plante.
J’ai essayé d’utiliser la methode “blink without delay” ou un timer mais sans succés.
J’ai bien vu un post parlant d’interruption ou de surveiller l’état du PIN 10 mais cela est encore obscur pour moi.

Je précise que le matériel dont je dispose est un FUNDUINO R3 et un ethernet shield W5100 tous deux non officiels.

Merci d’avance pour l’aide que vous pourrez m’apporter.

eth_websrv_SD_V00.ino (9.58 KB)

jamon66:
impossible accéder à la carte SD pour y écrire les données à intervalle régulier. Soit le fichier texte ne s’ouvre pas soit le programme d’écoute client HTTP plante.

Sans code difficile de diagnostiquer le problème.

Peut être une histoire de CS (chip select 10) pour activer le SD et le web à tour de rôle et pas en même temps.

bonjour,
si tu testais déjà si le fichier existe

if (SD.exists("datalog.txt")){ 
   Serial.println("datalog.txt existe.");
  }
else{
dataFile = SD.open("datalog.txt", FILE_WRITE);
datafile.close();
}

je vois pas le rapport entre le http et l'écriture sur la SD.
vu que d'après ton code, tu écris toutes les 60s sur la SD.

Merci pour l’intérêt que vous portez à mon problème.

Christian_R: peux tu m'en dire plus sur le chip select 10 actuellement je fais lors du setup :

    // disable Ethernet chip
    pinMode(10, OUTPUT);
    digitalWrite(10, HIGH);

Infobarquee :l'existence du fichier datalog.txt est téstée au setup, si je charge l'exemple datalogger de la librairie SD. Le programme écrit dans le fichier sans problème.

Je soupçonne un conflit entre HTTP et SD puisque separément ils fonctionnent mais dés que je veux combiner les 2 cela plante le programme.

Copridalement.

le nono ne peut faire du multitache.
donc il faudrait tester
si connexion http=>pas d'écriture SD
sinon écriture SD

jamon66:

Je soupçonne un conflit entre HTTP et SD puisque separément ils fonctionnent mais dés que je veux combiner les 2 cela plante le programme.

bonsoir
AMHA ton probleme vient effectivement d’un conflit d’utilisation (temporel/hard) du signal CS (W5100/SD) .

Faire du log (write) ou lire sur une SD est “vu du soft affectant les signaux” identique.

Suggestion : voir comment la lib TinyWebServer gere ça (exemple fileupload)

La librairie SD n'autorise pas l'ouverture de 2 fichiers en même temps.
Si j'ai bien compris, l'écriture est faite suite à une interruption timer elle est donc asynchrone des accès web et il peut y avoir conflit.
Il faudrait peut être organiser différemment le programme pour que les accès à la carte mémoire soient séquentiels.

fdufnews:
La librairie SD n'autorise pas l'ouverture de 2 fichiers en même temps.
Si j'ai bien compris, l'écriture est faite suite à une interruption timer elle est donc asynchrone des accès web et il peut y avoir conflit.
Il faudrait peut être organiser différemment le programme pour que les accès à la carte mémoire soient séquentiels.

+1

Pour ce genre d'automate, je te conseille d'utiliser une librairie scheduler pour organiser ton code.
Cela te permet d'avoir des traitements distincts qui tournent à intervalles réguliers, mais pas en même temps ni en interruption les uns par rapport aux autres.
Et là plus de conflits.

Merci pour vos remarques.
je me suis rendu compte que la page html servie par l'arduino se rafraîchit toutes les secondes donc en fait il ne reste pas beaucoup de temps pour écrire sur la SD. Je vais essayer de ralonger ce temps et de creuser du coté de la libraire scheduler.
Merci encore pour votre aide.