Simple commande HTTP

Les petites choses que je verifierais : - L'adresse de la gateway - si ton serveur n'ecoute pas sur localhost ou sur une autre adresse si dhcp est activé - si le port d'ecoute est bien 8888 - si ton firewall ne bloque pas le port 8888 - si tu ne t'es pas trompé dans l'adresse mac - n'y a t il pas de redirection de port sur la freebox

Est ce que tu as une autre machine (ou ton telephone) pour tester la connection?...parce que ton proxy dit que ton client est en 127.0.0.1. Je ne sais pas a quoi correspond cette trace mais je trouve ca bizard Et enfin l'adresse est blabla/default/blabla, je completerais le default.htm ou html ou php... Si ca peut t'aider...

... Et les cables qui relient l'arduino a la freebox voir ceux du pc.. J'ai deja eu des pb avec des rj45 mal cablées

gerse: - si ton serveur n'ecoute pas sur localhost ou sur une autre adresse si dhcp est activé - si le port d'ecoute est bien 8888 - si ton firewall ne bloque pas le port 8888

J'avais complétement zappé cette possibilité ! Foorbar-http doit surement ouvrir le port sur localhost, donc pas accessible depuis l'extérieur, faudrait voir si il y a une option pour choisir l'interface réseau à utiliser.

Je ne sais pas si on parle de la même chose mais j'ai trouvé ca: http://www.audiophilefr.com/Site/forum2/musique-dematerialisee-f25/comment-installer-foo-httpcontrol-correctement-t19222.html

gerse: Je ne sais pas si on parle de la même chose mais j'ai trouvé ca: http://www.audiophilefr.com/Site/forum2/musique-dematerialisee-f25/comment-installer-foo-httpcontrol-correctement-t19222.html

ouaip c'est ça ;)

@DragonsNoirs77 vérifie tes paramètres, surtout la partie "listen on", il faut que tu mette l'ip de ton pc et le bon port (mais 80 si tu peut, je sais pas si 8888 ne serait pas aussi en partie la cause de tes probléme).

Désolé je n’ai pas eu trop le temps de revenir, je vais donc essayer de tout récapituler ^^

  • Serveur DHCP de la freebox non activé
  • Adresse freebox 192.168.0.254
  • Adresse foobar : 192.168.0.100:92 (j’ai changé pour tester)
  • L’acces a cette page foobar depuis mon pc fixe (qui lui passe directement par la freebox), fonctionne
  • Le port firewall est normalement bien ouvert
  • Aucune redirection n’est faite depuis la freebox

JE vais retenter ce soir, la je n’ai pas trop le temps, mais encore merci de m’aider a trouver la réponse :slight_smile:

Bon j’ai testé sur mon pc principal, j’ai désactivé le firewall, j’ai bien modifié les fichiers de config et tout et je trouve ca bizarre …

Si je met ceci :

#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, 2 }; // 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 /default/?cmd=PlayOrPause HTTP/1.0");
client.println("Host: 192.168.0.100");
client.println();
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 de temps en temps, il faut que je reboot la carte plusieurs fois…

Mais, si je met 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, 2 }; // 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, 80);

void setup() {
    pinMode(bpPlay, INPUT);
  digitalWrite(bpPlay, HIGH);
  // 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 /default/?cmd=PlayOrPause HTTP/1.0");
//client.println("Host: 192.168.0.100");
//client.println();
//client.println();
  } 
  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);
	}
}

Ca ne fonctionne pas :roll_eyes:

Je ne vois pas tres bien. En faite tu envoies une trace lorsque tu appuies sur un bouton poussoir? Qu'estce qui ne fonctionne pas? peux tu envoyer envoyer ton log..

Essaye ça pour voir, c’est un mix du truc qui marche une fois par reset avec un digitalRead du bouton :

#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, 2 }; // 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...");

  pinMode(bpPlay, INPUT);
  digitalWrite(bpPlay, HIGH);

}

void loop()
{
  if(digitalRead(bpPlay) == LOW) {
    // if you get a connection, report back via serial:
    if (client.connect()) {
      Serial.println("connected");
      // Make a HTTP request:
      client.println("GET /default/?cmd=PlayOrPause HTTP/1.0");
      client.println("Host: 192.168.0.100");
      client.println();
      client.println();
    } 
    else {
      // kf 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()) {
      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();
    }
  }
}

Ca me met toute une série de "disconnecting" qui ne s'arrete jamais et si j'appuie sur le bouton cela me donne en meme temps un "disconnect failed"

DragonsNoirs77: Ca me met toute une série de "disconnecting" qui ne s'arrete jamais et si j'appuie sur le bouton cela me donne en meme temps un "disconnect failed"

Code édité , j'avais foiré une accolade désolé :*

skywodd:

DragonsNoirs77:
Ca me met toute une série de “disconnecting” qui ne s’arrete jamais et si j’appuie sur le bouton cela me donne en meme temps un “disconnect failed”

Code édité , j’avais foiré une accolade désolé :*

Mdr, pas de soucis.

Sinon moi j’ai refait des test et j’ai fait une petite avancée grâce a un truc tout bête que je vient juste de remarquer … Le BP était sur l’entrée 12 … qui si on se réfère sur le site arduino est déjà utilisé comme port MISO :sweat_smile:

Donc j’ai modifié mon BP et je l’ai mis sur l’entrée 8.

Maintenant … CA FONCTIONNE :smiley: (mais aléatoirement :blush: )

Voila le 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, 2 }; // Google

const int bpPlay = 8;
// 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() {
    pinMode(bpPlay, INPUT);
  digitalWrite(bpPlay, HIGH);
  // 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("Host: 192.168.0.2");
                client.println();
                client.println();
                delay(3000);
	  } 
	  else {
		Serial.println(" Failed !");
                          Serial.println("Disconnected !");
                          client.stop();
                          if (!client.connect())
                            Serial.println("Cannot connect to IP !");
	  }
	  delay(1000);
	}
}

Et le log :

connecting...
connected
Send Play/Pause ... Done !
Send Play/Pause ... Done !
Send Play/Pause ... Failed !
Disconnected !
Send Play/Pause ... Done !
Send Play/Pause ... Failed !
Disconnected !
Send Play/Pause ... Done !

Et ce n’est pas parcequ’il met “Done” que la commande est bien envoyée ou que foobar la reçoit …

Sinon avec ton code cela me donne ceci :

A la connection : connecting...
Si j’appuie sur le BP 1 fois :

connected

disconnecting.
connected
connection failed
Hconnection failed
Tconnection failed
Tconnection failed
Pconnection failed
/connection failed
1connection failed
.

Et cela fait bien play/pause dans foobar

Si j’appuie une 2e fois :

0connection failed
 connection failed
2connection failed
0connection failed
0connection failed
 connection failed
O

Sans que cela soit pris en compte dans foobar

Une 3e fois :

Kconnection failed

connection failed

connection failed
Cconnection failed
oconnection failed
nconnection failed
tconnection failed
econnection failed
n

Toujours pas pris en compte

Etc Etc

DragonsNoirs77:
Sinon moi j’ai refait des test et j’ai fait une petite avancée grâce a un truc tout bête que je vient juste de remarquer … Le BP était sur l’entrée 12 … qui si on se réfère sur le site arduino est déjà utilisé comme port MISO :sweat_smile:
Donc j’ai modifié mon BP et je l’ai mis sur l’entrée 8.

J’avais pas prévu ce détail, j’avais oublié de dire qu’il fallait pas utiliser de D10 à D13 :.

J’ai fait quelques modif dans le code en me basant sur ton log :

#include <SPI.h>
#include <Ethernet.h>

const int bpPlay = 8;

// 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, 2 }; // 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...");

  pinMode(bpPlay, INPUT);
  digitalWrite(bpPlay, HIGH);

}

void loop()
{
  if(digitalRead(bpPlay) == LOW) {
    // if you get a connection, report back via serial:
    if (client.connect()) {
      Serial.println("connected");
      // Make a HTTP request:
      client.println("GET /default/?cmd=PlayOrPause HTTP/1.0");
      client.println("Host: 192.168.0.100");
      client.println();
      client.println();
    } 
    else {
      // kf 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:
    while (client.available()) {
      char c = client.read();
      Serial.print(c);
      delay(100);
    }

    // if the server's disconnected, stop the client:
    if (!client.connected()) {
      Serial.println();
      Serial.println("disconnecting.");
      client.stop();
    }

    delay(500); // anti rebonds
    while(digitalRead(bpPlay) == LOW); // blocage tant que le bouton est pas relaché
  }
}

Avec ton nouveau code, il va bien fonctionner au premier appui, et après il me marque ceci en style “machine a écrire” :

HTTP/1.0 200 OK
Content-Type: text/html; Charset=UTF-8
Connection: close
Cache-Control: no-cache
Pragma: no-cache
Expires: Mon, 02 Jun 1980 01:02:03 GMT

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>Mad World - foobar2000</title>
<link rel="shortcut Icon" href="/default/favicon.ico" type="image/x-icon" />
<script language="JavaScript" type="text/javascript">
<!--

Etc etc

DragonsNoirs77:
Avec ton nouveau code, il va bien fonctionner au premier appui, et après il me marque ceci en style “machine a écrire” :

Normal qu’il écrive lentement j’ai mis un delay(100); dans la boucle while qui lit la réponse http :wink:
La question c’est est ce qu’il marche lors du 2eme appui ?

Si il marche pas voici une énieme version :sweat_smile:

#include <SPI.h>
#include <Ethernet.h>

const int bpPlay = 8;

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, 2 }; // Google

void setup() {
  Ethernet.begin(mac, ip, gateway, submask);
  Serial.begin(9600);
  delay(1000);
  Serial.println("connecting...");

  pinMode(bpPlay, INPUT);
  digitalWrite(bpPlay, HIGH);
}

void loop()
{
  if(digitalRead(bpPlay) == LOW) {
    Client client(server, 80);

    if (client.connect()) {
      Serial.println("connected");
      client.println("GET /default/?cmd=PlayOrPause HTTP/1.0");
      client.println("Host: 192.168.0.100");
      client.println();
      client.println();
    } 
    else
      Serial.println("connection failed");

    while (client.available()) {
      char c = client.read();
      Serial.print(c);
      delay(1);
    }

    if (!client.connected()) {
      Serial.println();
      Serial.println("disconnecting.");
      client.stop();
    }

    delay(500); // anti rebonds
    while(digitalRead(bpPlay) == LOW); // blocage tant que le bouton est pas relaché
  }
}

Ps: il y a une incohérence entre le host: 192.168.0.100 de la requête http et l’ip 192.168.0.2 du serveur, faudra que tu modifie une des deux ip :wink:

Oui ne t'inquiète pas, je changeais bien l'adresse en 192.168.0.2 mais je ne voulais pas t’embêter :blush:

Bon sinon avec ta nouvelle version, ca marche bien si j'attend un grand délai (et encore quoique ...), sinon ca marche disont ... 1 fois sur 4 si je vais rapidement.

Voici le log :

connecting...
connected
connected
connected

disconnecting.
connected

disconnecting.
connected

disconnecting.
connected

Et si ton pb était hardware, dans le cablage du BP ?

DragonsNoirs77: Bon sinon avec ta nouvelle version, ca marche bien si j'attend un grand délai (et encore quoique ...), sinon ca marche disont ... 1 fois sur 4 si je vais rapidement.

Ok donc c'était un probléme par rapport à la déclaration global de client, par contre qu'entend tu pars un "grand délai" ?

gerse: Et si ton pb était hardware, dans le cablage du BP ?

Je pense pas, le BP est cablé directement sur la carte.

skywodd:

DragonsNoirs77: Bon sinon avec ta nouvelle version, ca marche bien si j'attend un grand délai (et encore quoique ...), sinon ca marche disont ... 1 fois sur 4 si je vais rapidement.

Ok donc c'était un probléme par rapport à la déclaration global de client, par contre qu'entend tu pars un "grand délai" ?

Le premier marche a chaque coup, et après c'est aléatoirement que ca fonctionne c'est bizarre...