[résolu]Envoyer une requêt GET avec arduino vers une page php pour envois de mai

Bonjour Apres avoir chercher sur le web je n'arrive toujours pas a trouver ma réponse!

voici mon problème (je tien que mon niveau de programmation reste très faible et que du coup je pige pas toujours les explication que l'on peut trouver sur le web):

je voudrai depuis mon module arduino équiper de son shield ethernet envoyer une requête POST ou GET vers une page appeler alerte.php situer sur mon site héberger chez free

la dite page .php ce chargera par la suite d'analyser la requête envoyer et de m'envoyer un mail contenant le message qui est fonction de la requête!

coté PHP pas de souci j'ai tester mon code est sa marche si je me connecte a cette page !

Mais alors je ne vois pas du tout comment faire pour que mon arduino se connecte a cette page!

la réponse a une grande importance car elle me permettra(moyennant modification du code bien sur) d'envoyer des donnée par la suite sur une base de donnée voila la question est peut être bette mais je bloque dessus! merci

Bonjour,

Pour faire des requêtes POST ou GET en HTTP tu doit envoyer une série de commande textuelle puis tes données (encodé au format URI).

Le protocole HTTP en détails : http://www.commentcamarche.net/contents/internet/http.php3 http://www.siteduzero.com/tutoriel-3-35613-les-requetes-http.html

Exemple simple de GET : http://arduino.cc/en/Tutorial/WebClient

Exemple simple de PUT (même méthodologie que pour un POST) : http://arduino.cc/en/Tutorial/CosmClient

Merci skywodd, mais cela je l'avais deja vue alors a moins que je ne comprene pas tout dans ce que tu ma envoyer comme lien c'est toujours pour ce conecter a l'arduino depuit le web et repondre non?

je cherche plutot un truc pour faire un envoi automatique d'une requete sans etre conecter a l'arduino, bref que l'arduino "dans sa grande sages" puise tout seul lors d'une condition type

if(a-B>0){
digitalwrite(led,HIGH);
arduino.envoi( 'vers adresse http://monsite.free.fr/alerte.php' method='POST' name='alerte' value='1');
};

bref un truc du genre sacant que j'utilise webserver.h ! je me dit que sa doit etre posible non?

car pour le moment j'arive a comunique depuis une page web sans souci et l'arduino me repon bien voir mon interface si dessous: merci

Dans l'exemple http://arduino.cc/en/Tutorial/WebClient que skywodd a posté, l'arduino fait justement cela (en GET). Au démarrage il appelle l'url http://173.194.33.10/search?q=arduino (dans setup()), puis il attend la réponse du serveur (dans loop()) et l'affiche. Ensuite il ne fait plus rien.

Heloderma-kris: bref un truc du genre sacant que j'utilise webserver.h ! je me dit que sa doit etre posible non?

Webserver (enfin webduino) ne te sera d'aucune utilité ici. C'est à toi de mettre en forme et envoyer la requéte HTTP vers le serveur.

-> Voir l'exemple Webclient comme l'as indiqué olebrun C'est l'exemple le plus simple de requête HTTP : connexion et envoi dans setup(), lecture du résultat dans loop().

je croi mieu comprendre enfin j’esper :roll_eyes:

dans l’idée lorsque ma condition est réalisé je doit initialiser une communication avec le server de free atendre qu’il reponde et ensuite envoyer la requette ?

ou alors une simple requete comme sa fonctionerai? (sans rien faire d’autre)

if (A-B<0) {
    lient.println("GET /http://monsite.free.fr/alerte.php HTTP/1.0");
    client.println();
  }

ou un simple

P(alerte)="GET /http://monsite.free.fr/alerte.php HTTP/1.0";
if (A-B<0) {server.printP(alerte); }

je presise que la page PHP sert a envoyer un mail des que l’on cherche a ouvrire la page!

si j’ai toujours pas compris voici l’explication complète de se que je cherche a faire:

mon module arduino mesure la température et vérifie qu’il ne fait pas trop chaud, si effectivement il fait trop chaud, il ouvre(je cherche a avoir le même effet que lorsque l’on tape l’adresse de la page et que l’on lance la recherche dans un navigateur) la page alerte .PHP situer sur le server free, là, la page ne renvoi rien vers arduino mais le code PHP quel contient m’envois un mail alors que je suis en vacance sur la plage a faire des pâté de sable! moi tout de suite je me connecte a ma page web qui me sert d’interface et je coupe le chauffage!

désoler si j’insiste mais j’ai l’impression de pas m’expliqué correctement et du coût de ne pas avoir la réponse que j’attend =(

enfin merci de chercher à m’aider!!

Je n’utilise pas le shield officiel et sa librairie mais j’imagine que ça ressemblera à cela :

if (A-B<0) {
    if (client.connect(server, 80)) {    // avec serveur  : char server[] = "monsite.free.fr";
        Serial.println("connected");
       // Make a HTTP request:
       client.println("GET /alerte.php HTTP/1.0");
       client.println();
  }
  else {
       // if you didn't get a connection to the server:
       Serial.println("connection failed");
    }
  }

Merci olebrun
ce code que tu ma donné semble fonctioner

 /////////////////////////////////////////////////////////////////////////
 char server[] = "monsite.free.fr";
  	if (client.connect(server, 80)==0) {
    Serial.println("conexion avec le server etabli");
    // faire une requete http:
    client.println("GET/arduino/alertetemp2.php HTTP/1.0");
    client.println();
  } 
  else {
    // s'il n'y a pas de conection server:
    Serial.println("echec de la conection");
  }
///////////////////////////////////////

en serial j’ai bien conexion avec le server etabli, mais je ne reçois pas mon mail je vous joint le code php de la page

je pense qu’il doit me manquer une commande ou une étape (bref je patoge)

<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php
     // Le message
     $message = "alerte temperature/http://xx.xxx.xxx.xxx:xxx/control";

     // Dans le cas où nos lignes comportent plus de 70 caractères, nous les coupons en utilisant wordwrap()
     $message = wordwrap($message, 70);

     // Envoi du mail
     mail('xxxxxx.xxxxx@gmail.com', 'alerte', $message);
?>
</body>
</html>

voila donc pour rappelle dans chrome si j’apelle la page PHP je reçoi bien le mail
donc je me dit que sa doit etre la forme de ma requette qui n’est pas bonne
ou est ce qu’il faut une autre etape?

ps: en journée je peut pas tester mon code du boulo ce qui ralentit le developement de mon programe en tout cas merci a vous deux pour votre aide !!

Il manque un espace apres le "GET", vérifie si c'est pareil dans ton sketch.

oui effectivement dans mon sketch c'est pareille , a ba zut alors si sa vient de ça je suis dégouté de ne pas pouvoir tester de suite :0 bon ce soir quand je rentre je teste ! merci pour tout! je vous tien au jus!

bon même après modification du code (ajout d'un espace entre GET /arduino) mais sa ne marche toujours pas .

quel est la requête qu'envois chrome lorsque l'on cherche a ouvrir une page PHP est ce que c'est un simple GET /XXXXX/XXXX ou est ce que c'est autre chose !

j’ai rééssayer avec ce code

/////////////////////////////////////////////////////////////////////////
   char server [] = "x.x.free.fr"; //Google
  	if (client.connect(server, 80)) {
    Serial.println("conexion avec le server etabli");
    // Make a HTTP request:
    client.println("GET /alertetemp2.php?alerte=1 HTTP/1.1");//
 client.println();
  } 
  else {
    // kf you didn't get a connection to the server:
    Serial.println("echec de la conection");
  }
///////////////////////////////////////

mais meme la sa ne marche pas !
voici le code de la page PHP :

<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php
if ($_GET['alerte']=="1") {
     // Le message
     $message = "alerte temperature/http://x";

     // Dans le cas où nos lignes comportent plus de 70 caractères, nous les coupons en utilisant wordwrap()
     $message = wordwrap($message, 70);

     // Envoi du mail
     
	 $envoi=mail("x@gmail.com",'alerte', $message,"From: $exp\r\n"."Reply-To: $exp\r\n"); 
if($envoi) echo"Le mail a bien été envoyé !"; 
else echo"L'envoi a échoué, merci de renouveller l'opération !"; };
?>
</body>
</html>

sa me donne l’impression que le serveur free n’exécute pas le code php ! et du coût je reçois pas mon mail

Avant de dire que le serveur n'exécute pas le script PHP, essaye d'appeller l'URL dans un navigateur. Est-ce que ca marche ? Est-ce que tu es sur que Free a autorisé l'usage de mail() ?

lorsque j'envoi dans la bar d'adresse de chome : christophe.boulic.free.fr/alertetemp2.php?alerte=1 le navigateur chrome m'afiche: Le mail a bien été envoyé ! et je reçois le mail sans souci a chaque foi! donc je pige vraiment pas pourquoi sa ne fonctione pas

Ok j'ai trouvé. C'est lié à l'hébergement mutualisé des pages perso, il faut aussi envoyer un header Host:

client.println("GET /alertetemp2.php?alerte=1 HTTP/1.1");//
client.println("Host: christophe.boulic.free.fr");//
client.println();

j'ai essayer mais toujours rien :~ voila le code :

 /////////////////////////////////////////////////////////////////////////
   char server [] = "christophe.boulic.free.fr"; //Google
   if (client.connect(server, 80)) {
    Serial.println("conexion avec le server etabli");
    // Make a HTTP request:
    client.println("GET /alertetemp2.php?alerte=1 HTTP/1.1");//
client.println("Host: christophe.boulic.free.fr");//
client.println();
 Serial.println();
  } 
  else {
    // kf you didn't get a connection to the server:
    Serial.println("echec de la conection");
  }
///////////////////////////////////////

Est-ce que tu peux essayer de sortir sur Serial ce qui revient de client ?

ca devrait faire quelque chose du genre :

while ( client.available() ) Serial.print( client.read() );

Qu'est-ce que ca retourne ?

Quand j'envoie la requête depuis un telnet avec le host ca marche.

j'ai bien reçu trois mail qui devai corespondre a tes essai

j'ai intégré ce que tu ma donné comme code comme suit:

/////////////////////////////////////////////////////////////////////////
   char server [] = "christophe.boulic.free.fr"; //Google
   if (client.connect(server, 80)) {
    Serial.println("conexion avec le server etabli");
    // Make a HTTP request:
    client.println("GET /alertetemp2.php?alerte=1 HTTP/1.1");//
client.println("Host: christophe.boulic.free.fr");//
client.println();
while ( client.available() )
  Serial.print( client.read() );
 Serial.println();
  } 
  else {
    // kf you didn't get a connection to the server:
    Serial.println("echec de la conection");
  }
///////////////////////////////////////

mais a par conexion etablie apres plus rien sur le serial

bon je vien de tester ce code qui n’est qu’une modification d’un exemple present ici :http://arduino.cc/en/Reference/ClientAvailable

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

static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

/* Changez cette ip par celle correspondant à votre réseau HOST. Plupart des réseaux domestiques on
 * La sous-plage 192.168.0.XXX ou 192.168.1.XXX. Choisissez une adresse
 * atention a ne pas prendre une ip en cours d'utilisation et ne va pas être attribué automatiquement par
 * DHCP de votre routeur. */
 

static uint8_t ip[] = { 192, 168, 0, 20 };
char server [] = "christophe.boulic.free.fr";

EthernetClient client;

void setup()
{
  Ethernet.begin(mac, ip);
  Serial.begin(9600);

  delay(1000);

  Serial.println("connecting...");

  if (client.connect(server, 80)) {
     Serial.println("conexion avec le server etabli");
    // Make a HTTP request:
    client.println("GET /alertetemp2.php?alerte=1 HTTP/1.1");//
client.println("Host: christophe.boulic.free.fr");//
client.println();
  } else {
    Serial.println("connection failed");
  }
}

void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }
}

et serial m’ecrit:

connecting…
conexion avec le server etabli

disconnecting.

et c’est tout rien de plus
en tout cas merci pour ton aide!!

Et ca marche maintenant ? Si c'est le cas, je ne vois pas ce qui a changé