Arduino ecriture base Access ou SQL

Y a t'il autre chose branché en SPI sur l'arduino ? J'ai eu le cas avec un horloge ds3234 mal branchée, elle provoquait des erreurs sur l'ethernet et la carte SD...

non la carte ethernet est la seule branchée sur l'arduino

PITP2:
non la carte ethernet est la seule branchée sur l'arduino

C'est louche cette histoire ... l'ethernet shield est peu être défectueuse ?

Ma toute première ethernet shied avait des "ponts de soudures" (des billes de soudure pour être précis) non voulu qui foutaient la merde.
Regarde de plus prés ta carte (surtout au niveau du chipset Wiznet) peut être que tu as le même probléme ?

Truc bête à regarder : ta shield répond t'elle quand on la ping ?

la panne matérielle comme le suggère skywodd est effectivement une possibilité…

pas d'autres idées malheureusement…

cbrandt:
la panne matérielle comme le suggère skywodd est effectivement une possibilité…

pas d'autres idées malheureusement…

Sinon tu as pu tester si ta carte répond au ping ?
Si non le défaut hardware et plus que probable vu que le ping est géré en hardware par le chipset wiznet.

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

PITP2:
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 ...

tu dis bizarre je dis bizarre .. comme c'est bizarre :slight_smile:

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 ?

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

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é

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

/*
  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(;;)
      ;
  }
}

Je reviens sur ce sujet mais j'ai avancé depuis :slight_smile:
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

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

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

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.

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 :~

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.

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=

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");

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)

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

Merci

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();

Dans ce code, le println est au mauvais endroit:

    client.println("GET /solaire/txp2.php?nom_inst=Dupont&date_prod=");
    client.print(date);

il faudrait faire ça:

    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.

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