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.
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 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 :
-
Le code ne rafraichit pas le flux , donc si il y a de nouvelle info , on ne le sait pas
-
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
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
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 !
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.