Après beaucoup de tâtonnement j'ai réussi à faire marcher le shield Ethernet pour envoyer des données vers un serveur distant qui les enregistre.
Le serveur distant se contente d'enregistrer les données reçues mais ne répond rien (page blanche).
L'arduino envoi son buffer toutes les 30 secondes avec le code suivant.
// envoi des messages au serveur HTTP externe
boolean logDataToRemote(String msg) {
if (carteEthernet) { // si la carte ethernet est présente
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
}
Serial.println("connecting...");
if (!client.connect(server, 80)) {
/* Erreur */
Serial.println(F("Echec !"));
return false;
}
Serial.println("connected");
// Make a HTTP request:
String PostData = "msg=" + urlencode(msg);
Serial.println(msg);
Serial.println(PostData);
client.println("POST /arduino/save.php HTTP/1.1");
client.println("Host: www.monserveur.fr");
client.println("User-Agent: Arduino/1.0");
client.println("Connection: close");
client.println("Content-Type: application/x-www-form-urlencoded;");
client.print("Content-Length: ");
client.println(PostData.length());
client.println();
client.println(PostData);
client.println();
/* Fin de la requete HTTP */
Serial.println(F("Fin envoi ..."));
/* Pas d'erreur */
while (!client.available()) {
delay(1);
}
while (client.available()) {
char c = client.read();
Serial.print(c);
}
while (client.connected()) {
Serial.println("Waiting for server to disconnect");
}
client.stop();
return true;
}
return false;
}
Ca marche bien, mais je ne suis pas intéressée par la partie attente de la réponse et lecture de la réponse while (!client.available()) { ...} et while (client.available()) {...} car cela consomme du temps inutilement. Mais sans cette partie j'avais des gros problèmes de connexion / close / ...
Y-at-il un bon tuto qui explique vraiment comment on fait fonctionner l'Ethernet avec les détails....et le pourquoi on doit faire certaines choses ou pas.
Merci d'avance