Requête POST sur un serveur internet via l'Arduino Ethernet shield

Bonjour tout le monde,

Je fais appel à vos connaissance sur l’Ethernet shield d’Arduino ainsi que sur PHP. Je préfère vous prévenir je suis débutant dans ce domaine. :slight_smile:
Alors voila, mon but est de publier sur un serveur internet distant (un LAMP classique sur Raspberry PI) des données de température provenant de l’Arduino, et donc d’alimenter une base de donnée sous SQlite. Pour cela j’ai configuré une requête HTTP POST qui transfère la valeur de la variable temp au serveur. Cela semble fonctionner puisque la réponse à la fonction client.read() est positive et correspond au résultat de la page test.php que j’héberge sur mon Raspberry.

Pour que cela soit plus clair, voici mon script Arduino :

#include <Ethernet.h>
#include <SPI.h>
 
byte mac[] = {  0x90, 0xA2, 0xDA, 0x0D, 0xF6, 0xFF }; 
byte ip[] = {  192, 168, 0, 9};
byte gateway[] = { x,x,x,x };			
  
EthernetClient client;
 
String temp= "data=5";  

void setup()
{
Ethernet.begin(mac, ip, gateway);
Serial.begin(9600);
Serial.println(Ethernet.localIP());
delay(1000);
delay(1000);
Serial.println("connecting...");

if (client.connect("192.168.0.55",80))
{                                 
Serial.println("Sending to Server: ");                    
client.println("POST /test.php HTTP/1.1");           
Serial.print("POST /test.php HTTP/1.1");           
client.println("Host: 192.168.0.55");
client.println("Content-Type: application/x-www-form-urlencoded");
client.println("Connection: close");
client.println("User-Agent: Arduino/1.0");
client.print("Content-Length: ");
client.println(temp.length());
client.println();
client.print(temp);
client.println();                                           
}

else
{
Serial.println("Cannot connect to Server");               
}

}

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

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

}

Et mon fichier test.php :

<?php
echo 'Temperature = ' . htmlspecialchars($_POST["data"]) . '!';
?>

Ainsi la réponse à client.read() sur le terminal de l’Arduino est 5, ce qui prouve que la requête fonctionne, ainsi que la partie PHP.

Cependant si je vais sur mon navigateur, à l’adresse http://192.168.0.55/test.php, seul "Temperature = " est affiché, la valeur (5 en l’occurrence) est absente.
Voila donc si quelqu’un sait comment remédier à ce problème d’affichage ça m’aiderait beaucoup. XD

Guillaume

Bonjour,

SQLite ... c'est plutôt MySQL si tu utilises LAMP :wink:

Sinon le problème est simple, médique sur cette question : Où est le code sauvegardant la température et le code lisant cette même température ?
Réponse : nulle part, c'est donc normal que ça n'affiche rien ...

Reprend les tuto PHP / MySQL du site du zéro tu comprendras rapidement ce qui ne va pas :wink:
http://www.siteduzero.com/informatique/tutoriels/concevez-votre-site-web-avec-php-et-mysql/presentation-des-bases-de-donnees-2

Salut Skywodd,
Merci pour ta réponse. :slight_smile:

SQlite fonctionne également avec apache + php (bon d'accord ce n'est pas totalement un LAMP du coup :D).

Pour ta question, je croyais que la température était stockée dans la variable "data" que j'affiche en PHP, mais d'après ce que tu me dis ce n'est pas aussi simple que ça lol.