Bon j'ai enfin fait l'acquisition d'un ethernet Shield et je dois dire que je trip totalement !
Pouvant lier le web à l'arduino c'est pour moi quelque chose d'incroyable.
J'ai réussi a faire un site web ou le fond de couleur change quand le capteur de son détecte du bruit et tout ceci est accessible depuis n'importe dans le monde
En tout cas je suis la pour une question bien précise. J'ai réussi à prendre le contrôle de DEL en ayant l'arduino en webserver, j'accède à la page qui est générée par le microcontroller. Malheureusement je trouve que nous sommes pas mal limité niveau programmation (visuelle, dynamique etc.). Donc mon but est d'être en WebClient. En étant dans ce mode je suis capable d'envoyer des informations et même les stocker dans une base de donnée, qui sont ensuite réutiliser par une autre page web. Mais par contre je n'arrive pas du tout à lire le contenu d'une page avec l'arduino en webclient et donc encore moins récupérer des informations.
J'ai fait différente tentative avec le client.available(); mais il me retourne tout le temps 0. Je pense que je n'Ai pas encore vraiment comment celui-ci fonctionne et qu'est-ce qu'il lie sur la page?
Si certains ont quelques explications, elles seront la bienvenue
#include <Ethernet.h>
#include <PString.h>
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {
192,168,0,177 };
byte server[] = { 217,107,214,2 }; // jfsgeneva.com
// 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):
Client client(server, 80);
String stringOne = "";
long echec=0;
void setup() {
// start the Ethernet connection:
Ethernet.begin(mac, ip);
// start the serial library:
Serial.begin(9600);
// give the Ethernet shield a second to initialize:
delay(1000);
// Serial.println("connecting...");
// if you get a connection, report back via serial:
}
void loop(){
Serial.println("connecting...");
if (client.connect()) {
Serial.println("connected");
// Make a HTTP request:
client.print("GET http://tapage.com");
client.println(" HTTP/1.1");
client.print("Host: tapage.com\n");
client.print("Referer: http://tapage.com\n\n");
client.println();
delay(200);
}
else if (!client.connected()){
// if you didn't get a connection to the server:
Serial.println("connection failed");
}
// if there are incoming bytes available
// from the server, read them and print them:
if (client.available()!=0) {
int b=client.available();
for (int a=0; a < b+1000;a++){
char c = client.read();
// Serial.print(c);
String stringOne += c;
}
Serial.println(String stringOne);
Serial.flush();
}
// if the server's disconnected, stop the client:
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
Serial.println();
Serial.println();
client.flush();
Serial.flush();
client.stop();
// do nothing forevermore:
// for(;;)
// ;
}
delay(2000);
}
Donc maintenant sur ma page j'ai ceci <?=chr(255)?> et quand je change la valeur, l'intensité de ma led change avec
Il ne me reste plus qu'à trouvé comment récupérer plusieurs valeur et je m'attaquerai à l'Interface du site internet en utilisant du JSON pour avoir un interface ou il n'est pas nécessaire de recharger la page
Tu passes par une requêtes SQL.... en fait pour aussi peu d'info tu as avantage à passer par un fichier .txt que tu modifies par PHP et qui contient l'état de tes leds, tu gagneras du temps dans les requêtes.
Autrement si tu persiste avec une BDD, tu peux simplement appeler tes variables $led1, $led2etc, et afficher leurs états, sachant que celles qui ne sont pas sortie de tra requêtes SQL sont à "0", et tu fait un echo de toutes tes variables et toujours dans le même ordre.
Ainsi coté Arduino tu récupère les états toujours dans le mêms ordre.
l'idée du fichier txt c'est intéressant. J'ai fait mes essais directement avec une base de donnée car ça me permettais de déjà pouvoir maitriser l'insertion de donnée. Pratique pour mesurer la température et faire un graphe ensuite par exemple.
En faite ou je ne sais pas trop comment faire c'est du coté du code arduino
Bon je ne me suis pas encore attaquer à la gestion de plusieurs informations... J'ai un soucis plutôt désagréable. La connexion clientWeb avec arduino est instable et fonctionne par intermittence, chose qu'il ne faisait pas du tout hier Voici mon code :
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x4A, 0x8A };
byte ip[] = { 192,168,1,69 };
//byte server[] = { 173,194,33,104 }; // Google
byte server[] = { 72,55,186,33 }; // w
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask of the network
byte gateway[] = { 192, 168, 1, 254 }; //your router's IP address
Client client(server, 80);
void setup() {
// start the ethernet connection and serial port:
Ethernet.begin(mac, ip, gateway, subnet);
Serial.begin(9600);
client.flush();
client.stop();
// give the ethernet module time to boot up:
delay(1000);
}
void loop() {
Serial.print("connecting : ");
if (client.connect()) {
Serial.println("OK");
client.println("GET http://mon_site_web.php");
client.println();
delay(200);
if (client.available()!=0) {
char c = client.read();
// Serial.print(c);
analogWrite(9,c);
}
else{
Serial.println(client.available());
}
client.flush();
client.stop();
} else {
Serial.println("KO");
}
}
Je sais c'est un vieux topic mais je voulais juste dire merci car ça fait deux jours que je séchais sur un problème du même type et c’était bien un problème de "delay(200)" qui n’étais pas mit. Dans mon cas et comme je travail avec un server web sur un raspberry de première génération j'ai du mettre delay(1000); plutôt. Mais maintenant ca fonctionne