Problème Shield Ethernet W5100

Bonjour,

J’ai un problème avec mon shield Ethernet, impossible de la connecter à ma freebox V6 en mode routeur. Le shield fonctionne en direct avec mon PC en utilisant le code exemple WebServer, l’adresse IP est modifiée à 192.168.0.171 compris dans ma plage configurée sur ma freebox. Aucune détection du Shield. En direct sur mon PC le ping 192.168.0.171 répond, mais dès que j’utilise un switch, pas de réponse au ping, pourtant je vois les voyants Tx et Rx s’allumer au lancement du ping.
Connecté en direct sur ma freebox, aucun dialogue, les voyants link, 100m, fulld s’allume sporadiquement.
En utilisant un switch entre mon shield et ma freebox, les voyants link, 100m, fulld sont allumés et le voyant Rx s’allume sporadiquement, mais aucune détection par la freebox, , pas de réponse au ping, pourtant je vois les voyants Tx et Rx s’allumer au lancement du ping.
Même résultat avec un autre switch de même modèle. Mon shield a déjà été changer, j’avais le même problème avec le précédent. La carte SD fonctionne et les cables sont bons.

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
};
IPAddress ip(192, 168, 0, 171);

// 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 native USB port 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 disconnected”);
Ethernet.maintain();
}
}

Quelqu’un a t’il une solution ?
Merci.

Bonjour,

Branché en direct sur ma freebox, le réseau local switch port 1 (RJ45 ou est branché mon Arduino R3) affiche inactif.

Pour info c'est un shield ethernet W5100 de marque HanRun.

Apparemment mon problème n'inspire personne.

sidwin9: Apparemment mon problème n'inspire personne.

:grin: Si ,si mais peut etre qu'ici personne n'utilise une freebox avec un shield W5100 ? 8)

Ton shiedl est fonctionnel.

Le shield fonctionne en direct avec mon PC en utilisant le code exemple WebServer, l'adresse IP

Les "problemes" avec freebox et shield semblent etre assez récurrents Ton probleme n'est donc à priori pas un probleme "arduino"

As-tu essayé de donner une adresse ip dynamique à ton Shield? c’est à dire utiliser le protocole DHCP?

Commenter la ligne

//IPAddress ip(192, 168, 0, 171);

et changer

Ethernet.begin(mac);

Enfin un interlocuteur, cela fait plaisir.

Le plus louche, c'est qu'en direct sur mon PC cela fonctionne, ping de l'adresse IP et lecture de l'adresse mac avec arp -a. Sans rien changer, je rajoute un switch entre mon PC et le Shield Ethernet et là plus de réponse au ping malgré que via les voyants je vois très bien qu'il y a un dialogue Rx et Tx au moment du ping.

En direct sur ma Freebox, aucun dialogue, les voyants link, 100m, fulld s'allume sporadiquement.

Mystère... ou problème de compatibilité.

Dans ton commentaire je comprends de remplacer IPAddress ip(192, 168, 0, 171); par Ethernet.begin(mac); Il me semble que j'ai déjà fait l'essai mais je vais retenter.

Merci pour ton aide.

Ok, vu pour Ethernet.begin(mac); je retire la variable ip et je commente IPAddress ip(192, 168, 0, 171); pour la désactiver.

Test effectué, le résultat est exactement le même.

ok essaye d'ajouter ça à ton code

byte mac[] = { 0x00,0x01,0x02,0x03,0x04,0x05 }; IPAddress ip(192, 168, 0, 171); IPAddress dns(192,168,0, 1); IPAddress gateway(192, 168, 0, 1);

et tu change Ethernet.begin(mac, ip); par

Ethernet.begin(mac, ip, dns, gateway);

Deuxième remarque enlève cette ligne

while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only }

Le code est incorrect, apparemment il faut utiliser myDns au lieu de dns et j’ai une erreur de code de type exit :
status 1
‘Ethernet’ does not name a type
sur la ligne Ethernet.begin(mac, ip, myDns, gateway);

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

byte mac[] = { 0x00,0x01,0x02,0x03,0x04,0x05 };
IPAddress ip(192, 168, 0, 171);
IPAddress myDns(192,168,0, 1);
IPAddress gateway(192, 168, 0, 1);


EthernetServer server(80);

void setup() {
  
  Serial.begin(9600);
 
  Ethernet.begin(mac, ip, myDns, gateway);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}

tu as bien fait comme ça ? si non copie le code et réessaye

J'ai modifié avec ces lignes :

IPAddress ip(192, 168, 0, 171); IPAddress myDns(192, 168, 0, 1); IPAddress gateway(192, 168, 0, 1);

// 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 native USB port only }/

// start the Ethernet connection and the server: Ethernet.begin(mac, ip, myDns, gateway);

Toujours les mêmes résultats via Switch et direct Freebox, ne fonctionne pas.

Voici 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 = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05
};
IPAddress ip(192, 168, 0, 171);
IPAddress myDns(192, 168, 0, 1);
IPAddress gateway(192, 168, 0, 1);

// 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 native USB port only
}
/

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

Ne fonctionne toujours pas via mon Switch et/ou ma Freebox V6. Snif.

! merci de mettre le code entre balises code → icône </> !

Dernière tentative sur ton code

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

byte mac[] = { 0x00,0x01,0x02,0x03,0x04,0x05 };


EthernetServer server(80);

void setup() {
  
  Serial.begin(9600);
 
  Ethernet.begin(mac);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}

Remplace ça directement sur ton code.
Si ça ne marche pas ça veut dire tu n’as aucun problème avec ton code.

Réflexions :
1- T’assurer que tu utilises un bon Shield qui va bien avec la librairie Ethernet.h
2- S’assurer qu’il y’a pas de restriction de ton adress mac sur ton routeur
3- Il suffit de voir via le Moniteur Série grace à la fonction “Serial.println(Ethernet.localIP());”
si ça donne ip : 0.0.0.0 … ça veut dire que ton Shield n’a pas été configuré, autrement dit “Ethernet.begin” n’a pas fait sa fonction. Si le contraire sur le moniteur serial tu trouves 192.168.0.171… là il faut s’assurer que le pc avec lequel tu ping il peut communiquer sur le routeur et il ya aucun soucis de son coté.
4- Dans le cas ou tu te désespères, essaye de trouver d’autres librairies dédiées à ce Shield, je te laisse découvrir.

Bon courage!

1- Mon shield est prévu pour Ethernet.h (Shield Ethernet W5100 de marque HanRun), https://www.amazon.fr/gp/product/B00W98121M/ref=oh_aui_detailpage_o05_s00?ie=UTF8&psc=1

2- Pas de restriction de cette adresse mac sur mon routeur

3- Donne server is at 0.0.0.0 en ip dynamique et server is at 192.168.0.171 en ip fixe, mon PC ping très bien mon routeur et le shield lorsqu'il est en direct avec lui (cable droit ou croisé).

Je vais voir s'il y a d'autres librairies mais je doute que cela fonctionne.

Merci pour ton aide.

à ta place j'essayerai plutôt de changer de routeur dans ce cas

Sauf que mon routeur c'est ma Freebox V6 avec laquelle je n'ai jamais eu aucun problème. Sans utiliser la Freebox et en reliant mon shield avec mon PC via un switch ca ne fonctionne pas non plus, je pense plutôt à une incompatibilité de mon shield chinois avec mon switch et mon routeur. Je vais plutôt changer mon shield pour un officiel arduino Shield Ethernet 2. Apparemment je ne suis pas le seul à avoir eu ce genre de problème avec un shield HanRun et aucune solution n'est apportée. D'autre personne utilisent sans problème un shield ethernet sur Freebox V6.

Bonjour, je possède une Free Révolution et j'utilise plusieurs Arduinos avec le w5100 sans problème (en direct sur la box ou via un switch) en IP fixe ou en DHCP. Le seul pb que j'ai eu c'était une goutte de soudure qui se promenait sur le connecteur ISP il faudrait être sur de ta config réseau : ip de la box, subnet, plage DHCP déservie (a trouver dans la console d'admin de la box) dans la solution que kjnr t'a fais essayer il y a peut être un pb, la box est par défaut en 192.168.0.254 (pas 0.1) et pour ne pas avoir besoin du DHCP il faut rajouter le masque de sous réseau donc rajouter : byte subnet[] = { 255, 255, 255, 0 }; et de modifier : Ethernet.begin(mac, ip, gateway, gateway , subnet); (sachant que la box fait relais DNS il n'y a pas besoin de 2 variable différentes) mais je ne crois pas trop que cela résoudra ton pb, je pense plus a des séries de W5100 "moins (ou plus) sensibles" attention : si tu achètes un schield ethernet V2 il faudra changer de lib ethernet

Bonjour rjnc38 et merci pour ton aide,

J'ai déjà effectué ce que tu me proposes. Branché en direct sur ma Freebox je n'ai même pas le voyant 100M d'allumé ou alors sporadiquement, via un switch (là, tous les voyants sont corrects), en lançant un ping depuis mon PC, je vois très bien, via les voyants Rx et Tx que le shield répond aux pings de son adresse IP, sauf que le résultat est négatif sur le cmd de mon PC, et la Freebox ne détecte pas mon shield, ma Freebox répond au ping. J'ai eu exactement le même problème avec le shield précédent que le vendeur m'a échangé. Info : Ce n'est pas un Shield EthernetV2 et j'ai fait un test avec Ethernet2.h et là, rien ne fonctionne du tout.