Pages: 1 2 [3] 4   Go Down
Author Topic: Arduino ecriture base Access ou SQL  (Read 6143 times)
0 Members and 1 Guest are viewing this topic.
France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Désolé pour le temps de réponse ...

Oui j'arrive parfaitement à pinger la carte.
J'avais meme testé la mise à l'heure depuis un serveur ntp et cela fonctionnait bien
Donc le NTP marche !?
Ce serais un probléme dans le code du WebClient ... bizarre ...
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Full Member
***
Karma: 0
Posts: 127
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

tu dis bizarre je dis bizarre .. comme c'est bizarre :-)

j'ai pourtant regardé encore et encore le code et pourtant il semble bon ...

tu n'as pas la possiblité d'essayer sur un arduino et m'envoyer le code qui fonctionne chez toi ?
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 127
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai utilisé tout un tas de code différent mais avec tjrs le même résultat ... c'est rageant !
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Oups désolé j'avais pas vu ton dernier message.

Chez moi le code WebClient en DHCP (avec juste l'adresse mac dans Ethernet.begin()) fonctionne nikel.

A ce stade je vois que deux choses possibles :
- ton ethernet shield a quelque chose qui va pas
- ton réseau est bizarrement câblé/configuré
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Full Member
***
Karma: 0
Posts: 127
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai réussi à le faire fonctionner avec ce code que j'ai pris directement depuis le soft arduino alors qu'avant j'avais fait un copier coller depuis le site arduino ..

j'ai juste changé l'IP du serveur google

Merci à tous pour votre aide


Code:
/*
  Web client
 
 This sketch connects to a website (http://www.google.com)
 using an Arduino Wiznet Ethernet shield.
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 
 created 18 Dec 2009
 modified 9 Apr 2012
 by David A. Mellis
 
 */

#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 };
IPAddress server(173,194,34,34); // Google

// 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 Leonardo only
  }

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    for(;;)
      ;
  }
  // 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.println("GET /search?q=arduino HTTP/1.0");
    client.println();
  }
  else {
    // kf 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:
    for(;;)
      ;
  }
}
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 127
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je reviens sur ce sujet mais j'ai avancé depuis :-)
Serveur PHP et base Mysql prête !
j'arrive à y entrer des données via un script php sur mon serveur avec l'adresse
http://localhost/solaire/txp2.php?nom_inst=Dupont&date_prod=20121212121212&prod=6741&commentaires=cool2

par contre je n'arrive pas à le faire depuis l'arduino avec ce code

Code:
int annee=year();
    int jour=day();
    int mois = month();
    int heure= hour();
    int minut= minute();
    int sec= second();
   
    char date[15];
    sprintf(date,"%04d%02d%02d%02d%02d%02d",annee,mois,jour,heure,minut,sec);  //  %d pour un int
  // if there's a successful connection:
  if (client.connect(srvphp, 80)) {
       
   // Serial.println("connected srvphp");
    // Make a HTTP request:
    client.println("GET /solaire/txp2.php?nom_inst=Dupont&date_prod=");
    client.print(date);
   
  // Serial.print(date);
   
   // Serial.print(jour);
   
    // Serial.print(heure);
   
    // Serial.print(minut);
   
    // Serial.print(sec);
    client.print("&prod=6741&commentaires=arduino");
   client.println(" HTTP/1.0");
   
  }


alors qu'avec celui ci cela fonctionne bien ..

Code:
if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.print("GET /solaire/txp2.php?nom_inst=Dupont&date_prod=20121212121212&prod=6741&commentaires=");
   
 client.print(test);
 client.println(" HTTP/1.0");
   
   
   
    client.println();

j'ai pourtant contrôlé avec un Serial.print que la date envoyée soit la bonne et c'est le bon format ..
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Je pense que dans le 1er cas il te manque un println()

Il faut une ligne vide pour signifier la fin de la requête.
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Full Member
***
Karma: 0
Posts: 127
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

j'ai modifié le code avec un println à la fin comme dans l'autre code mais aucune donnée ne passe dans la base sql  smiley-confuse
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Donc si je comprend bien le code avec la requète en dur marche bien mais pas le code avec la requète construite.

je te suggère de construire toute ta ligne de requète dans un tableau de char avec sprintf et de faire à la fois un client.println et un Serial.println pour vérifier que tout est bon.
Il doit y avoir un truc qui cloche dans la construction de la ligne de requète.
Peut être même dans la date.

Par exemple si une des variables à une valeur erronée (par exemple le mois qui vaut -1 ou 150) alors -malgré le %02d- sprintf va écrire plus de caractères ce qui va faire déborder ta variable char data[15].
Donc une petite verif serait le bienvenue.


Par ailleurs, même si cela ne me semble pas utile dans ce cas pour l'instant, intéresse toi à l'occasion à l'outils Wireshark qui permet de capturer et traiter les paquets IP entre ton PC et l'Arduino.

Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Full Member
***
Karma: 0
Posts: 127
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok j'ai essayé ca avec sprintf mais je ne sais pas trop comment ajouter plusieurs chaines de caractères dans un sprintf.
Ceci ne me renvoie que la première partie GET /solaire/txp2.php?nom_inst=Dupont&date_prod=

Code:
sprintf(date,"GET /solaire/txp2.php?nom_inst=Dupont&date_prod=","%04d%02d%02d%02d%02d%02d",annee,mois,jour,heure,minut,sec,"&prod=6741&commentaires=arduino HTTP/1.0");
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu ne dois mettre qu'une seule chaine de format

Soit tu le fait en 2 temps :

- Tu garde ton sprintf( date, "%04d" etc ...)
- Tu rajoute la date sprintf( reqhttp, "GET /solaire/txp2.php?nom_inst=Dupont&date_prod=%s&prod=6741&commentaires=arduino HTTP/1.0", date, autres champs ... );

Soit en une seule fois :
sprintf( reqhttp, "GET /solaire/txp2.php?nom_inst=Dupont&date_prod=%04d%02d%02d%02d%02d%02d&prod=6741&commentaires=arduino HTTP/1.0", ,annee,mois,jour,heure,minut,sec );

Avec reqhttp suffisamment dimensionnée (prend de la marge tant que tu est en debug : 200 char)
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Full Member
***
Karma: 0
Posts: 127
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En faisant comme tu me l'as indiqué dans la dernière solution cela fonctionne

Merci

Code:
sprintf( reqhttp, "GET /solaire/txp2.php?nom_inst=Dupont&date_prod=%04d%02d%02d%02d%02d%02d&prod=%05d&commentaires=arduino HTTP/1.0",annee,mois,jour,heure,minut,sec,comptageImpulsion);
    client.println(reqhttp);
    client.println();
Logged

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3612
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dans ce code, le println est au mauvais endroit:
Code:
    client.println("GET /solaire/txp2.php?nom_inst=Dupont&date_prod=");
    client.print(date);

il faudrait faire ça:
Code:
    client.print("GET /solaire/txp2.php?nom_inst=Dupont&date_prod=");
    client.println(date);

Le premier cas coupe la requête en deux et ne termine pas le seconde partie.
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

C'est bien vrai.
Trop gros pour être visible...
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Full Member
***
Karma: 0
Posts: 127
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Comment ca je suis trop gros !! jsuis juste un peu enveloppé  smiley-razz

je viens de faire un ptit peu de ménage dans le code .... sauf que j'ai du passer un ptit coup de balais trop prononcé ...

en effet l'écriture sur la carte SD des informations ne se fait plus .. Le fichier est bien créé lors de l'appel dans la fonction  ecritureSD()
par contre aucune des données demandées n'est écrite sur la carte SD alors que cela fonctionnait bien avant mon ptit coup de ménage ...
avez vous une idée de ce qui ne va pas ?

Code:
void ecritureSD() {

    // if you couldn't make a connection:

    // Mise en forme du nom du fichier .txt 
    char datafile[13];
    int jour=day();
    int mois = month();
    int heure= hour();
    int minut= minute();

    sprintf(datafile,"%02d%02d%02d%02d.txt",mois,jour,heure,minut);  //  %d pour un int

      //----- initialisation de la carte SD -----
    Serial.println( (__FlashStringHelper *)PSTR("Initialisation de la SD card..."));

    SD.begin(brocheSDCardSelect); // initialisation de la carte SD avec broche 4 en tant que CS - renvoie true/false



    Serial.println(datafile);
    //---- crée fichier en écriture ---
    file = SD.open(datafile, FILE_WRITE); // ouvre le fichier en écriture
    // NB : le fichier est créé si il n'existe pas !

    //---- test si fichier dispo en écriture
    if (!file) { // si fichier pas dispo
      Serial.println( (__FlashStringHelper *)PSTR("Erreur ouverture fichier"));
    } // fin if
    else { // si le fichier existe et est ouvert
      Serial.println( (__FlashStringHelper *)PSTR("Fichier pret pour ecriture"));
      //----- Ecriture dans le fichier au format CSV -----
      Serial.println( (__FlashStringHelper *)PSTR("Enregistrement en cours"));
      file.print("test");

      // valeur deuxieme champ
      file.print(comptageImpulsion);
      file.print(';');
      // valeur quatrieme champ
      file.print(millis()), file.print(';');
      // le dernier champ doit se terminer par un saut de ligne +++
      if( now() != prevDisplay) //update the display only if the time has changed
      {
        prevDisplay = now();
        digitalClockDisplay();
      } 
      Serial.println( (__FlashStringHelper *)PSTR("connection failed"));
      Serial.println();
      Serial.println( (__FlashStringHelper *)PSTR("disconnecting"));

      file.close(); // ferme le fichier
      Serial.println( (__FlashStringHelper *)PSTR("Fin enregistrement")); 
      Serial.println( (__FlashStringHelper *)PSTR("Fermeture fichier"));


    }
    // note the time that the connection was made or attempted:
    // lastConnectionTime = millis();

}


Code:
void digitalClockDisplay(){
  // digital clock display of the time
 Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.print(" -- ");
  Serial.print(day());
  Serial.print("/");
  Serial.print(month());
  Serial.print("/");
  Serial.print(year());
  Serial.println();
  file.print(hour()), file.print(';');
  printDigitsSD(minute()), file.print(';');
  printDigitsSD(second()), file.print(';');
  file.print(day()), file.print(';');
  file.print(month()), file.print(';');
  file.print(year()), file.print(';');
  file.println(); 
}
Logged

Pages: 1 2 [3] 4   Go Up
Jump to: