Téléchargement d'un fichier .txt ou .xml, d'un serveur vers arduino

Bonjour a tous,

Alors voilà tout d'abord je précise que je débute totalement en programmation d’Arduino.
Je demande votre aide pour mon un projet que j'ai a réaliser pour le BAC que je prépare
Le projet a pour but de contrôler différent composant d'un aquarium à distance grâce à une interface web, je précise que l'Arduino et le pc seront relié en ethernet grâce au Sield Ethernet, et tout ça dans un réseau local.

En gros comme sa devrais marché :

  • Tout d'abord l'utilisateur se rend sur le site http://sin241.alwaysdata.net/AquaDistance2.0/afficher_cacher_div.php, remplis le formulaire, puis le site inscrit les ordre de l'utilisateur, par exemple la luminosité des LEDs, l'heure a la quel le distributeur de nourriture doit se mettre en marche, la température de l'eau souhaiter, etc .., dans un fichier texte tout simple grâce a script php, rien de bien compliqué.

  • Ensuite l'Arduino doit lire ce fichier texte et exécute les ordres de l'utilisateur, puis renvoyer à son tour un fichier texte qu'il aura créer. (Fichier texte qui contient tout simplement la température actuelle de l'eau, afin de l'affiche par la suite sur l'interface web)

-> Maintenant venons en a mon problème... la liaison entre le pc et Arduino :

C'est a dire comment Arduino pourrait faire pour télécharger le fameux fichier texte, contenant les ordres, présent sur le serveur web et puis en même l'enregistrer sur la carte SD du shield afin que Arduino puisse continuer a exécuter les ordres lorsque le serveur web est éteins ?

Puis ensuite envoyer le fichier content la température qu'Arduino a prélever ultérieurement, au serveur afin que l'utilisateur puisse voir la température de l'eau de son aquarium sur l'interface.

J'ai penser a utiliser l'Arduino en tant que client FTP mais je ne comprend pas grand chose à la librairie FTP :
http://playground.arduino.cc//Code/FTP#.UxNWo_nkd_c

J'ai aussi pensais a mettre Arduino en Serveur Web mais du coup je ne peux plus utiliser de php comme il n'accepte que des page html, comme dans ce tuto plutôt bien fait :

Enfin bref je suis perdu... ça des quelques semaines que je cherche une solution mais je rester toujours bloquer et ducoup je ne peux pas finir ce projet qui est pour dans 3 mois, j'espère que quelqu'un pourrais m’éclaircir un peu concernant mon problème, je suis sur que c'est quelque chose de tout bête mais j'ai arrive pas... =(

Merci d'avance pour votre aide :slight_smile:

Personne ?

bonjour,
peut être qu'en faisant une recherche sur le forum dans les projets finis tu trouveras ton bonheur :wink:
c'est pas ce qui manque entre
domotique
aquarium
couveuse

comme pour tous les autres, le but est de créer ton propre code pour expliquer son fonctionnement et non avoir un code tout cuit que tu ne comprendras pas :wink:

Merci pour ta réponse,

J'ai un peu cherché sur internet et puis j'ai trouver ceci : [Arduino] Commande à distance d’une led avec un fichier xml (via le web) | Skyduino - Le DIY à la française

Du coup j'ai encore une question, est ce que ce tuto pourrait m'aider ?

Parce que finalement on s'éloigne un peu du côté pratique : Si j'utilise la même méthode que le tuto, du coup l'aquarium ne fonctionnera plus si le réseau entre le PC et l'Arduino est coupé ?

Y'aurait-il pas un moyen de stocker les info lu sur le serveur WEB, afin que le système puisse continuer de suivre les "ordres" hors ligne ? :roll_eyes:

J'ai peut être une petite idée : 8)

  • Le programme Arduino se connecte (comme dans le tuto plus haut) sur le serveur WEB, puis lit un fichier xml (ou txt)
  • Après l'avoir lu il stock ces information dans un (ou plusieurs) fichier qu'il crée sur sa propre carte SD
  • Puis le programme suit les information de la carte SD
  • Ensuite toute les 1 min (par exemple) il relit le fichier xml du serveur WEB, afin de mettre a jour son (ou ses) fichier(s) de la carte SD
  • Et ainsi de suite ..

Qu'est ce que t'en pense ? Est ce que sa ralentirais pas un peu trop l'Arduino ?

Merci d'avance, tu sauve peut être ma note (coef 12) au BAC $)

c'est une solution parmis d'autres.
tu aurais cherché un peu sur le forum dans les projets finis
http://forum.arduino.cc/index.php?topic=102352.0
pas besoin de SD

Salut
Infobarquee a pris le four à micro onde de madame pour faire une couveuse ! :smiley:
J'espère que gwigwi ne prendra pas le lave-linge de sa mère pour faire un aquarium ! :grin:
KO => []

chabot380:
Salut
Infobarquee a pris le four à micro onde de madame pour faire une couveuse ! :smiley:
J'espère que gwigwi ne prendra pas le lave-linge de sa mère pour faire un aquarium ! :grin:
KO => []

d'ailleurs va falloir que j'active pour remettre le cro onde en route pour mes coincs :slight_smile:
ca devient urgentissime

Re bonsoir,

J'ai encore un problème (oui encore ..) alors voilà j'ai suivis ce tuto :

Voici ma fonction loop :

void loop() {
  String str; // String contenant une ligne de la réponse HTTP
  
  char c;     // Char temporaire
  
  delay(10000); // Délai entre deux requêtes (ici 10 secondes)
  
  if (client.connect(server, 80)) {              // Connexion au serveur web
    client.println(F("GET /ordres.xml HTTP/1.0")); // Demande de flux.xml en HTTP 1.0
    //client.println(F("Host: svweb.local"));    // Virtual Host
    client.println(F("Accept: */*")); // */
    // A cause d'un bug de l'ide arduino tout /* d’où avoir son */ associé même dans une chaîne de char
    client.println();
    client.println();
  } else {
    Serial.println(F("Erreur TCP")); // Si erreur lors de la connexion
    return;                          // Quitte loop()
  }
  
  for(;;) { // Boucle infini
    
    if(client.available()) { // Si des données sont disponible sur l'objet EthernetClient
      
      c = client.read();     // Lecture d'un octet
      if(c == '\n') {        // Si fin de ligne atteinte
        
        
        
        
        // (Pensez à mettre une ligne vide à la fin de flux.xml)
        if(str.startsWith("<tempS>")) { // Si la ligne commence par <action>
          
          //Serial.println(str);
          str.replace("<tempS>", "");   //
          str.replace("</tempS>", "");  // Enlève les balises XML
        
          tempS = str;
        }

break;  // Sort de la boucle infini
          str = ""; // Vidage de la ligne
      }
      else
        str += c; // Concaténation de l'octet reçu dans la chaîne de char
    }
  
    if(!client.connected()) // Si la connexion a été perdu
      break;                // Sorti de la boucle infini
  }
  client.stop(); // Fermeture de la connexion avec le serveur

}

Maintenant j'aimerais prendre la donnée qui est entre la balise et , qui est un chiffre du genre 15 (comme 15 °C par exemple ..)
Pour moi la donnée 15 ce trouve dans le "String str" :

String str; // String contenant une ligne de la réponse HTTP

Comme c'est un chiffre j'aimerais l'utiliser comme tel en la mettant dans une variable int, qui s'appelle "tempS" d'ailleurs, oui je sais qu'il fallait pas faire ce que j'ai fait :
tempS = str;

ça m'a mis l'erreur : "error: cannot convert 'String' to 'int' in assignment"

Du coup d'après l'erreur il faudrais convertir le String en Int, est c'est là ma question :

  • Comment faire ceci ?

Merci d'avance,

temps = int(str); pas trop sur
temps = atoi(str); pour un int
temps = atof(str); pour un float

Pour ta dernière question la réponse est là : [résolu] question sur readString.substring - Français - Arduino Forum

je termine un système d'arrosage commander par la tablette de ma femme et je l'ai fais simplement avec des GET ! XD
Mise à l'heure du DS1307 si trop de différence avec l'heure réelle, démarrage arrosage heure et minute et durée d'arrosage, ouverture et fermeture du portail et allumage / extinction de la lumière du jardin. 8)