Envoie de donné php

J'ai acheté mon site internet qui est hébergé sur un vps de ovh.
J'ai aussi acheté un shield ethernet.

Pourquoi avoir fait ce topique ? car je n’arrive pas a envoyer des donné de mon arduino sur ma page php.

Ce code permet d'envoyer la donné '$valeur1' qui est aléatoire et qui est récupéré sur mon site avec la fonction get

J'aimerais donc de l'aide.

Code PhP:

<?php
			if (isset($_GET['valeur1'])) {
			//Test alatoire
				$DATA1 = $_GET['valeur1'];
			} else {
				$DATA1 = 'NULL';
			}
			
		?>

		<h1><?php echo $DATA1;?><h1>

Code Arduino:

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



// Ethernet
byte mac[] = { 0x90, 0xA2, 0x25, 0x0f, 0xCD, 0x5A }; //l'adresse mac
char serverName[] = "http://51.254.127.55/"; 
char host[] = "http://51.254.127.55/"; 
// crée un objet Client appelé client
// port 80 est le port par défaut HTTP
EthernetClient client;

int data1;
unsigned long fin;
unsigned long attente = 10000; //attente de 10000ms entre 2 envoies, soit 10sec

// ------------ FONCTION SETUP = Code d'initialisation ------------
void setup()   {

  fin = 0;

  Serial.begin(9600);

}



//------------  FONCTION LOOP = Boucle sans fin = coeur du programme ------------

void loop() {

  if (millis() > fin) {
    fin = millis() + attente;
    //recueil des données 

    data1 = random(0, 100);
    
    // envoi des données avec la fonction websendData()
    websendData();
  }

}


//////////////// LES FONCTIONS //////////////////////////


//----- Fonction d'envoi des données par ethernet --------
void websendData() {
  digitalWrite (4, HIGH); // désactive la SD carte du module ethernet!
  digitalWrite (10, LOW); //active le  circuit intégré W5100 du module ethernet!
  Ethernet.begin(mac);
  delay(1000);

  if (client.connect(serverName, 80)) {
    // requête HTTP
    Serial.println("connexion avec le server etabli");
    //adresse de la page php du site extérieur qui va recueillir les données
    client.print("GET http://51.254.127.55/index.php"); 
    client.print("$valeur1=");
    client.print(data1);// Test de valeur
    client.println(" HTTP/1.1");
    client.print("Host: " );
    client.println(host); // site
    client.println();
    delay(2000);
    client.stop();
    client.flush();
    digitalWrite(10, HIGH); //désactive le  circuit intégré W5100 du module ethernet!
  } else {
    Serial.print("echec de la connexion");
    client.stop();
    digitalWrite(10, HIGH); //désactive le  circuit intégré W5100 du module ethernet!
  }
}

Merci
Fosco

essaie plutôt avec quelque chose comme :

    client.print("?valeur1=");  // pour envoyer un paramètre dans une page (php) il faut un signe d'interrogation, pas un #

Et dans le code php je change quoi ?

FoscoArduino:
Et dans le code php je change quoi ?

bah rien...

Edit : si, il faut que t'enlèves le $ du 2e _GET[] pour avoir la valeur dans $DATA1

bon alors ? ca marche ou bien ?

Toujours pas :s

en tout cas, je suis allé sur ta page et le script php est ok maintenant. donc c'est coté arduino que ca coince...

Edit : essaie ceci :

     client.print("GET /index.php?valeur1=");
    client.print(data1);// Test de valeur
    client.println(" HTTP/1.1");
    client.print("Host: " );
    client.println("51.254.127.55"); // site    
    client.println("Connection: close");
    client.println();

Cela ne marche toujours pas

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



// Ethernet
byte mac[] = { 0x90, 0xA2, 0x25, 0x0f, 0xCD, 0x5A }; //l'adresse mac
char serverName[] = "http://51.254.127.55/"; 
char host[] = "http://51.254.127.55/"; 
// crée un objet Client appelé client
// port 80 est le port par défaut HTTP
EthernetClient client;

int data1;
unsigned long fin;
unsigned long attente = 10000; //attente de 10000ms entre 2 envoies, soit 10sec

// ------------ FONCTION SETUP = Code d'initialisation ------------
void setup()   {

  fin = 0;

  Serial.begin(9600);

}



//------------  FONCTION LOOP = Boucle sans fin = coeur du programme ------------

void loop() {

  if (millis() > fin) {
    fin = millis() + attente;
    //recueil des données 

    data1 = random(0, 100);
    
    // envoi des données avec la fonction websendData()
    websendData();
  }

}


//////////////// LES FONCTIONS //////////////////////////


//----- Fonction d'envoi des données par ethernet --------
void websendData() {
  digitalWrite (4, HIGH); // désactive la SD carte du module ethernet!
  digitalWrite (10, LOW); //active le  circuit intégré W5100 du module ethernet!
  Ethernet.begin(mac);
  delay(1000);

  if (client.connect(serverName, 80)) {
    // requête HTTP
    Serial.println("connexion avec le server etabli");
    //adresse de la page php du site extérieur qui va recueillir les données
    client.print("GET /index.php?valeur1=");
    client.print(data1);// Test de valeur
    client.println(" HTTP/1.1");
    client.print("Host: " );
    client.println("51.254.127.55"); // site    
    client.println("Connection: close");
    client.println();
    delay(2000);
    client.stop();
    client.flush();
    digitalWrite(10, HIGH); //désactive le  circuit intégré W5100 du module ethernet!
  } else {
    Serial.print("echec de la connexion");
    client.stop();
    digitalWrite(10, HIGH); //désactive le  circuit intégré W5100 du module ethernet!
  }
}

Sinon j'ai lu sur https://www.arduino.cc/en/Tutorial/WebClient que si on avais un dns il fallais faire char server[]

et si on avais pas de dns ( comme moi ) faire IPAddress server(51,254,127,55);

Don j'ai test cela mais ca ne marche pas :

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



// Ethernet
byte mac[] = { 0x90, 0xA2, 0x25, 0x0f, 0xCD, 0x5A }; //l'adresse mac
/*char serverName[] = "http://51.254.127.55/"; 
char host[] = "http://51.254.127.55/"; */

IPAddress server(51,254,127,55);
// crée un objet Client appelé client
// port 80 est le port par défaut HTTP
EthernetClient client;

int data1;
unsigned long fin;
unsigned long attente = 10000; //attente de 10000ms entre 2 envoies, soit 10sec

// ------------ FONCTION SETUP = Code d'initialisation ------------
void setup()   {

  fin = 0;

  Serial.begin(9600);

}



//------------  FONCTION LOOP = Boucle sans fin = coeur du programme ------------

void loop() {

  if (millis() > fin) {
    fin = millis() + attente;
    //recueil des données 

    data1 = random(0, 100);
    
    // envoi des données avec la fonction websendData()
    websendData();
  }

}


//////////////// LES FONCTIONS //////////////////////////


//----- Fonction d'envoi des données par ethernet --------
void websendData() {
  digitalWrite (4, HIGH); // désactive la SD carte du module ethernet!
  digitalWrite (10, LOW); //active le  circuit intégré W5100 du module ethernet!
  Ethernet.begin(mac);
  delay(1000);

  if (client.connect(server, 80)) {
    // requête HTTP
    Serial.println("connexion avec le server etabli");
    //adresse de la page php du site extérieur qui va recueillir les données
    client.print("GET /index.php?valeur1=");
    client.print(data1);// Test de valeur
    client.println(" HTTP/1.1");
    client.print("Host: " );
    client.println("51.254.127.55"); // site    
    client.println("Connection: close");
    client.println();
    delay(2000);
    client.stop();
    client.flush();
    digitalWrite(10, HIGH); //désactive le  circuit intégré W5100 du module ethernet!
  } else {
    Serial.print("echec de la connexion");
    client.stop();
    digitalWrite(10, HIGH); //désactive le  circuit intégré W5100 du module ethernet!
  }
}

Je pense que cela viens du code php qui doit avoir la valeur mais pas la garder. Sinon je vois pas pourquoi cela ne marche pas

essaie de ne pas désactiver le module ethernet au moins dans un premier temps et de ne le faire qu'une seule fois... en gros, fais comme dans l'exemple du tuto officiel au moins pour vérifier que le lien s'établit correctement...
Car je ne te vois pas gérer le DHCP ni d'adresse IP locale donc bon, sans une IP routée vers internet, ca ne marchera pas...

Voila mon test :

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

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
IPAddress server(51,254,127,55);  // numeric IP for Google (no DNS)

IPAddress ip(192, 168, 0, 177);
// Set the static IP address to use if the DHCP fails to assign


// 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):
EthernetClient client;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // try to congifure using IP address instead of DHCP:
    Ethernet.begin(mac, ip);
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:

    client.print("GET /index.php?valeur1=");
    client.print(111);// Test de valeur
    client.println(" HTTP/1.1");
    client.print("Host: " );
    client.println("51.254.127.55"); // site    
    client.println("Connection: close");
    client.println();
  } else {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop() {
  // if there are incoming bytes available
  // from the server, read them and print them:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

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

    // do nothing forevermore:
    while (true);
  }
}

Ce qu'il y a dans la console :

connecting...
connected
HTTP/1.1 200 OK
Date: Fri, 18 Mar 2016 21:17:08 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.45-0+deb7u2
Vary: Accept-Encoding
Content-Length: 417
Connection: close
Content-Type: text/html


<html>
	<head>
		<title>Metarduino</title>
		<link rel="stylesheet" type="text/css" href="style/style.css" />
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
	</head>
	<body>
		<div id="tire">
			<p>Projet arduino (période de test)</p>

		</div>


		<p>Test de relevé aléatoire avec arduino toutes les minutes :</p>



		
		<h1>111<h1>



	</body>
</html>

disconnecting.

Ce que je veux faire c'est de mettre des données affiché au fur et a mesure sur le site ( toutes les 2 minutes )

Mais je pense que ce n'est pas la bonne technique ? en tous cas je sais pas si mettre cela dans une bdd et récupérer la valeurs sera mieux ou autres?

eh bien ! c'est bon ! dans la page que tu récupères t'as bien le 111 que t'as envoyé !
Après, pour stocker dans la bdd il te faut faire ca dans ta page php... t'as beaucoup de tutos à ce propos, notamment dans le site du zéro (OpenClassrooms) par exemple...

Ok merci beaucoup ! je go apprendre mysql !

Au début je pensé que les donné envoyé était permanante

non, tu peux la stocker soit dans un fichier local soit dans une BDD. La pratique la plus courante c'est en effet d'utiliser une BDD.
Bonne continuation !

Mon site fonctionne bien ! merci beaucoup !!

impec ! essaie de nous présenter ton projet plus en détails (dans ce topic même ou un nouveau "dédié") et donne nous des nouvelles ! :wink:

un conseil,
vire l'ip de ton server avant de te faire pourrir la vie :wink:

c'est un serveur OVH si j'ai bien compris, il ne risque pas grand chose...