Pages: [1]   Go Down
Author Topic: Ethernet shield - Contrôler DEL en étant en WebClient  (Read 985 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 174
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjours à tous,

Bon j'ai enfin fait l'acquisition d'un ethernet Shield et je dois dire que je trip totalement !
Pouvant lier le web à l'arduino c'est pour moi quelque chose d'incroyable.

J'ai réussi a faire un site web ou le fond de couleur change quand le capteur de son détecte du bruit et tout ceci est accessible depuis n'importe dans le monde smiley

En tout cas je suis la pour une question bien précise. J'ai réussi à prendre le contrôle de DEL en ayant l'arduino en  webserver, j'accède à la page qui est générée par le microcontroller. Malheureusement je trouve que nous sommes pas mal limité niveau programmation  (visuelle, dynamique etc.). Donc mon but est d'être en WebClient. En étant dans ce mode je suis capable d'envoyer des informations et même les stocker dans une base de donnée, qui sont ensuite réutiliser par une autre page web. Mais par contre je n'arrive pas du tout à lire le contenu d'une page avec l'arduino en webclient et donc encore moins récupérer des informations.

J'ai fait différente tentative avec le client.available(); mais il me retourne tout le temps 0. Je pense que je n'Ai pas encore vraiment comment celui-ci fonctionne et qu'est-ce qu'il lie sur la page?

Si certains ont quelques explications, elles seront la bienvenue smiley

Merci d'avance

« Last Edit: June 04, 2011, 03:40:57 am by chesnel » Logged

Offline Offline
God Member
*****
Karma: 3
Posts: 670
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut
Voilà un sujet interessant ,que je voulais également abordé ,car je possède une ethernet shield (V 1.1 HanRun HR911102A ) et pas encore eu le temps de voir comment ça marche  smiley-cry

en espérant que tu ais des réponses .
cordialement
William
Logged

The truth is elsewhere !!

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Essaye ça :

Code:
#include <Ethernet.h>
#include <PString.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {
  192,168,0,177 };
byte server[] = { 217,107,214,2 }; // jfsgeneva.com

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
Client client(server, 80);
String stringOne = "";
long echec=0;

void setup() {
  // start the Ethernet connection:
  Ethernet.begin(mac, ip);
  // start the serial library:
  Serial.begin(9600);
  // give the Ethernet shield a second to initialize:
  delay(1000);
  // Serial.println("connecting...");

  // if you get a connection, report back via serial:

}


void loop(){
 

  Serial.println("connecting...");
  if (client.connect()) {

    Serial.println("connected");
    // Make a HTTP request:
    client.print("GET http://tapage.com");

    client.println(" HTTP/1.1");
    client.print("Host: tapage.com\n");
    client.print("Referer: http://tapage.com\n\n");
    client.println();
    delay(200);
  }
  else if (!client.connected()){
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
 
  }


  // if there are incoming bytes available
  // from the server, read them and print them:
  if (client.available()!=0) {
    int b=client.available();
    for (int a=0; a < b+1000;a++){
      char c = client.read();
     // Serial.print(c);
     
     String stringOne += c;

     

    }
    Serial.println(String stringOne);

    Serial.flush();

  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    Serial.println();
    Serial.println();
    client.flush();
    Serial.flush();
    client.stop();

    // do nothing forevermore:
    // for(;;)
    //   ;
  }
  delay(2000);
}
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Offline Offline
Full Member
***
Karma: 0
Posts: 174
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

yeah merci Jean-François, j'ai trouvé mon erreur ! En plus je suis vraiment idiot car vous en parliez dans un de tes anciens posts
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1282763701/2

Mon oublie et de mettre un delay pour que ce qui faisait que la lecture de l'information ne ce faisait pas (trop immediat)
Quote
   
    client.println("GET http://www.mon-site.com/test/test.php HTTP/1.0");
    client.println();
    delay(200);

Donc maintenant sur ma page j'ai ceci <?=chr(255)?> et quand je change la valeur, l'intensité de ma led change avec smiley

Il ne me reste plus qu'à trouvé comment récupérer plusieurs valeur et je m'attaquerai à l'Interface du site internet en utilisant du JSON  pour avoir un interface ou il n'est pas nécessaire de recharger la page smiley

Merci encore !
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 174
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bon ça marche super ! je peux allumer éteindre une led à distance en webclient.

Par contre des suggestions pour pouvoir récupérer plus qu'une seul valeur ?
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu as quoi dans test.php ?
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Offline Offline
Full Member
***
Karma: 0
Posts: 174
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

juste ceci :

Code:
<?php

include "connect/connect.php";


    
$requete_projet "SELECT * FROM t_led WHERE led_id = 1";
    
$sql_projet mysql_query($requete_projet$link) or die(mysql_error());

    while (
$pro mysql_fetch_array($sql_projet)){
        
$led_etat $pro["led_etat"];
    }

    echo 
chr($led_etat);

?>

ça me permet que l'arduino interroge la page et récupère la valeur de la led mais ça reste juste une information



Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu passes par une requêtes SQL.... en fait pour aussi peu d'info tu as avantage à passer par un fichier .txt que tu modifies par PHP et qui contient l'état de tes leds, tu gagneras du temps dans les requêtes.

Autrement si tu persiste avec une BDD, tu peux simplement appeler tes variables $led1, $led2etc, et afficher leurs états, sachant que celles qui ne sont pas sortie de tra requêtes SQL sont à "0", et tu fait un echo de toutes tes variables et toujours dans le même ordre.

Ainsi coté Arduino tu récupère les états toujours dans le mêms ordre.
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Offline Offline
Full Member
***
Karma: 0
Posts: 174
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

l'idée du fichier txt c'est intéressant. J'ai fait mes essais directement avec une base de donnée car ça me permettais de déjà pouvoir maitriser l'insertion de donnée. Pratique pour mesurer la température et faire un graphe ensuite par exemple.

En faite ou je ne sais pas trop comment faire c'est du coté du code arduino

Pour le moment ça ressemble à ceci
Code:
(client.available()!=0) {
              char c = client.read();
              // Serial.print(c);
              analogWrite(9,c);
           }
           else{
             Serial.println(client.available());
           }

quelle serait la méthode pour récupérer deux valeurs à la suite ?

Merci encore de ton aide précieuse smiley
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Par exemple tu pourrais faire :

Code:
echo 'A';
echo $led1;
echo 'B';
echo $led2;

...etc...etc

Et coté Arduino tu récupères ta trame, tu traite la valeur led1 lorsque tu détectes 'A' jusqu'à 'B' et ainsi de suite....
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ce qui est entre les lettres, tu le mets dans un tableau Led[] et hop !
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Offline Offline
Full Member
***
Karma: 0
Posts: 174
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

donc si j'ai bien compris j'utilise les lettre comme repère pour pouvoir me segmenter les différentes valeur ? je vais regarder par la smiley merci encore
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

C'est une méthode, il doit y en avoir d'autres.
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Offline Offline
Full Member
***
Karma: 0
Posts: 174
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bon je ne me suis pas encore attaquer à la gestion de plusieurs informations... J'ai un soucis plutôt désagréable. La connexion clientWeb avec arduino est instable et fonctionne par intermittence, chose qu'il ne faisait pas du tout hier smiley-sad Voici mon code :

Code:
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x4A, 0x8A };
byte ip[] = { 192,168,1,69 };
//byte server[] = { 173,194,33,104 }; // Google
byte server[] = { 72,55,186,33 }; // w
byte subnet[] = { 255, 255, 255, 0 };    //subnet mask of the network
byte gateway[] = { 192, 168, 1, 254 };   //your router's IP address

Client client(server, 80);


void setup() {
  // start the ethernet connection and serial port:
  Ethernet.begin(mac, ip, gateway, subnet);
  Serial.begin(9600);
  client.flush();
  client.stop();
  // give the ethernet module time to boot up:
  delay(1000);
 
}

void loop() {
   


   Serial.print("connecting : ");
     
     
       if (client.connect()) {
           Serial.println("OK");
           client.println("GET  http://mon_site_web.php");
           client.println();
           delay(200);
         
         
         
         
          if (client.available()!=0) {
              char c = client.read();
              // Serial.print(c);
              analogWrite(9,c);
           }
           else{
             Serial.println(client.available());
           }
           
         
          client.flush();
          client.stop();
       } else {
          Serial.println("KO");
       }
       
   }

 

Une petite idée d’où pourrait venir l'erreur ?
Logged

Pages: [1]   Go Up
Jump to: