DHCPAddressPrinter ne fonctionne pas, ni l'ethernet shield

Bonjour,

Je viens de recevoir mon Ethernet Shield W5100 que j'utilise sur une carte UNO sans carte SD (slot vide).

J'ai commencé par tester le programme DhcpAddressPrinter, en veillant à utiliser l'adresse MAC de mon shield : byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
Rien ne s'est affiché.

J'ai donc cherché des solutions, et j'ai testé le code recommandé ici :
http://forum.arduino.cc/index.php/topic,156082.msg1169948.html#msg1169948
Ce qui m'a bien affiché 192.168.2.2, comme attendu.

J'ai ensuite retesté DhcpAddressPrinter, en essayant la solution proposée dans le même topic : ajouter au setup() les lignes suivantes :

 // disable SD card if one in the slot
 pinMode(4,OUTPUT);
 digitalWrite(4,HIGH);

J'ai testé avec, j'ai testé sans (on sait jamais) ... toujours aucun résultat positif.

Enfin, j'ai testé le programme WebClient (fourni dans les exemples), toujours rien.
J'ai tenté de créer une connexion avec les paramètres suivants (vérifiés dans l'interface de gestion de ma Bbox, pour laquelle le DHCP est bien activé évidemment) :

IPAddress ip(192,168,1,50);
IPAddress gateway(192,168,1,254);
byte submask[] = {255,255,255,0};

En tentant, différentes combinaisons du begin() : Ethernet.begin(mac, ip), Ethernet.begin(mac, ip, gateway, submask), etc.
Le résultat est toujours un beau "Connection failed..."

Entre ces différentes étapes, j'ai également tenté de débrancher, redémarrer, etc. ... sans effet.

Bref, aucune des solutions croisées sur les forums ne m'ont aidé jusque là !
Auriez-vous une idée ?

Une idée : Ethernet.begin() ne renvoie rien si appelé autrement que Ethernet.begin(mac).

Il sort d'où ton message "Connection failed..." ?

RTFM ? ;D

Et à quoi tu le connectes ?

Sauf mauvaise compréhension de ma part, tu es parti du programme DhcpAddressPrinter donné dans le tutoriel Arduino, en remplaçant Ethernet.begin(mac) par Ethernet.begin(mac, ip, etc...)

Et là tu te retrouves avec

  if (Ethernet.begin(mac, ip, etc...) == 0) {
     Serial.println("Failed to configure Ethernet using DHCP");
     // no point in carrying on, so do nothing forevermore:
     for(;;)
       ;
   }

Je parie que tu entres dans le if même si le begin se passe bien.

Bon, j'ai trouvé l'origine du problème : le port Ethernet de la Box sans doute défectueux, je suis passé sur le 2 et ça marche parfaitement... (oui, à peu près la seule chose que je n'avais pas tenté)
Merci pour vos réponses en tout cas !

Une autre idée : la Bbox a fort peu judicieusement une adresse ip locale 192,168,1,254 (j'ai la même à la maison).

Lorsque gateway ou dns sont omis dans l'appel Ethernet.begin(mac, ip), la valeur par défaut qui leur est attribuée est 192.168.1.1, ce qui marche beaucoup moins bien

Là encore c'est écrit dans la doc

RTFM x 2 ? :stuck_out_tongue_closed_eyes:

Bref chez moi c'est :

  • soit Ethernet.begin(mac), qui met trois plombes, sans fonctionner à tous les coups et sans que j'aie réussi à comprendre pourquoi. Quand ça plante mon arduino freeze et ne ressort jamais de la fonction Ethernet.begin().

  • soit Ethernet.begin(mac, ip, dns, gateway, subnet) à cause des spécificités Bbox et là cela fonctionne bien.