Internet vers arduino

salut,
j'ai réactivé un projet commencé ya un petit moment sur la récupération d'information d'un site web qui déclencherais l'arduino.
par exemple les modifications d'un site météorologique viendrais déclencher une led.
Est ce que vous avez des pistes dans ce sens
merci pour votre précieuse aide

Allez, une premiere piste par là :http://www.adafruit.com/index.php?main_page=product_info&cPath=17_21&products_id=83

et un livre : http://oreilly.com/catalog/9780596510510

Pour 55 US tu peux acheter une WiShield, si tu a WiFi. C'est tres rapide et efficace. Je l'utilise pour envoyes de l'information a un seveur qui la publis ensuite sur un site web. Les biblioteque sont tres bien faite.

www.asynclabs.com

Merci pour vos réponses
mais je vais passer par le flux rss ca va être plus simple.Alors la je récupère le flux rss avec processing reste maintenant à sélectionnez ce qui m'interresse dans le flux pour déclenchez un sevomoteur via arduino.
MERCI encore
reste ouvert à toutes suggestions

Tout dépend si l'arduino doit être autonome ou pas.

je suis sous Windows et j'utilise serproxy et php pour publier et interroger mon arduino à distance sur internet.

serproxy sert à router un flux serie (port COM) en créant un socket TCP/IP sur ton pc (interrogeable en php etc ..)

Tu pourrais faire tourner un serveur web sur ton pc avec un script qui se déclenche tout les X temps et qui vérifie ton flux rss et ses publications.
Tu n'aura ensuite qu'a envoyer une commande à l'arduino via ton script php par le biais de serproxy et de son socket<=>com .

salut gaiden
ta piste me semble très prometeuse :smiley: j'explore ca de suite et te tiens au courant

Pas de problème , si il te faut du code ou des exemples je suis la

RE GAIDEN
Mes premières recherches mon amené ici
http://protolab.pbworks.com/TutorialFlashSetup2009
Et tout de suite je me demande après une lecture sommaire si ce n'est pas possible de faire un peu plus simple. Ne puis je pas "commander" directement un actionneur monté sur arduino avec le rss que j'obtiens deja via processing ?

Si tout à fait.
J'ai utiliser php et un serveur web car je désire contrôler mon arduino via internet.

Dans ton cas tu récupère des infos déjà publiées pour agir en conséquence.
Ta méthode est la meilleur pour ton application.

Et j'avoue tres humblement que je ne maitrise pas assez processing comparé à php. :-[

Sur quel point bloques tu ? tu arrives a éclater ton rss et à trouver ce que tu veux dedans ? c'est la partie communication avec l'arduino qui bloque?

Salut
du coté flux rss ya pas de problème après coté arduino
il faut que

  • jétablisse la communication de processing vers arduino et que
    -je parvienne à coder quelque chose comme :
    si le title ou l'item du rss change ou à chaque fois qu'il ya une actulisation du rss > déclencher un actionneur en l'occurrence ici un mini compresseur relié à l'arduino.
    Autant la communication de arduino vers processing je connais autant l'inverse je bloque deja

salut
bon voila le code processing pour récupèrer le rss désiré mais après je ne sais pas trop par ou commencer pour récupèrer avec arduino l'item ou le title

// déclarer l'objet qui contiendra les données RSS
Channel channel;
boolean DEBUG = true;
void setup() {
size(500,500);
   // lors de la création de la chaine, on passe l'adresse du flux RSS
  //channel = new Channel(this, "http://www.assemblee-nationale.fr/rss/rss_cri.xml");
 }
void draw() {
   background(255);
  if (DEBUG) channel.draw();
  }
class Channel {

  PFont affichage;

  String title, description;
  Cri[] cris = new Cri[0]; // créer une liste de Cri vide (chacun avec titre,date,descriptif)

  Channel(PApplet app, String s) {

    XMLElement document;

    affichage = createFont("dialog",9);

    try {
      document = new XMLElement(app, s);
    } 
    catch (Exception e) {
      println(" erreur ):" + e);  
      return;
    }

    if (!document.getStringAttribute("version").equals("2.0")) return;
    if (0 == document.getChildCount() && !document.getChild(0).getName().equals("channel")) return;

    XMLElement channel = document.getChild(0);

    int nombre_items = channel.getChildCount();

    for (int i = 0; i < nombre_items; i++) {

      XMLElement enfant = channel.getChild(i);

      if (enfant.getName().equals("title")) {
        // chercher le titre (son contenu)
        title = enfant.getContent(); 
              }

      if (enfant.getName().equals("description")) {
        // chercher le descriptif
        title = enfant.getContent(); 
              }

      // on a trouvé un <item> (ce qui nous intéresse)
      if (enfant.getName().equals("item")) {

        String titre;
        String date;
        String descriptif;

        // créer des variables temporaires pour les données qui nous intéressent
        try {
          titre = enfant.getChild("title").getContent();
        } 
        catch (Exception e) {
          titre = ""; 
          println(e);
        }

        try {
          date = enfant.getChild("pubDate").getContent();
        } 
        catch (Exception e) {
          date = "";
          println(e);
        }

        try {
          descriptif = enfant.getChild("description").getContent();
        } 
        catch (Exception e) {
          descriptif = "";
          println(e);
        }

        cris = (Cri[])append( cris, new Cri(titre, date, descriptif) );
      }

    }

  }

  void draw() {

    // le debugger
    textFont(affichage);
    textAlign(CENTER,CENTER);

    // s'il n'y a pas eu de données
    if (0 == cris.length) {
      fill(0);
      text("Je n'ai pas pu me connecter au flux rss", random(18,20), random(18,20));
      return;
    }  

    // sinon demander à chaque donner de s'afficher
    for(int i=0; i < cris.length; i++) {
      cris[i].draw();
    }

  }


  class Cri { 

    float x,y;
    String titre, date, descriptif;

    // le constructeur de chaque CRI
    Cri(String _titre, String _date, String _descriptif) {
      titre = _titre;
      date = _date;
      if (null == _descriptif) descriptif = "";
      else descriptif = _descriptif;
      x = random(width);
      y = random(height);
    }

    // dessiner cette dépêche
    void draw() {

      x += random(-1,1);
      y += random(-1,1);

      fill(255,0,0);
      text(titre, x, y); 
      fill(0,255,0);
      text(date, x, y+10); 
      fill(0,0,255);
      text(descriptif, x, y+20); 
    }

  }

}

L'idée c'est que chaque changement rss déclenche un actionneur monté sur arduino
merci pour l'aide

Pour qu'il y est detection de changement d'état , il faut stocker l'etat predecent quelque part ... je ne vois pas comment tu va t'y prendre.

Salut

je viens de travailler su ton projet.

J'ai modifier le code source pour avoir un affichage clair.

Deux problèmes majeures arrivent :

  1. Le code ne rafraichit pas le flux , donc si il y a de nouvelle info , on ne le sait pas

  2. Quand on aura réglé le problème de rafraichissement, il faudra stocker la dernière news (la plus récente) et la comparer avec la plus récente après rafraichissement.

Par contre le passage de la commande de ton actionneur vers l'arduino ne sera pas un problème.

Je continu de chercher , ça m'a prit un quart d'heure ce soir , on avance bien :wink:

PS: le code modifié

// déclarer l'objet qui contiendra les données RSS
Channel channel;

void setup() {

  // lors de la création de la chaine, on passe l'adresse du flux RSS
  channel = new Channel(this, "http://www.assemblee-nationale.fr/rss/rss_presse.xml");
  channel.on_screen();
}


class Channel {

  String title, description;
  Cri[] cris = new Cri[0]; // créer une liste de Cri vide (chacun avec titre,date,descriptif)

  Channel(PApplet app, String s) {

    XMLElement document;


    try {
      document = new XMLElement(app, s);
    }
    catch (Exception e) {
      println(" erreur ):" + e);  
      return;
    }

    if (!document.getStringAttribute("version").equals("2.0")) return;
    if (0 == document.getChildCount() && !document.getChild(0).getName().equals("channel")) return;

    XMLElement channel = document.getChild(0);

    int nombre_items = channel.getChildCount();

    for (int i = 0; i < nombre_items; i++) {

      XMLElement enfant = channel.getChild(i);

      if (enfant.getName().equals("title")) {
        // chercher le titre (son contenu)
        title = enfant.getContent();
      }

      if (enfant.getName().equals("description")) {
        // chercher le descriptif
        title = enfant.getContent();
      }

      // on a trouvé un <item> (ce qui nous intéresse)
      if (enfant.getName().equals("item")) {

        String titre;
        String date;
        String descriptif;

        // créer des variables temporaires pour les données qui nous intéressent
        try {
          titre = enfant.getChild("title").getContent();
        }
        catch (Exception e) {
          titre = "";
          println(e);
        }

        try {
          date = enfant.getChild("pubDate").getContent();
        }
        catch (Exception e) {
          date = "";
          println(e);
        }

        try {
          descriptif = enfant.getChild("description").getContent();
        }
        catch (Exception e) {
          descriptif = "";
          println(e);
        }

        cris = (Cri[])append( cris, new Cri(titre, date, descriptif) );
      }

    }

  }

  void on_screen() {

    // le debugger


    // s'il n'y a pas eu de données
    if (0 == cris.length) {

      println("Je n'ai pas pu me connecter au flux rss");
      return;
    }  

    // sinon demander à chaque donner de s'afficher
    for(int i=0; i < cris.length; i++) {
      cris[i].read();
    }

  }

  class Cri {

    String titre, date, descriptif;

    // le constructeur de chaque CRI
    Cri(String _titre, String _date, String _descriptif) {
      titre = _titre;
      date = _date;
      if (null == _descriptif) descriptif = "";
      else descriptif = _descriptif;

    }

    // dessiner cette dépêche
    void read() {

      println(titre);

      println(date);

      println(descriptif);
      println("------------------------------------------------------");

    }

  }

}

Hop la j'ai fini

Tout fonctionne :wink:

Quand le flux RSS se met a jour , j'allume une led sur mon arduino pendant 3 secondes (on peut imaginer toute sorte d'action : LCD , relais, son ...)

J'attends ton retour pour te donner les deux bouts de code et des explication sur tout ça ! :smiley:

Salut,
désolé pour la réponse un peut tardive, mais l'idée devait murrir avant d'aller plus avant. Finalement je laisse le rss au chaud . Toujours avec la même idée de commander arduino via le net, il s'agit cette fois ci de faire en sorte qu'a chaque fois que quelqu'un se connecte au site internet sela déclenche l'arduino.
La création d'une page PHP dans cette optique te semble t-elle pertinente ?
Merci pour ta réponse et encore désolé pour le retard
http://marcserazin.blogspot.com/

Salut,

Ton arduino devra être mobile? tu hébergeras toi même ton site?
Toutes ces questions sont importantes fain de faire un choix sur les technologies utilisée.