[Résolu] Problème upload vers un script php

Bonsoir,

J'ai retourné un bon bout d'Internet et de ce forum mais impossible de trouver la solution. J'ai une sonde 1Wire et je souhaite l'injecter dans une base de donnée toute les heures. Pour l'instant l'envoi de la requete est dans le setup une fois que ca fonctionnera je le mettrais dans le loop pour que ca boucle. J'ai testé plein de config mais impossible d'envoyer la requete. Actuellement je fais un get avec la temperature inscrite directement en paramètre pour débugger mais rien n'y fais. J'ai l'impression que la requête est mal formée et que ca "ne part pas". Au niveau du get j'ai essayer avec un / devant le http comme dans certains ex ca ne passe pas, j'ai essayer avec juste le fond de l'url dans l'hôte c'est pareil... Si vous avez une idée.. :frowning:

Merci.

// ***** INCLUSION DES LIBRAIRIES NECESSAIRES *****
#include <OneWire.h>
#include <SPI.h>
#include <WiFly.h>
#include "Credentials.h"

// ***** DEFINITIONS DES VARIABLES *****
#define DS18B20 0x28 // Adresse 1-Wire du DS18B20
#define BROCHE_ONEWIRE 8 // Broche utilisée pour le bus 1-Wire

OneWire ds(BROCHE_ONEWIRE); // Création de l'objet OneWire ds
byte server[] = { 66, 249, 89, 104 }; // Google
////////////////////////////

//Client client(server, 80);

// Fonction récupérant la température depuis le DS18B20
// Retourne true si tout va bien, ou false en cas d'erreur
boolean getTemperature(float *temp){
byte data[9], addr[8];
// data : Données lues depuis le scratchpad
// addr : adresse du module 1-Wire détecté

if (!ds.search(addr)) { // Recherche un module 1-Wire
ds.reset_search(); // Réinitialise la recherche de module
return false; // Retourne une erreur
}

if (OneWire::crc8(addr, 7) != addr[7]) // Vérifie que l'adresse a été correctement reçue
return false; // Si le message est corrompu on retourne une erreur

if (addr[0] != DS18B20) // Vérifie qu'il s'agit bien d'un DS18B20
return false; // Si ce n'est pas le cas on retourne une erreur
ds.reset(); // On reset le bus 1-Wire
ds.select(addr); // On sélectionne le DS18B20
ds.write(0x44, 1); // On lance une prise de mesure de température
delay(800); // Et on attend la fin de la mesure
ds.reset(); // On reset le bus 1-Wire
ds.select(addr); // On sélectionne le DS18B20
ds.write(0xBE); // On envoie une demande de lecture du scratchpad

for (byte i = 0; i < 9; i++) // On lit le scratchpad
data = ds.read(); // Et on stock les octets reçus

  • // Calcul de la température en degré Celsius*
    _ *temp = ((data[1] << 8) | data[0]) * 0.0625;_
  • // Pas d'erreur*
  • return true;*
    }
    WiFlyClient client;
    void setup() {

Serial.begin(9600);
WiFly.setUart(&Serial);
WiFly.begin();
float temp;

  • if (!WiFly.join(ssid, passphrase)) {*

  • Serial.println("Association failed.");*

  • while (1) {*

  • // Hang on failure.*

  • }*

  • } *

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

  • if (client.connect("192.168.100.2", 80)) {*

  • Serial.println("connected");*

  • if(getTemperature(&temp)) {*

  • client.print("GET http://192.168.100.2/InjectTempBD.php?Temperature=25"); *

  • client.println(" HTTP/1.1\r\n");*

  • client.println("Host: http://192.168.100.2");*

  • client.println("Content-Type: application/x-www-form-urlencoded");*

  • client.println("Connection: close");*

  • // client.print("Temperature=");*

  • // client.print(temp); *

  • }*

  • } else {*

  • Serial.println("connection failed");*

  • }*

}
void loop() {

  • if (client.available()) {*

  • float temp;*

  • char c = client.read();*

  • Serial.print(c);*

  • delay(10000);*

  • }*

  • if (!client.connected()) {*

  • Serial.println();*

  • Serial.println("disconnecting.");*

  • client.stop();*

  • for(;;)*

  • ;*

  • }*
    }
    [/quote]

bonjour,
jete un oeil sur ce code

Bonjour, j'ai développé ce genre de chose, voici le code de l'Arduino :

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

#define ONE_WIRE_BUS 7
#define TEMPERATURE_PRECISION 12

byte mac[] = { 0xDE, 0xAD, 0xCA, 0xFE, 0xBA, 0xBE };
byte ip[] = { 192, 168, 0, 100 };
byte server[] = { 198, 168, 0, 104 }; // IP serveur MySQL + PHP
byte gateway[] = { 192, 168, 0, 254 };
byte dns[] = { 192, 168, 0, 254 };
byte subnet[] = { 255, 255, 255, 0 };

EthernetClient client;

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress DS0, DS1, DS2;

void setup(void)
{
  
 Serial.begin(9600);
 sensors.begin();
 if (!sensors.getAddress(DS0, 0)) Serial.println("Pas d'adresse pour le capteur 0"); 
 if (!sensors.getAddress(DS1, 1)) Serial.println("Pas d'adresse pour le capteur 1");
 if (!sensors.getAddress(DS2, 2)) Serial.println("Pas d'adresse pour le capteur 2");
 sensors.setResolution(DS0, TEMPERATURE_PRECISION);
 sensors.setResolution(DS1, TEMPERATURE_PRECISION);
 sensors.setResolution(DS2, TEMPERATURE_PRECISION);
 Ethernet.begin(mac, ip, dns, gateway, subnet);
}

void getTemp(void)
{
 int i = 0;
 int numSensors = sensors.getDeviceCount();
 float temparray[numSensors];  
 sensors.requestTemperatures();
 delay(100);
 for(i=0; i<numSensors; i++)
 {
   
  float temp = sensors.getTempCByIndex(i);
  temparray[i] = temp;
 }
 client.print("GET /getTemp.php?");
 for (i=0; i<numSensors; i++)
 {
  client.print("t");
  Serial.print("t");
  client.print(i);
  Serial.print(i);
  client.print("=");
  Serial.print("=");
  client.print(temparray[i]);
  Serial.print(temparray[i]);
  if (i < numSensors-1)
  {
   client.print("&");
   Serial.print("&");
  }
  else
  {
  }    
 }
 client.println(" HTTP/1.1");
 Serial.println(" HTTP/1.1");
 client.println("Host: 198.168.0.104");
 Serial.println("Host: 198.168.0.104");
 client.println("User-Agent: Arduino");
 Serial.println("User-Agent: Arduino");
 client.println("Accept: text/html");
 Serial.println("Accept: text/html");
 client.println("Connection: close");
 Serial.println("Connection: close");
 client.println();
 Serial.println();
 delay(50);
}

void loop(void)
{
 if(client.connect(server, 80))
 {
  getTemp();
  while (client.connected() && client.available()) 
  {
   char c = client.read();
   Serial.print(c);            
  }
 Serial.println();        
 }
 else
 {
  Serial.println("Echec de connexion. Essayez de nouveau plus tard.");
 }
 delay(60000); // 1 minute
 client.stop();
}

Et le code PHP pour injecter dans la base MySQL :

<?php

include("inc/config-ds18b20.php");

mysql_connect($hostname,$username,$password) or die("Impossible de se connecter a la base de donnees.");
@mysql_select_db($database) or die("Impossible de trouver la base de donnees.");

if($_SERVER['REMOTE_ADDR']==$IP_ARDUINO)
{
 $temp0 = $_GET['t0'];
 $temp1 = $_GET['t1'];
 $temp2 = $_GET['t2'];
 $requete = "INSERT INTO temperatures(t_DS0, t_DS1, t_DS2) VALUES('$temp0','$temp1','$temp2')";
 mysql_query($requete);
 mysql_close();
 exit('200');
}

?>

Le fichier config-ds18b20.php contient le nom de la base, le username et le mot de passe ainsi que l'adresse IP de l'Arduino (petite sécurité).

En espérant que ça puisse te rendre service.

C'est bon j'ai réussi à corriger mon problème !!

-Cette ligne là ne sert à rien : //byte server[] = { 213, 186, 33, 4 }; on peut donc la quoté!

-Il faut bien avoir cette ligne renseignée : "WiFlyClient client("xxx.fr", 80);"
-Et voilà le code qui marche :
if (client.connect()) {
client.print("POST http://www.xxx.fr/InjectBD.php?Temperature=");
client.print(temp);
client.print(" HTTP/1.0\r\n");
client.println("Host: www.xxx.fr");
client.println();
delay(1800000);
} else {
Serial.println("connection failed");
}

La ligne en rouge est CRUCIALE! Si elle n'y est pas ca ne fonctionnera pas!