Aller au contenu


Photo
- - - - -

Sield ethernet Arduino


  • Veuillez vous connecter pour répondre
5 réponses à ce sujet

#1 buildrobot

buildrobot

    Membre occasionnel

  • Membres
  • Pip
  • 89 messages
  • Gender:Male
  • Interests:Robotique humanoïde, programmation arduino, musique

Posté 29 juin 2018 - 12:49

Bonjour tout le monde !

 

J'ai un Shield Ethernet 2 que je veux utiliser avec mon arduino Uno.

 

Mon problème :

Lorsque je veux tester un code d'exemple de la librairie <Ethernet.h> (l'exemple WebServer), rien ne se passe.

J'ai bien rentré l'adresse mac du Shield. J'ai également changé l''adresse ip pour en utiliser une qui n'est pas utilisé sur mon réseau.

Je fais donc un ping sur cette ip et j'obtient "Impossible de joindre l’hôte de destination." 

En ouvrant mon port série, je me suis aperçu que je restais bloqué juste avant mon server.begin()

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

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 177);

// 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);

  Serial.println("Before server.begin()");
  server.begin();
  Serial.println("After 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("<!DOCTYPE HTML>");
          client.println("<html>");
          // 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("<br />");
          }
          client.println("</html>");
          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");
  }
}

D'où pourrait venir cette erreur ?

 

Autre précision, n'ayant pas de sortie ethernet murale, je passe pas mon PC. Je mets un câble qui relie une switch, et de cette switch je vais à mon Shield.

 

Merci d'avance pour vos réponse ! :)



#2 buildrobot

buildrobot

    Membre occasionnel

  • Membres
  • Pip
  • 89 messages
  • Gender:Male
  • Interests:Robotique humanoïde, programmation arduino, musique

Posté 02 juillet 2018 - 08:03

Après avoir revérifier mon câblage (qui n'est pas correct...) j'obtient dans mon moniteur série : "server is at 0.0.0.0"

La je ne vois vraiment d'ou ça pourrait venir...

 

Merci pour votre aide.



#3 thermo_nono

thermo_nono

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 822 messages

Posté 02 juillet 2018 - 08:44

essaye d'ajouter la fonction "if(Ethernet.begin(mac)==0) {..." présente dans l'exemple joint : 
 

void setup() {
  // start the serial library:
  Serial.begin(9600);
  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    for(;;)
      ;
  }
  // print your local IP address:
  Serial.println(Ethernet.localIP());

}

ça devrait t'indiquer si l’adresse mac est bien acceptée. 



#4 buildrobot

buildrobot

    Membre occasionnel

  • Membres
  • Pip
  • 89 messages
  • Gender:Male
  • Interests:Robotique humanoïde, programmation arduino, musique

Posté 02 juillet 2018 - 09:02

essaye d'ajouter la fonction "if(Ethernet.begin(mac)==0) {..." présente dans l'exemple joint : 
 

void setup() {
  // start the serial library:
  Serial.begin(9600);
  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    for(;;)
      ;
  }
  // print your local IP address:
  Serial.println(Ethernet.localIP());

}

ça devrait t'indiquer si l’adresse mac est bien acceptée. 

 

Merci pour ta réponse !

 

Mais cela ne change rien, je ne passe pas dans cette condition... :/



#5 cocothebo

cocothebo

    Membre passionné

  • Membres
  • PipPipPip
  • 341 messages
  • Gender:Male

Posté 02 juillet 2018 - 10:16

Salut,

 

Si tu utilises un shield ethernet 2, il faut les libs Ethernet2 et pas Ethernet (d'après le site arduino). Je ne sais pas si ça changera qqc, mais à priori suivant le shield c'est pas les mêmes composants dessus et donc pe que ta librairie ne fait pas les bons réglages.

 

De même, en regardant rapidemment les sources, en faisant 

Ethernet.begin(mac, ip);

La lib va par défaut considérer que l'adresse de la gateway et du serveur DNS est la même que l'adresse IP, avec le dernier octet à 1 (donc 192.168.1.1 dans ton cas).

Le masque de réseau sera aussi par défaut à 255.255.255.0



#6 buildrobot

buildrobot

    Membre occasionnel

  • Membres
  • Pip
  • 89 messages
  • Gender:Male
  • Interests:Robotique humanoïde, programmation arduino, musique

Posté 04 juillet 2018 - 10:43

Salut,

 

Si tu utilises un shield ethernet 2, il faut les libs Ethernet2 et pas Ethernet (d'après le site arduino). Je ne sais pas si ça changera qqc, mais à priori suivant le shield c'est pas les mêmes composants dessus et donc pe que ta librairie ne fait pas les bons réglages.

 

De même, en regardant rapidemment les sources, en faisant 

Ethernet.begin(mac, ip);

La lib va par défaut considérer que l'adresse de la gateway et du serveur DNS est la même que l'adresse IP, avec le dernier octet à 1 (donc 192.168.1.1 dans ton cas).

Le masque de réseau sera aussi par défaut à 255.255.255.0

 

En effet le problème venait de la librairie... Je ne pensais pas qu'il y en avait un le la version 2...

Merci ! :)






0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users