Problème shield Ethernet

Bonjour,
Je viens d’acheter un shield Ethernet et voilà plusieurs heures que j’essaye de le faire fonctionner.
je le teste avec le croquis WebServer disponible sur l’IDE. le code est le suivant.

#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 };
IPAddress ip(192,168,1,38);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}

// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}

void loop() {
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
Serial.println(“new client”);
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if you’ve gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == ‘\n’ && currentLineIsBlank) {
// send a standard http response header
client.println(“HTTP/1.1 200 OK”);
client.println(“Content-Type: text/html”);
client.println(“Connection: close”); // the connection will be closed after completion of the response
client.println(“Refresh: 5”); // refresh the page automatically every 5 sec
client.println();
client.println("");
client.println("");
// output the value of each analog input pin
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print(“analog input “);
client.print(analogChannel);
client.print(” is “);
client.print(sensorReading);
client.println(”
“);
}
client.println(””);
break;
}
if (c == ‘\n’) {
// you’re starting a new line
currentLineIsBlank = true;
}
else if (c != ‘\r’) {
// you’ve gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println(“client disonnected”);
}
}

j’ai paramétré mon routeur pour avoir une ip fixe avec ce shield.
lorsque je le lance, il fonctionne mais au bout de quelques rafraichissements de la page web ( ici il se fait toutes les 5 secondes) il se bloque. Si j’appuie sur le bouton RESET le moniteur série m’indique une adresse ip de mon serveur à 255.255.255.255 :o
j’ai beau alors refaire un reset, c’est toujours le même message qui s’affiche : “server is at 255.255.255.255” >:(
le seul moyen de relancer est de débrancher l’arduino ou de déplugger le shield. Mais le programme se bloque à nouveau au bout d’un temps variable. J’ai remarqué aussi que si aucun client ne vient se connecter, le shield ne bug pas et un appuie sur reset me redonne une bonne adresse.

Etant donné que je n’ai pas le niveau pour construire un robot qui viendrait débrancher l’arduino en mon absence je serais trés heureux si un génie de la communauté me donnait ne serait ce qu’une ébauche de solution ou de raison à ce problème. Au pire y a t’il un moyen de faire un RESET total sans avoir à débrancher le shield.

J’en profite aussi pour demander si il y a un moyen d’afficher les numéro de ligne sur l’IDE arduino.

J’ajoute aussi que pour pas me faire refourguer du matos pourri en cochonium de chine j’ai acheté ce shield dans un vrai magasin avec un vrai gens pas sympa qui m’a pris pour un vrai blaireau, ce que je suis sans doute vu le nombre d’heures que je passe à faire fonctionner son matos…

si c'est un schield ethernet v2 (puce W5200 ou 5500) il faut utiliser la lib ethernet2

glou75:
j'ai paramétré mon routeur pour avoir une ip fixe avec ce shield.

c'est a dire ???? (l'ip fixe est faite par "Ethernet.begin(mac, ip)" et il n'y a rien a faire sur le routeur)

Oui en effet. En fait j’ai fait ça histoire de ne pas avoir de conflit avec d’autres équipements sur le réseau. Merci pour le tuyau. En fait je ne sais pas vraiment si mon shield est récent mais je vais essayer quand même.

la seule chose a faire est de choisir une ip fixe dans ton programme ("IPAddress ip(192,168,1,38);") hors de la plage DHCP de ton routeur

J'ai essayé la librairie V2, mais ça marche pas du tout, même après avoir débranché l'arduino. La différence est que maintenant mon adresse n'est plus 255.255.255.255 mais 0.0.0.0.
Merci pour l'astuce sur la plage DHCP, j'avais même pas remarqué qu'il y en avait une ...

donc ça doit etre un chip w5100 donc lib ethernet

Oui. et le probleme c'est que de temps en temps ça fonctionne mais ensuite plus rien et il n'y a rien d'autre à faire que de couper le jus. J'ai plus qu'à la ramener chez mon gentil vendeur ....

c'est un UNO ?
il n'y a pas une pin du schield pliée lorsque tu les assemble ?
tu peux l'essayer en DHCP ("Ethernet.begin(mac);") et voir quelle adresse ton routeur lui affecte
c'est quoi ta box ?

J'ai déjà essayé en DHCP mais ça change rien. Et aucune pine n'est pliée..
J'ai une Livebox orange

Un problème d'alimentation peut-être?

Hélas non. Même avec une alimentation direct et câble USB débranché ça marche pas non plus

je ne connais pas trop la livebox mais peux tu monitorer le port sur lequel ton arduino est branché
voir si tu trouve bien l'@ mac et la vitesse lorsque ça fonctionne et voir s'il y a une différence lorsque ça fonctionne plus
tu es sur de la qualite de ton cordon rj45

En te connectant sur ta Livebox par http://192.168.1.1/, La page affiche les équipements connectés à la Livebox.

Chez moi, avec ma Livebox, j'ai bien mon Arduino DUE + Ethernet qui est affiché comme connecté avec son adresse IP fixe (192.168.1.50).

Si tu ne la vois pas, un ping 192.168.1.138 à l'aide de la console cmde.exe

J'ai vérifié tout ca déjà. Le Shields apparaît bien sur le routeur avec la bonne adresse et le bon mac. Quand il se bloque il disparaît aussi donc tout va bien a priori du côté routeur.
Mais le plus étrange je trouve c'est qu'un appui sur reset ne permet pas de refaire marcher le Shield. Il faut le débrancher pour qu'il refonctionne, pas très longtemps hélas. Comme si le reset ne vidait sa mémoire. Y aurait il on pb électronique sur ces shield. Y a t'ils un moyen de le vider autrement? Ensuite en mettant des messages à afficher sur le moniteur série, je constate qu'il se bloque à n'importe quel moment soit lorsqu'il lit les messages du client ou lorsqu'il envoie des messages. C'est totalement aléatoire. En revanche si il n'y a pas de client connecté il ne se bloque pas. Bien sur quand il se bloque il ne peut pas fermer le client non plus.

Un lien sur le shield aiderait sans doute

C’est celui ci https://hackspark.fr/fr/w5100-ethernet-shield-for-arduino.html

Votre doc dit:

There is an onboard micro-SD card slot, which can be used to store files for serving over the network. It is compatible with the Arduino, Crowduino and Mega (using the Ethernet library). The onboard microSD card reader is accessible through the SD Library. When working with this library, SS is on Pin 4.

je serai tenté - par acquis de conscience, de mettre la pin 4 en output et de la mettre à HIGH pour ne pas qu'elle perturbe le fonctionnement des commandes ethernet en influençant le bus. A effectuer en début de setup() avant d'initialiser la partie Ethernet.

pinMode(4, OUTPUT);
digitalWrite(4, HIGH);// désactive le lecteur de carte SD

Alors là JLM je dis un grand bravo !! J'ai mis le pin 4 à HIGH comme tu me l'as indiqué et ÇA MARCHE !!
Il me reste maintenant à voir si je peux quand même faire marcher le lecteur SD.
Merci beaucoup

la pin 10 et la pin 4 — quand elles sont à LOW — disent au bus que le composant qu'elles contrôlent doit écouter les commandes et vous ne pouvez pas avoir les 2 qui écoutent/parlent sur le bus en même temps sinon c'est la cacophonie :slight_smile:

Donc à vous de vous assurer que quand vous parlez au composant ethernet la pin 4 est HIGH et quand vous parlez au composant SD la pin 10 est HIGH.

les librairies Ethernet et SD font cela pour vous normalement si vous utilisez les 2. là le pb était sans doute que vous n'utilisiez aucune librairie pour la carte SD et donc la pin 4 flottait au grès du vent mettant le bazar aléatoirement

glou75:
J'en profite aussi pour demander si il y a un moyen d'afficher les numéro de ligne sur l'IDE arduino.

--> oui c'est une option dans les préférence de l'IDE - juste une case à cocher et valider

Effectivement il y a un conflit entre le lecteur SD et la carte ethernet. D'ailleurs si j'enlève la carte mémoire , le shield fonctionne bien même sans mettre le pin 4 à high. Par contre si j'ajoute la bibliothèque SD sur le fichier sans l'utiliser ça se remet à déconner.