Problème shield ethernet

Bonjour à tous,

Quelqu'un pourrait-il me dire pourquoi le moniteur série ne m'affiche rien après l'instruction "if" dans le void setup
Avant le IF, c'est OK, le moniteur m'affiche "Avant le if" et dans le if, je fais imprimer si la condition est vraie ET si la condition est fausse mais je ne vois rien !!!!!

A votre bon coeur,

#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp.h>

////
//
// General code from http://www.pushingbox.com for Arduino + Ethernet Shield (official) v1.2
//
////

#include <SPI.h>


/////////////////
// MODIFY HERE //
/////////////////


byte mac[] = { 0xA3, 0xA2, 0xDA, 0x10, 0x51, 0xB2 };   // Be sure this address is unique in your network

//Your secret DevID from PushingBox.com. You can use multiple DevID  on multiple Pin if you want
char DEVID1[] = "v3219EC8DFA62E19";        //Scenario : "The mailbox is open"

//Numeric Pin where you connect your switch
uint8_t pinDevid1 = 3; // Example : the mailbox switch is connect to the Pin 3

// Debug mode
boolean DEBUG = true;
//////////////
//   End    //
//////////////


char serverName[] = "api.pushingbox.com";
boolean pinDevid1State = false;                // Save the last state of the Pin for DEVID1
boolean lastConnected = false;                 // State of the connection last time through the main loop


// Initialize the Ethernet client library
// with the IP address and port of the server 
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

void setup() {

Serial.begin(9600);
  
pinMode(pinDevid1, INPUT);

// start the Ethernet connection:

    Serial.println("avant le if");
    
if (Ethernet.begin(mac) == 0) {
  
  Serial.println("Dans le if");
  Serial.println("Failed to configure Ethernet using DHCP");
  // no point in carrying on, so do nothing forevermore:
  while(true);
}
else{
  Serial.println("Dans le if");
  Serial.println("Ethernet ready");
  // print the Ethernet board/shield's IP address:
  Serial.print("My IP address: ");
  Serial.println(Ethernet.localIP());
}
// give the Ethernet shield a second to initialize:
delay(1000);

    Serial.println("fin de void setup");
}

void loop()
{
    ////
    // Listening for the pinDevid1 state
    ////
    if (digitalRead(pinDevid1) == HIGH && pinDevid1State == false) // switch on pinDevid1 is ON 
    {
      if(DEBUG){Serial.println("pinDevid1 is HIGH");}
      pinDevid1State = true;
      //Sending request to PushingBox when the pin is HIGH
      sendToPushingBox(DEVID1);
    }
     if (digitalRead(pinDevid1) == LOW && pinDevid1State == true) // switch on pinDevid1 is OFF
    {
      if(DEBUG){Serial.println("pinDevid1 is LOW");}
      pinDevid1State = false;
      //Sending request to PushingBox when the pin is LOW
      //sendToPushingBox(DEVID1);    //Here you can run an other scenario by creating a DEVID2 variable
    }
    
    
    //DEBUG part
    // this write the respons from PushingBox Server.
    // You should see a "200 OK"
    if (client.available()) {
      char c = client.read();
      if(DEBUG){Serial.print(c);}
    }
    
    // if there's no net connection, but there was one last time
    // through the loop, then stop the client:
    if (!client.connected() && lastConnected) {
      if(DEBUG){Serial.println();}
      if(DEBUG){Serial.println("disconnecting.");}
      client.stop();
    }
    lastConnected = client.connected();
}


//Function for sending the request to PushingBox
void sendToPushingBox(char devid[]){
client.stop();
if(DEBUG){Serial.println("connecting...");}

if (client.connect(serverName, 80)) {
  if(DEBUG){Serial.println("connected");}

  if(DEBUG){Serial.println("sendind request");}
  client.print("GET /pushingbox?devid=");
  client.print(devid);
  client.println(" HTTP/1.1");
  client.print("Host: ");
  client.println(serverName);
  client.println("User-Agent: Arduino");
  client.println();
} 
else {
  if(DEBUG){Serial.println("connection failed");}
}
}

bonjour,
merci de mettre le code entre balise code </>

A mon avis, cela vient de ceci

    while(true);

ca tourne en boucle

Merci pour ta réponse :slight_smile:

Je cherche comment éditer pour ajouter les "/" Boulet :frowning:

Mais le "While(true);" vient après l'instruction "print" !!!!!

P

Bonjour,

Voir ici.

Tu ne sorts pas du Ethernet.begin(). Paut être que ta carte a un problème, ou un problème de connexion. Essaies de désenficher et réenficher ta carte.

Merci Kamill,

En relisant, ca a l'air évident .... Mais pourquoi ne sort-il pas du ethernet.begin()

Ce même sketch fonctionne avec une autre carte ethernet (modèle sans arduino uno) mais pas avec le shield classique qui s'enfiche sur mon arduino uno.

Pour mettre mon sketch entre " / " et faire ce que tu me montres, il faut pouvoir éditer mon post et je ne trouve pas.

Bonne soirée,

P

Le problème pourrait-il venir de :

Sur ma carte, il y a une étiquette avec l'adresse MAC mais j'ai utilisé ce même sketch avec une autre carte (qui elle a fonctionné), mon modem a peut-être assimilé l'autre carte à ce numéro d'adresse mac et refuse dès lors de l'attribuer à une deuxième !

Merci à tous,

P

pdeneye:
Pour mettre mon sketch entre " / " et faire ce que tu me montres, il faut pouvoir éditer mon post et je ne trouve pas.

En bas à droite de ton message tu as 'quick edit more...'. Cliques sur 'more' et tu as 'modify'

pdeneye:
Le problème pourrait-il venir de :

Sur ma carte, il y a une étiquette avec l'adresse MAC mais j'ai utilisé ce même sketch avec une autre carte (qui elle a fonctionné), mon modem a peut-être assimilé l'autre carte à ce numéro d'adresse mac et refuse dès lors de l'attribuer à une deuxième !

Merci à tous,

P

bonsoir
je ne sais pas si c'est la cause de ton probleme, mais l'adresse MAC des shields ethernet W5100 est volatile

Encore merci Kamill,

Artouste, c'est bien ce que j'avais lu mais pourquoi y a t-il une étiquette papier derrière le shield ?

Donc, en cause, peut-être la carte mais difficile de savoir !!!!

Faudrait trouver quelqu'un qui a ce même shield.

Belle journée.

pdeneye:
Sur ma carte, il y a une étiquette avec l'adresse MAC mais j'ai utilisé ce même sketch avec une autre carte (qui elle a fonctionné),

As tu essayé en codant l'adresse MAC de l'étiquette dans le sketch ?

pdeneye:
mon modem a peut-être assimilé l'autre carte à ce numéro d'adresse mac et refuse dès lors de l'attribuer à une deuxième !

Un serveur DHCP standard du type de ceux installé dans des modem/box ne fait pas de différence entre les clients au delà de l'adresse MAC. Si l'adresse MAC est déjà affectée dans le serveur DHCP et que tu utilise la même adresse MAC pour la requête il te redonnera la même adresse IP en réponse. Si tu utilise une adresse MAC différente il te donnera une autre adresse IP valide s'il y en a encore de disponible.

Si tu veux effacer toute trace du serveur, il est souvent possible de se connecter dans les modems pour effacer le bail DHCP alloué à un client. Il faut utiliser l'administration du modem ou de la box.

pdeneye:
...
Artouste, c'est bien ce que j'avais lu mais pourquoi y a t-il une étiquette papier derrière le shield ?

Donc, en cause, peut-être la carte mais difficile de savoir !!!!

Faudrait trouver quelqu'un qui a ce même shield.

bonjour
des shields ethernet j'en ai
si l'etiquette avec une adresse mac existe "je crois" pour simplement des raisons "réglementaires"
perso je ne m'en suis jamais preoccupé

Merci Landid,

Oui, j'ai essayé avec plusieurs adresses MAC dont celle indiquée sur le shield.

Pour le modem, je sais bien-sûr y accéder et s'il m'accorde la même adresse IP, ce n'est pas un problème. Pour l'instant, je n''utilise pas les 2 cartes simultanément.

Je pense qu'il faut creuser au niveau de la fonction ethernet.begin(mac) paarce qu'il n'y a aucune raison qu'il tourne dans le vide sans afficher un code d'erreur !!!

Ce shield ethernet n'est-il pas un grand classique ? Je devrai trouver des retours d'expérience mais pour l'instant, je n'ai toujours rien trouvé.

Merci pour votre intérêt en tout cas, ça fait plaisir.

Pierre

Ce shield ethernet n'est-il pas un grand classique ? Je devrai trouver des retours d'expérience mais pour l'instant, je n'ai toujours rien trouvé.

Moi c’était ma Freebox qui ne voulait rien savoir, j'ai trouver comme solution un routeur wifi pour 20 euros et sa marche nickel.

Re,

Je ne saurais pas t'aider sur la fonction ethernet.begin mais en bricolant un peu avec le code de la librairie on doit pouvoir sortir l'erreur. Ci dessous un extrait du fichier dhcp.cpp mais elle correspond au renouvellement du bail et pas à l'établissement. La fonction begin semble ne renvoyer que 1 ou 0

/*
    returns:
    0/DHCP_CHECK_NONE: nothing happened
    1/DHCP_CHECK_RENEW_FAIL: renew failed
    2/DHCP_CHECK_RENEW_OK: renew success
    3/DHCP_CHECK_REBIND_FAIL: rebind fail
    4/DHCP_CHECK_REBIND_OK: rebind success
*/

Je m'en sort mieux cotè serveur pour ma part :slight_smile:

pdeneye:
Pour le modem, je sais bien-sûr y accéder et s'il m'accorde la même adresse IP, ce n'est pas un problème. Pour l'instant, je n''utilise pas les 2 cartes simultanément.

Le question est : Est ce qu'il t'accorde une ip ? As tu réussis à lire la table DHCP dans le modem? On doit y trouver une correspondance entre les adresses MAC et IP.

S'il le modem ne répond pas à la carte elle ne peut pas faire grand chose de plus. Pour faire plus de tests tu peux utiliser une ip fixe pour voir si le shield fonctionne déjà physiquement. S'il fonctionne avec une IP fixe il faut surement chercher du coté du modem.

Merci Landid, je vais investiguer de ce côté là.

Et vous tiens au courant, c'est la moindre des choses.

Déjà merci.

P

Mon modem est une BBOX 3 (sagemcom) et le moins que l'on puisse dire, c'est que c'est pas génial point de vue information et paramétrisation. Les infos sont souvent ... aléatoires (un périphérique comme une caméra peut apparaitre comme disparaitre même si elle est accessible continuellement). Pas d'accès à une table DHCP en mode "user". je vais essayer de trouver le moyen de me connecter en mode expert :slight_smile:

Apparemment pas de PW disponible, il est changé toutes les 24h et n'est connu que de l'opérateur.

Retour à la case départ pour mon problème.

Alors effectivement si c'est Bouygues ... et sagemcom en plus :slight_smile:
Et bien il te reste :

  • soit a utiliser une ip fixe

  • sinon a utiliser un "vrai" serveur DHCP

Et pour utiliser une IP fixe, c'est une commande particulière dans l'arduino ?

Bonne soirée,

P

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