Shield Ethernet connection au localhost

Bonjour à tous,

Je commence à maîtriser le shield Ethernet. Mais une partie m'échappe encore : l'appel par la carte d'un serveur local.

Dans l'exemple "WebClient" donné dans la bibliothèque Ethernet2, la carte envoie une requête à google et récupère la réponse.

Ce que je souhaiterai, c'est remplacer "www.google.com" par mon serveur local.

L'URL du script est : http://127.0.0.1:8080/test/arduino_localhost.php

La recherche que j'ai effectuée avant de poster ma question m'a orienté vers une configuration comme celle-ci :

byte mac[] = { 0x90, 0xA2, 0xDA, 0x10, 0xE6, 0x5D };
char server[] = "localhost"; 
IPAddress ip(192,168,1,12); // adresse ip donnée par http://www.mon-ip.com/adresse-ip-locale.php

  if (client.connect(server, 8080)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET /test/arduino_localhost.php HTTP/1.1");
    client.println("Host: localhost");
    client.println("Connection: close");
    client.println();
  }

Malheureusement, cela ne fonctionne pas. Le message est toujours le même :

connecting...
connection failed

disconnecting.

Toutes les configurations différentes ont échouées.

D'où vient donc mon erreur ?

Merci beaucoup pour votre aide.

Vous confondez sans doute l'adresse local host (127.xxx) avec celle réseau local de votre server qui est sans doute comme votre shield en 192.168.1.xxx

Vérifiez bien l'adresse du serveur

bonjour, +1 localhost est en interne 127.0.0.1 en général il faut donc si ip sur le réseau

J'ai essayé toutes les combinaisons :

IPAddress server(127,0,0,1); //  char server[] = "127.0.0.1"; char server[] = "localhost";
IPAddress ip(192, 168, 1, 2); //  IPAddress ip(192,168,1,12);

client.connect(server, 80); // client.connect(server, 8080);
client.println("Host: localhost"); // client.println("Host: 127.0.0.1")

Je me suis inspiré de ceci : http://arduino.stackexchange.com/questions/9067/using-ethernet-how-do-i-navigate-to-a-page-on-my-local-server

je confirme l'@ 127.0.0.1 est l'@ de loopback d'une carte réseau donc accessible uniquement sur la machine on s'en sert pour tester les couches réseau (jusqu’à la 2 si mes souvenirs sont bons) par ex en faisant un ping sur cette adresse donc ton serveur local doit avoir une @IP dans la plage de ton réseau 192.168.1.xxx que toi seul connait

Merci rjnc.38,

L’ip locale (donnée en console par ipconfig) est 192,168,1,12.

J’ai donc configuré ainsi :

// test 1
IPAddress ip(127,0,0,1);
IPAddress server(192,168,1,12);

// test 2
IPAddress ip(192,168,1,12);
IPAddress server(127,0,0,1);


  if (client.connect(server, 80)) { // testé également client.connect(server, 80)
    Serial.println("connected");
    client.println("GET /edsa-backoffice2/web/test/arduino_localhost.php HTTP/1.1");
    client.println("Host: 127.0.0.1");
    client.println("Connection: close");
    client.println();
  }
  else {
    Serial.println("connection failed");
  }

Sans succès :confused:

Vbloc: Merci rjnc.38,

L'ip locale (donnée en console par ipconfig) est 192,168,1,12.

J'ai donc configuré ainsi :

// test 1
IPAddress ip(127,0,0,1);
IPAddress server(192,168,1,12);

// test 2 IPAddress ip(192,168,1,12); IPAddress server(127,0,0,1);

 if (client.connect(server, 80)) { // testé également client.connect(server, 80)    Serial.println("connected");    client.println("GET /edsa-backoffice2/web/test/arduino_localhost.php HTTP/1.1");    client.println("Host: 127.0.0.1");    client.println("Connection: close");    client.println();  }  else {    Serial.println("connection failed");  }




Sans succès :confused:

Vbloc:
Merci rjnc.38,

L'ip locale (donnée en console par ipconfig) est 192,168,1,12.

J'ai donc configuré ainsi :



// test 1 IPAddress ip(127,0,0,1); IPAddress server(192,168,1,12);

// test 2 IPAddress ip(192,168,1,12); IPAddress server(127,0,0,1);

 if (client.connect(server, 80)) { // testé également client.connect(server, 80)    Serial.println("connected");    client.println("GET /edsa-backoffice2/web/test/arduino_localhost.php HTTP/1.1");    client.println("Host: 127.0.0.1");    client.println("Connection: close");    client.println();  }  else {    Serial.println("connection failed");  }




Sans succès :confused:

bonsoir dans le sketch arduino tu devrais avoir 2 adresses en 192.168.1.x une qui est celle attribué à l'arduino l'autre attribué à ton serveur "local" tant que tu mettra/verra du 127.x,y,z dans le sketch arduino ça n'aboutira pas

si vous avez la bonne adresse IP réseau local (192.168.xxxx) de votre serveur il faudra vous assurer que votre serveur accepte les connexions entrantes. Le meilleur moyen de tester est de prendre votre smartphone qui serait sur le même réseau wifi /ou un autre ordi sur le filaire et voir si en tapant l'URL dans un navigateur web vous réussissez à joindre votre serveur. Si ça ne fonctionne pas c'est que votre "serveur" n'est pas accessible en dehors de lui même sur le loopback et faudra ouvrir les ports ou considérer MAMP ou similaire par exemple pour faire un petit serveur local "propre"

dans l'ex webclient il faut modifier ces 2 lignes

//IPAddress server(74,125,232,128);  // numeric IP for Google (no DNS)
char server[] = "www.google.com";    // name address for Google (using DNS)

en

IPAddress server(192,168,1,12);  // numeric IP for ton serveur
//char server[] = "www.google.com";    // name address for Google (using DNS)

et verifier dans la console qu'il n'y a pas une erreur "Failed to configure Ethernet using DHCP"

Merci JML et rjnc38. Je vérifie cela demain matin. Bonne nuit.

Bonjour,

Je me remets sur le sujet : déclencher l’appel du serveur du PC par le Shield Ethernet.

  • l’appel du serveur de la carte à partir d’un PC du réseau local fonctionne,
  • l’appel d’une URL distante par la carte fonctionne (ex : www.google.com)

mais
-l’appel d’une URL locale (192.168.x.x) par la carte échoue.

Le réseau local est composé :

  • d’une box : 192.168.1.1
  • d’un PC : 192.168.1.12
  • d’un ordi portable : 192.168.1.13
  • d’un shiel ethernet : 192.168.1.123

Lorsque je me connecte à la box, la configuration du réseau filaire comprend :

  • la box
  • le PC
  • l’ordi portable
    Mais le shield n’apparaît pas. Alors que, lorsque je l’appelle, soit du PC, soit de l’ordi portable, il répond.

Entres ordis, ça ne marche pas : 192.168.1.13 sur le PC affiche “Le délai d’attente est dépassé”. Idem pour le portable.

J’ai soupçonné un blocage par le pare-feu. Mais en le désactivant, le problème demeure.

Où est donc le problème ?

Merci.

PS : Lorsque le PC s’appelle lui-même (192.168.1.12), quelle page appelle-t-il ?

PS : Lorsque le PC s'appelle lui-même (192.168.1.12), quelle page appelle-t-il ?

il utilise sans doute le loopback et ne passe pas par le réseau

avec vous essayé si - le PC : 192.168.1.12 est "visible" en HTTP depuis l' ordi portable : 192.168.1.13 ? avez vous un serveur web proprement configuré sur ce PC avec les ports ouverts en interne et pas juste en local ?

Merci pour votre réponse.

Le PC (192.168.1.12) n'est pas visible depuis le portable. La seule IP locale visible des deux postes est celle de la box (192.168.1.1).

J'ai un serveur local (EasyPhp), accessible en local.

Je regarde si je peux modifier le VirtualHost afin d'autoriser les IP.

OK donc cela indique une configuration non adéquate de votre serveur avec EasyPhp - le routing sur la box ne devrait pas poser de pb si vous utilisez le port 80 standard.

Je décris ici le réseau local de mon poste de travail. Mais en phase d'acquisition des données, le réseau ne sera composé que du PC portable et du Shield Ethernet.

Je replonge dans la doc de la configuration du serveur Apache.

Merci.

Vbloc: Je décris ici le réseau local de mon poste de travail. Mais en phase d'acquisition des données, le réseau ne sera composé que du PC portable et du Shield Ethernet.

Oui mais c'est la même chose que vos 2 PCs... si votre serveur n'est pas accessible depuis une autre machine du réseau, vous avez 0 chances que ça fonctionne depuis votre arduino