Bon alors aujourd'hui j'ai une petite question qui va très certainement vous paraître débile mais je me lance quand même.
J'ai foobar d'installé sur un pc, avec le composant http. Je vais câbler sur l'arduino des BP et simplement suivant chaque BP actionné, envoyer une commande HTTP (ex : http://192.168.0.100:8888/default/?cmd=PlayOrPause )
Seulement, aucun script que j'ai trouvé me permet de faire cela (ou alors je suis vraiment mauvais ^^)
DragonsNoirs77:
Bah les champs sont bon logiquement, dans gateway j'ai mis l'adresse ip de ma freebox (192.168.0.254) et a part ca tout le reste devrais etre bon.
et l'adresse que j'ai donné en exemple fonctionne parfaitement
Donc la pour l'instant cela me donne ca :
Cannot connect to IP !
Send Play/Pause ... Failed !
Disconnected !
Cannot connect to IP !
Pourtant il affiche "cannot connect to ip" donc soit l'ethernet shield c'est pas initialisé correctement soit il à pas trouvé l'ip cible.
Essaye de rajouter le submask de ton réseau au Ethernet.begin() : Ethernet - Arduino Reference
DragonsNoirs77:
J'ai rajouté le subnet, mais cela ne change rien, la carte est bien initialisé puisque si je fait un ping dessus j'ai bien un retour
Le ping est géré par la puce w5100 en hardware donc si la carte est initialisé mais que la partie tcp/ip ne l'est pas la shield ethernet repondra quand même au ping.
Tente d'uploader un skecth d'exemple comme webclient pour voir si de base ça marche.
DragonsNoirs77:
Le skecth webclient ne fonctionne pas, même pas de ping
Ca me marque ceci :
connecting...
connection failed
disconnecting.
Même pas de ping ? Tu as ajouter le gateway et le submask (l'exemple de base est pour une utilisation sans routeur) ?
Pense aussi à remplacer l'ip de google dans l'exemple, elle n'est plus bonne depuis trés longtemps.
Exemple WebClient de base + gateway/sbmask + ip google correcte :
#include <SPI.h>
#include <Ethernet.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,1,177 };
byte gateway = { 192, 168, 1, 1 };
byte submask = { 255, 255, 255, 0 }
byte server[] = { 74, 125, 230, 211 }; // 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):
Client client(server, 80);
void setup() {
// start the Ethernet connection:
Ethernet.begin(mac, ip, gateway, submask);
// 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:
if (client.connect()) {
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(;;)
;
}
}
Ca fonctionne, au début cela ne marchais pas, j'ai testé au hasard en changeant l'ip en mettant "192.168.0.177" au lieu de "1.177" cela marche nickel, voici ce que je recois :
connected
HTTP/1.0 200 OK
Content-Type: text/html; charset=ISO-8859-1
Date: Sun, 01 Jan 2012 21:01:23 GMT
Expires: -1
Cache-Control: private, max-age=0
Plus tout un blabla de choses plus ou moins intéressantes
DragonsNoirs77:
Ca fonctionne, au début cela ne marchais pas, j'ai testé au hasard en changeant l'ip en mettant "192.168.0.177" au lieu de "1.177" cela marche nickel, voici ce que je recois :
(...)
Plus tout un blabla de choses plus ou moins intéressantes
Ok, donc il ne te reste plus qu'as reprendre le code d'avant et de te servir de l'exemple webclient comme base
C'est bien ce que je me suis dit, le seul problème est que cela ne fonctionne pas ...
J'ai mis ceci en code :
#include <SPI.h>
#include <Ethernet.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 gateway[] = { 192, 168, 0, 254 };
byte submask[] = { 255, 255, 255, 0 };
byte server[] = { 192, 168, 0, 100 }; // Google
const int bpPlay = 12;
// 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, 8888);
void setup() {
pinMode(bpPlay, INPUT);
digitalWrite(bpPlay, HIGH);
delay(1000);
// start the Ethernet connection:
Ethernet.begin(mac, ip, gateway, submask);
// 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:
if (client.connect()) {
Serial.println("connected");
}
else {
// kf you didn't get a connection to the server:
Serial.println("connection failed");
}
}
void loop()
{
if(digitalRead(bpPlay) == LOW) {
Serial.print("Send Play/Pause ...");
if (client.connected()) {
Serial.println(" Done !");
client.println("GET default/?cmd=PlayOrPause HTTP/1.0");
client.println();
}
else {
Serial.println(" Failed !");
Serial.println("Disconnected !");
client.stop();
if (!client.connect())
Serial.println("Cannot connect to IP !");
}
delay(1000);
}
}
et lorsque je lance la console ca me donne bien ceci :
connecting...
connected
Mais dès que j'appuie sur le bouton :
Send Play/Pause ... Failed !
Disconnected !
Cannot connect to IP !
Toujours pareil (je test en même temps en envoyant la commande via chrome par exemple et ca fonctionne nickel).
Sinon c'est pas parceque le foobar renvoit une page ?
Voici un aperçu :
Voila en mieux :
Et sinon j'ai regardé la page que cela me donne sous charles proxy (si cela peut aider) :
URL : http://192.168.0.100:8888/default/?cmd=PlayOrPause
Status : Complete
Response Code : 200 OK
Protocol : HTTP/1.1
Method : GET
Content-Type : text/html; Charset=UTF-8
Client Adress : /127.0.0.1
Remote Adress : 192.168.0.100/192.168.0.100
C'est bizarre le webclient fonctionne mais pas le skecth final ... hummm
Tente de prendre le webclient (qui marche) et de remplacer /search?q=arduino par /default/?cmd=PlayOrPause (+ ip google par l'ip foobar + port) logiquement foobar devrait se mettre en pause (ou en play) au setup() de l'arduino, au moins on saura si il répond à une requête "simple".
Je prend le script de google, je modifie avec l'adresse de la freebox, je recoit des données, je met l'ip du pc ou se trouve foobar, mais en mettant un autre port, je recoit des infos, mais avec l'adresse foobar ... rien ...
DragonsNoirs77:
Je prend le script de google, je modifie avec l'adresse de la freebox, je recoit des données, je met l'ip du pc ou se trouve foobar, mais en mettant un autre port, je recoit des infos, mais avec l'adresse foobar ... rien ...
ça se connecte au moins ?
Si ça ce trouve foobar ne prend pas en charge le standard HTTP 1.0 mais HTTP 1.1 ...
Tente de remplacer :