Pages: [1]   Go Down
Author Topic: [Résolu] Problème upload vers un script php  (Read 410 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.. smiley-sad

Merci.
Quote
// ***** 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] << smiley-cool | 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(;smiley-wink
      ;
  }
}


« Last Edit: June 08, 2013, 07:52:13 am by Engel1st » Logged

Offline Offline
Edison Member
*
Karma: 9
Posts: 1650
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour,
jete un oeil sur ce code
https://github.com/dpslwk/WiFly/blob/master/examples/WiFly_WebClient/WiFly_WebClient.ino
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
Breaks ? We don't need breaks !!!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour, j'ai développé ce genre de chose, voici le code de l'Arduino :
Code:
#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 :
Code:
<?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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged

Pages: [1]   Go Up
Jump to: