Afin d’envoyer des données à un serveur il faut créer la requête http.
Afin de « décrypter » la requête à envoyer utilisez l’outil en ligne http://web-sniffer.net/ qui affichera l’HTTP Request Header ou l’extension Chrome « Live HTTP Headers »
Une fois récupéré les informations nécessaires (exemple pour la requête http://mon_site.com/update?contact=porte&statut=ON) :
GET /updatetable.php?contact=porte&statut=ON HTTP/1.1
Host: mon_site.com
Accept: text/html,application/xhtml+xml,application/xml
Accept-Encoding: gzip, deflate, sdch
Accept-Language: fr-FR
Utilisez l’outil http://requestmaker.com/ pour tester la requête ou la version cliente de web-sniffer.
Reportez la requête dans le code Arduino comme ci-dessous
/*
Send data to MySql Database via PHP Page
*/
#include <SPI.h>
#include <SD.h> //-- For SD Card
#include <Ethernet.h>
//-- Contact data
# define inPinPoCour 24 //-- Contact Porte Cour
int val; //-- Valeur du contact
boolean contactPoCour = false;
//-- Local Network Settings
byte mac[] = { 0x00, 0xAD, 0xBE, 0xEF, 0xFE, 0x50 }; //-- Addresse MAC
//-- Settings PHP Page
char PHPSiteAddress[] = "xxxx.com";
//-- Variable Setup
long lastConnectionTime = 0;
boolean lastConnected = false;
int failedCounter = 0;
//-- Initialize Arduino Ethernet Client
EthernetClient client;
void setup()
{//-- Start Serial for debugging on the Serial Monitor
Serial.begin(9600);
//-- Start Ethernet on Arduino
startEthernet();
delay(1000);
}
//-- Sketch test contacts
void loop(){
val = digitalRead(inPinPoCour); // read input value
if (val == LOW) // Contact open
{if (!contactPoCour) //-- If contact was closed
{sendserver("portail","OFF");
contactPoCour=true;}}
else // Contact open
{if (contactPoCour) //-- If contact was open
{sendserver("portail","ON");
contactPoCour=false;}}
}
//-- Send data to server
void sendserver(String contact, String statut){
if (client.connect(PHPSiteAddress, 80))
{
//-- Create HTTP POST Data
String sData = "contact="+contact+"&statut="+statut;
Serial.println(sData);
client.println("GET /updatetable.php?"+sData+" HTTP/1.1");
client.println("Host: xxxx.com");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(sData.length());
client.print("\n\n");
lastConnectionTime = millis();
if (client.connected())
{
Serial.println("Connecting to PhpSite...");
Serial.println();
failedCounter = 0;
}
else
{
failedCounter++;
Serial.println("Connection to PhpSite failed ("+String(failedCounter, DEC)+")");
Serial.println();
}
}
else
{
failedCounter++;
Serial.println("Connection to PhpSite Failed ("+String(failedCounter, DEC)+")");
Serial.println();
lastConnectionTime = millis(); }
//-- Read return
char rc=0;
skipHeader();
while (client.connected()){
if (client.available()>0){
rc= client.read();
break;
}}
if (rc=='1')
Serial.println("Ok");
else
Serial.println("Erreur");
if (client.connected()) {
client.stop(); // DISCONNECT FROM THE SERVER
}
else
Serial.println("ERREUR Envoi au serveur ");
}
//-- Ignore le Header résultat
void skipHeader(){
char lc;
while (client.connected()){
if (client.available()){
char nc=client.read();
if ((lc==10) && (nc==13)){
while (client.available()==0);
client.read();
break;
}
else
lc=nc;
}}}
//-- Connexion Ethernet
void startEthernet()
{
client.stop();
Serial.println("Connecting Arduino to network...");
Serial.println();
delay(1000);
// Connect to network amd obtain an IP address using DHCP
if (Ethernet.begin(mac) == 0)
{
Serial.println("DHCP Failed, reset Arduino to try again");
Serial.println();
}
else
{
Serial.println("Arduino connected to network using DHCP");
Serial.println();
}
delay(1000);
}
La page PHP est :
<?php
//-- Appel pour MAJ du statut d'un contact
// http://xxxx/updatetable.php?contact=porte_entree&statut=ON
//-- récupération du nom du contact et de son statut (par défaut ON) :
$contact = $_GET["contact"];
$statut = $_GET["statut"];
if (empty($contact))
$contact="portail"; //-- Contact par défaut "porte_entree"
if (empty($statut))
$statut="ON"; //-- Statut par défaut ON
//-- connection à MySql
$dbhost = 'sql206.byethost32.com'; //
$dbuser = 'b32_15751138'; //
$dbpass = 'chicco@6';
$dbbase = 'b32_15751138_arduino'; //
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
//die('Could not connect: ' . mysql_error());
die('0');
}
$sql ='UPDATE contacts '.
'SET statut="'.$statut.'", datecontact=NOW(), timecontact=TIMESTAMPADD(MINUTE,45,UTC_TIME()) '.
'WHERE nom="'.$contact.'"';
//////////////////
mysql_select_db($dbbase);
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
//die('Could not enter data: ' . mysql_error());
die('0');
}
echo "1\n";
//echo $contact.":".$statut;
mysql_close($conn);
?>
Merci beaucoup pour votre générosité. Et je vous tiendrais au courant de l’évolution de mon projet.