problème de communication avec arduino ethernet via un switch

a marqué ce sujet comme résolu.

Bonjour à tous,

J'ai une arduino uno R3 avec une shield ethernet (wiznet w5100) et je commence quelques essais de communication avec mon PC.

Lorsque l'arduino est directement connectée au PC avec un câble réseau ça marche. Par "ça" je veux dire que les exemples "Web Server" et "UDPSendReceiveString" présents dans l'IDE fonctionnent correctement. J'arrive aussi à faire un ping sur mon arduino.

Par contre si je met un switch entre le PC et l'arduino, là ça ne communique plus. Je n'arrive plus à accéder au webserver, ni envoyer de trames UDP, ni a pinger l'arduino (Impossible de joindre l'hôte de destination).

Bien entendu j'ai vérifié le fonctionnement du switch, mes câbles réseau. Tout est ok de ce coté là.

J'ai trouvé ça sur le net : https://forum.arduino.cc/index.php?topic=344605.0. Voir l'avant dernier post. L'idée est de rajouter à la main dans la table ARP la correspondance IP de l'arduino avec l'@mac de l'arduino. En faisant ça, UDPSendReceiveString fonctionne, mais* le WebServer et pinger l'arduino ne fonctionnent toujours pas. Notez que le ping me donne maintenant une erreur différente (Délai d'attente de la demande dépassé).

Étrange non ? Est-ce que quelqu'un à une idée d'où peux venir le problème ? Merci à ceux qui vont se pencher sur la question.

*Edit: Non, UDPSendReceiveString ne fonctionne pas non plus. Arduino reçoit bien la trame UDP envoyée depuis le PC, mais ne réponds pas. Tout porte à croire que le sens PC => arduino fonctionne mais le sens arduino => PC non.

+0 -0

Je ne pensais pas faire un tel flop…> En effet, malheureusement j'ai l’impression que la majorité de problèmes entre arduino et internet (Shields Ethernet, Wifi, …) soit encore méconnues … Mais tu apporte déjà la source de ton problème, c'est déjà ça !

Bonsoir à tous, Francky, j'ai exactement le même soucis que toi … Ma config : 1 routeur (freebox), 1 Switch dlink branché sur la freebox, mes PC et arduino branchés sur le switch. Mon switch est un dlink 1008d, ma config reseau est correct et le code arduino egalement. Lorsque mon arduino est branché sur le switch je n'arrive plus à le pinger alors que les autres périphériques dessus sont pingable. Si je le branche direct sur la freebox j'arrive à le pinger.

Est-ce que tu as pu avancer sur ce problème ?

A+ JM

Salut,

Mon problème était également avec un D-link 1008d. Ma solution - qui n'en est pas une - a été de changer de switch. Là je suis sur un D-link DGS-1024D et ça marche sans problèmes. Ça va que j'avais un autre switch sous la main, mais c'est un peu foireux comme solution…

J'ai lu sur les forums d'arduino que parfois ça pouvait ne pas fonctionner avec certaines marques ou types de switch… Mais pas plus d'informations.

Ce topic donne une piste qui pourrait être creusée pour quelqu'un qui touche un peu mieux les réseaux que moi. C'est une histoire de table ARP. J'avais essayé et ça marchait en partie : je voyais que mon arduino recevait bien les trames venant du PC (grâce au moniteur série). Par contre je n'arrivais pas à voir la réponse d'arduino.

Désolé de ne pas plus t'aider. Si jamais tu avances sur le sujet, parle nous-en ici. Je serais curieux de connaitre la solution.

+0 -0

bonjour,j'ai un probléme de communication de shield ethernet arduino avec mon pc j'ai pas un routeur ,j'utilise un clé 3g internet j'associe un adresse ip a mon carte et je téleverse l'exemple webserver lorsque je tape sur google l'adresse ip alors il affiche un message d'erreur et lorsque je téléverse a mon carte les leds restent clignotenet

Il serait préférable que tu créés un nouveau sujet sur le forum pour exposer ton problème.

Ce topic là date un peu, et le sujet principal était un problème lié au switch. Toi tu n'as pas de switch, donc la source de ton problème est ailleurs… ;)

moi également j’ai un probleme avec mon Ethernet shield W5100 connecté sur un routeur D Link. le com affiche : erreur de connexion.

voici le programme

// Ces deux bibliothèques sont indispensables pour le shield #include <SPI.h> #include <Ethernet.h>

// L’adresse MAC du shield byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0xA5, 0x7E }; // L’adresse IP que prendra le shield IPAddress ip(192,168,1,177); // L’objet qui nous servira a la communication EthernetClient client; // Le serveur à interroger char serveur[] = "perdu.com";

// pour lire les caractères char carlu = 0; // moment de la dernière requête long derniereRequete = 0;

// temps minimum entre deux requêtes const long updateInterval = 10000; // mémorise l’état de la connexion entre deux tours de loop bool etaitConnecte = false;

void setup() { // On démarre la voie série pour déboguer Serial.begin(9600);

char erreur = 0; // On démarre le shield Ethernet SANS adresse IP (donc donnée via DHCP) erreur = Ethernet.begin(mac);

if (erreur == 0) { Serial.println("Parametrage avec ip fixe…"); // si une erreur a eu lieu cela signifie que l’attribution DHCP // ne fonctionne pas. On initialise donc en forçant une IP Ethernet.begin(mac, ip); } Serial.println("Init…"); // Donne une seconde au shield pour s’initialiser delay(1000); Serial.println("Pret !"); }

void loop() { // on lit les caractères s’il y en a de disponibles if(client.available()) { carlu = client.read(); Serial.print(carlu); }

// SI on était connecté au tour précédent // ET que maintenant on est plus connecté // ALORS on ferme la connexion if (etaitConnecte && !client.connected()) { Serial.println(); Serial.println("Deconnexion !"); // On ferme le client client.stop(); }

// Si on est déconnecté // et que cela fait plus de xx secondes qu’on a pas fait de requête

if(!client.connected() && ((millis() - derniereRequete) > updateInterval)) { requete();

}

// enregistre l’état de la connexion (ouvert ou fermé) etaitConnecte = client.connected(); }

void requete() { // On connecte notre Arduino sur "perdu.com" et le port 80(defaut pour l’http) char erreur = client.connect(serveur, 80);

if(erreur == 1) { // Pas d’erreur ? on continue ! Serial.println("Connexion OK, envoi en cours…");

// On construit l’en-tête de la requête client.println("GET / HTTP/1.1"); client.println("Host: perdu.com"); client.println("Connection: close"); client.println();

// On enregistre le moment d’envoi de la dernière requête derniereRequete = millis(); } else { // La connexion a échoué :( // On ferme notre client client.stop(); // On avertit l’utilisateur Serial.println("Echec de la connexion"); switch(erreur) { case(-1): Serial.println("Time out"); break; case(-2): Serial.println("Serveur invalide"); break; case(-3): Serial.println("Tronque"); break; case(-4): Serial.println("Reponse invalide"); break; } } }

j’ai vraiment besoin d’aide

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte