Comment faire une requête depuis le web sur un shield ethernet

Bonjour,

J'ai créer un programme pour pouvoir contrôler des LED à partir d'internet. Donc par formulaire, si l'utilisateur rentre a2 (active sortie 2) et e2 (désactive sortie 2) il pourra ensuite appuyé sur des boutons pour qu'il effectue la commande "http://adressedelacarte/?a2" (pour allumer). Cela marche nickel.
Maintenant j'aimerais pouvoir recevoir l'état des lampes, pour savoir lesquelles sont allumées. Donc :
Lampes allumées :
Cuisine
Garage

Donc comment faire cela ?
Sachant que lorsque une lampe s'allume j'ai mis le code suivant :

if(readString.indexOf("?a2") >0)
          {
            digitalWrite(2, HIGH);
            Serial.println("2io");
          }

2io veut dire 2 is on. Comment récupérer le "2io" pour afficher les lampes allumées en temps réel ?

Merci

A la place du serial tu envoie une impression sur l'ethernet avec le client.print

J'y avais penser. Mais alors comment les afficher sur ma page web ? (Je rappel que c'est une page web d'un vrai site), donc pas le site de la carte, qui lui pourra afficher directement l'état des lampes.

Merci beaucoup !

Dans ce cas, tu donnes la valeur dans la réponse de la requête, de préférence bien balisée (en XML), et tu récupères cette réponse dans le site qui l'a appelé.

XavierMiller:
Dans ce cas, tu donnes la valeur dans la réponse de la requête, de préférence bien balisée (en XML), et tu récupères cette réponse dans le site qui l'a appelé.

Pourrais-je avoir plus d'informations ?

Merci

C'est moi qui ai besoin de plus d'informations : comment la page web appelle-t'elle l'arduino ?

XavierMiller:
C'est moi qui ai besoin de plus d'informations : comment la page web appelle-t'elle l'arduino ?

Quand la carte est connecté à ma box, j'ai juste à taper "http://192.168.1.99/" pour accéder à la page de la carte. Mais j'ai voulu aller plus loin, sachant que ma carte était en local j'ai créer un site (vrai URL) avec un espace membre. Je peut ajouter des lampe et en supprimer.
Donc je rajoute la "Cuisine" avec les N° de commande suivants -> a5 et e5 (par formulaire), j'obtiens ensuite un tableau avec un bouton ON qui exécute "http://192.168.1.99/?a5 (allume lampe sortie 5) et le bouton OFF qui exécute "http://192.168.1.99/?e5" (éteint lampe sortie 5).
Pour récupérer les valeurs de ma photorésistance j'utilise iframe.

Donc j'ai un site sur internet, héberger, j'ai ma base de données et vu que j'ai ma carte en local, dès que je fait transiter l'info ?a5 ou ?e5 cela active ou désactive la lampe.
Comment faire pour avoir l'état des lampes allumées ? Avec iframe ? En prenant le même système que pour ma photorésistance ?

Je vous fournis ma voidloop() :

void loop(){
  
  int lumi=0;
  int portana0 = 0;  

  lumi = analogRead(portana0);   
  Serial.print("Luminosite : ");  
  Serial.println(lumi);       
  delay(850);
 
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (readString.length() < 100) {
          readString += c;    
        }
        if (c == '\n') {

          Serial.println(readString); 
 
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
 
          client.println("<HTML>");
          client.println("<HEAD>");
          client.println("<meta name='apple-mobile-web-app-capable' content='yes' />");
          client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");
          client.println("<meta name='viewport'content='width=device-width, initial-scale=1.0'>");
          client.println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>");
          client.println("<link rel='stylesheet' type='text/css' href='http://homeautocss.net84.net/a.css' />");
          client.println("<TITLE>Eclairage intelligent</TITLE>");
          client.println("</HEAD>");
          client.println("<BODY>");
          client.println("<H1>Eclairage intelligent</H1>");
          client.println("<hr />");
          client.println("
");
         
          client.println("<a href=\"/?a2\"\">ALP2</a>");
          client.println("<a href=\"/?e2\"\">ELP2</a>
");
          client.println("
");
          client.println("<a href=\"/?a3\"\">ALP3</a>");
          client.println("<a href=\"/?e3\"\">ELP3</a>
");
          client.println("
");
          client.println("<a href=\"/?a5\"\">ALP5</a>");
          client.println("<a href=\"/?e5\"\">ELP5</a>
");
          client.println("
");
          client.println("<a href=\"/?a6\"\">ALP6</a>");
          client.println("<a href=\"/?e6\"\">ELP6</a>
");
          client.println("
");
          client.println("<a href=\"/?a7\"\">ALP7</a>");
          client.println("<a href=\"/?e7\"\">ELP7</a>
");
          client.println("
");
          client.println("<a href=\"/?a8\"\">ALP8</a>");
          client.println("<a href=\"/?e8\"\">ELP8</a>
");
          client.println("
");
          client.println("<a href=\"/?a9\"\">ALP9</a>");
          client.println("<a href=\"/?e9\"\">ELP9</a>
");
          client.println("
");
          client.println("<hr />");
          client.println("
");
          client.println("Luminosite = ");
          client.println(lumi);  
          client.println("</BODY>");
          client.println("</HTML>");
 
          delay(1);
          client.stop();
          if(readString.indexOf("?a2") >0)
          {
            digitalWrite(2, HIGH);
            Serial.println("LP2A");
          }

          if(readString.indexOf("?e2") >0)
          {
            digitalWrite(2, LOW);
            Serial.println("LP2E");
          }

          if(readString.indexOf("?a3") >0)
          {
            digitalWrite(3, HIGH);
            Serial.println("LP3A");
          }
         
            if(readString.indexOf("?e3") >0)
          {
            digitalWrite(3, LOW);
            Serial.println("LP3E");
          } 
          if(readString.indexOf("?a5") >0)
          {
            digitalWrite(5, HIGH);
            Serial.println("LP5A");
          } 
          if(readString.indexOf("?e5") >0)
          {
            digitalWrite(5, LOW);
            Serial.println("LP5E");
          } 
          if(readString.indexOf("?a6") >0)
          {
            digitalWrite(6, HIGH);
            Serial.println("LP6A");
          } 
          if(readString.indexOf("?e6") >0)
          {
            digitalWrite(6, LOW);
            Serial.println("LP6E");
          } 
          if(readString.indexOf("?a7") >0)
          {
            digitalWrite(7, HIGH);
            Serial.println("LP7A");
          } 
          if(readString.indexOf("?e7") >0)
          {
            digitalWrite(7, LOW);
            Serial.println("LP7E");
          } 
          if(readString.indexOf("?a8") >0)
          {
            digitalWrite(8, HIGH);
            Serial.println("LP8A");
          } 
          if(readString.indexOf("?e8") >0)
          {
            digitalWrite(8, LOW);
            Serial.println("LP8E");
          } 
          if(readString.indexOf("?a9") >0)
          {
            digitalWrite(9, HIGH);
            Serial.println("LP9A");
          } 
          if(readString.indexOf("?e9") >0)
          {
            digitalWrite(9, LOW);
            Serial.println("LP9E");
          } 
          readString="";
        }
      }
    }
  }
}

Merci !!!!

Up,
J'ai déplacer ceci (pour faire le test avec une seul LED)

          if(readString.indexOf("?a2") >0)
          {
            digitalWrite(2, HIGH);
            Serial.println("al2");             
          }

Du code au dessus (vers le milieu) et j'ai ajouter
client.println("Lampe 2 allumé"); en dessous de Serial.println("al2")

Cela marche bien, mais quand je la laisse allumée et je ré ouvre la page comme si c'était la première fois, alors le message n'est pas apparu, comme si la lampe était éteinte, hors ce n'est pas le cas. Et si cela marchais comment je pourrais récupérer ceci sur mon vrai site ?

Tout simplement en utilisant une variable

Au passage, déjà qu'ethernet.h est gourmande en RAM, avec toutes tes chaines de caractère je m'étonne même que ça fonctionne encore ... Utilise F(), un exemple :

client.println(F("<meta name='apple-mobile-web-app-capable' content='yes' />"));

Ca place alors la chaine dans la mémoire flash et non la RAM

B@tto:
Tout simplement en utilisant une variable

Au passage, déjà qu'ethernet.h est gourmande en RAM, avec toutes tes chaines de caractère je m'étonne même que ça fonctionne encore ... Utilise F(), un exemple :

client.println(F("<meta name='apple-mobile-web-app-capable' content='yes' />"));

Ca place alors la chaine dans la mémoire flash et non la RAM

Of merci pour le F, mais vous dîtes qu'il faudrait que j'utilise une variable, mais comment ?

Merci

if(readString.indexOf("?a2") >0)
          {
            digitalWrite(2, HIGH);
           StateLampe2=1;
            Serial.println("LP2A");
          }

          if(readString.indexOf("?e2") >0)
          {
            digitalWrite(2, LOW);
            StateLampe2=0;
            Serial.println("LP2E");
          }

B@tto:

if(readString.indexOf("?a2") >0)

{
            digitalWrite(2, HIGH);
           StateLampe2=1;
            Serial.println("LP2A");
          }

if(readString.indexOf("?e2") >0)
          {
            digitalWrite(2, LOW);
            StateLampe2=0;
            Serial.println("LP2E");
          }

Merci je vais voir ça dans l'après midi

B@tto:

if(readString.indexOf("?a2") >0)

{
           digitalWrite(2, HIGH);
          StateLampe2=1;
           Serial.println("LP2A");
         }

if(readString.indexOf("?e2") >0)
         {
           digitalWrite(2, LOW);
           StateLampe2=0;
           Serial.println("LP2E");
         }

Je pense que j'ai fait un erreur car cela ne marche pas. Enfin si mais, si je clique sur le bouton ?a2 cela met toujours éteint. Si je clique une 2ème fois ça met allume, si je clique sur allume encore sa met éteint. Enfin bref c'est du random quoi
J'ai déclaré int StateLampe2 = 2;

ensuite dans

void setup(){
pinMode(StateLampe2, OUTPUT);
}

Dans le bas de mon code :

          if(readString.indexOf("?a2") >0)
          {
            digitalWrite(2, HIGH);
            Serial.println("al2");
            StateLampe2=1;
          }
          
          if(readString.indexOf("?e2") >0)
          {
            digitalWrite(2, LOW);
            Serial.println("el2");
            StateLampe2=0;
          }

Puis pour le client.prinln un peut plus haut :

          if (StateLampe2 == 1)
          {
            client.println(F("Lampe 2 allumée"));
          }
          else {
            client.println(F("Lampe 2 éteinte"));
          }

Les variables c'est pas mon truc, donc je pense avoir faire une erreur.
Mon code complet :

#include <SPI.h>
#include <Ethernet.h>
 
#include <Servo.h>
Servo myservo;
 
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x03, 0x32 };
byte ip[] = { 192, 168, 1, 99 };
byte gateway[] = { 192, 168, 231, 254 };
byte subnet[] = { 255, 255, 248, 0 };
EthernetServer server(80);
 
String readString;

int StateLampe2 = 2;
 
//////////////////////
 
void setup(){
 
  pinMode(StateLampe2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  Ethernet.begin(mac, ip, gateway, gateway, subnet);
  server.begin();
  Serial.begin(9600);
  Serial.println("Serveur");
}
 
void loop(){
  
  int lumi=0;
  int portana0 = 0;  

  lumi = analogRead(portana0);   
  Serial.print("Luminosite : ");  
  Serial.println(lumi);       
  delay(200);
 
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (readString.length() < 100) {
          readString += c;    
        }
        if (c == '\n') {

          Serial.println(readString); 
 
          client.println(F("HTTP/1.1 200 OK"));
          client.println(F("Content-Type: text/html"));
          client.println();
 
          client.println(F("<HTML>"));
          client.println(F("<HEAD>"));
          client.println(F("<meta name='apple-mobile-web-app-capable' content='yes' />"));
          client.println(F("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />"));
          client.println(F("<meta name='viewport'content='width=device-width, initial-scale=1.0'>"));
          client.println(F("<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>"));
          client.println(F("<link rel='stylesheet' type='text/css' href='http://homeautocss.net84.net/a.css' />"));
          client.println(F(""));
          client.println(F("<TITLE>Eclairage intelligent</TITLE>"));
          client.println(F("</HEAD>"));
          client.println(F("<BODY>"));
          client.println(F("<H1>Eclairage intelligent</H1>"));
          client.println(F("<hr />"));
          client.println(F("
"));
         
          client.println(F("<a href=\"/?a2\"\">al2</a>"));
          client.println(F("<a href=\"/?e2\"\">el2</a>

"));
          client.println(F("<a href=\"/?a3\"\">al3</a>"));
          client.println(F("<a href=\"/?e3\"\">el3</a>

"));
          client.println(F("<a href=\"/?a5\"\">al5</a>"));
          client.println(F("<a href=\"/?e5\"\">el5</a>

"));
          client.println(F("<a href=\"/?a6\"\">al6</a>"));
          client.println(F("<a href=\"/?e6\"\">el6</a>

"));
          client.println(F("<a href=\"/?a7\"\">al7</a>"));
          client.println(F("<a href=\"/?e7\"\">el7</a>

"));
          client.println(F("<a href=\"/?a8\"\">al8</a>"));
          client.println(F("<a href=\"/?e8\"\">el8</a>

"));
          client.println(F("<a href=\"/?a9\"\">al9</a>"));
          client.println(F("<a href=\"/?e9\"\">el9</a>

"));
          client.println(F("
"));
          client.println(F("
"));
          client.println(F("Luminosite = "));
          client.println(lumi);  
          client.println(F("<hr>"));
          client.println(F("
"));
          if (StateLampe2 == 1)
          {
            client.println(F("Lampe 2 allumée"));
          }
          else {
            client.println(F("Lampe 2 éteinte"));
          }
          client.println(F("fonction"));
          client.println(F("</BODY>"));
          client.println(F("</HTML>"));
 
          delay(1);
          client.stop();
          
          if(readString.indexOf("?a2") >0)
          {
            digitalWrite(2, HIGH);
            Serial.println("al2");
            StateLampe2=1;
          }
          
          if(readString.indexOf("?e2") >0)
          {
            digitalWrite(2, LOW);
            Serial.println("el2");
            StateLampe2=0;
          }
          
          if(readString.indexOf("?a3") >0)
          {
            digitalWrite(3, HIGH);
            Serial.println("al3");
          }
          if(readString.indexOf("?e3") >0)
          {
            digitalWrite(3, LOW);
            Serial.println("el3");
          }
          
          if(readString.indexOf("?a5") >0)
          {
            digitalWrite(5, HIGH);
            Serial.println("al5");
          }
          if(readString.indexOf("?e5") >0)
          {
            digitalWrite(5, LOW);
            Serial.println("el5");
          }
          
          if(readString.indexOf("?a6") >0)
          {
            digitalWrite(6, HIGH);
            Serial.println("al6");
          }
          if(readString.indexOf("?e6") >0)
          {
            digitalWrite(6, LOW);
            Serial.println("el6");
          }
          
          if(readString.indexOf("?a7") >0)
          {
            digitalWrite(7, HIGH);
            Serial.println("al7");
          }
          if(readString.indexOf("?e7") >0)
          {
            digitalWrite(7, LOW);
            Serial.println("el7");
          }
          
          if(readString.indexOf("?a8") >0)
          {
            digitalWrite(8, HIGH);
            Serial.println("al8");
          }
          if(readString.indexOf("?e8") >0)
          {
            digitalWrite(8, LOW);
            Serial.println("el8");
          }
          
          if(readString.indexOf("?a9") >0)
          {
            digitalWrite(9, HIGH);
            Serial.println("al9");
          }
          if(readString.indexOf("?e9") >0)
          {
            digitalWrite(9, LOW);
            Serial.println("el9");
          }

          readString="";
 
        }
      }
    }
  }
}

Up ! Merci beaucoup