Routage UDP

Bonjour tout le monde,

Tout d'abord, voici ce que je suis en train de mettre en place : sur un PC, je démarre un serveur web (NodeJS) qui attend des requêtes UDP sur un port spécifique 5683 (il s'agit du protocole CoAP, similaire à HTTP sur le port 80). De l'autre côté, j'ai un Arduino Mega avec un shield Ethernet Velleman, programmé avec la librairie UIPEthernet.

Quand je branche tout ce petit monde sur ma box Internet (Numericable), tout fonctionne très bien :

  • l'arduino récupère une IP par le DHCP
  • l'arduino répond au ping
  • l'arduino arrive à envoyer les requetes UDP à mon serveur (j'ai des traces)

Mais lorsque j'essaie de remplacer ma box Internet par un routeur classique (TP-Link TL-WR841N) ou un switch (Netgear GS108T), plus rien ne va :

  • l'arduino n'arrive plus à s'attribuer d'IP en DHCP
  • il n'arrive plus à démarrer les connexions UDP (udp.begin==false)
  • rien n'est recu sur mon serveur.

Ma question est donc la suivante : qu'est-ce que fait (ou ne fait pas) ma box Numericable pour me permettre de tout faire communiquer? Par quoi / Comment puis-je la remplacer?

Merci beaucoup!

memel182:
Ma question est donc la suivante : qu'est-ce que fait (ou ne fait pas) ma box Numericable pour me permettre de tout faire communiquer? Par quoi / Comment puis-je la remplacer?

Merci beaucoup!

bonjour
attribue une IP fixe hors plage DHCP à ton shield ethernet

edit : j'ai repondu peut etre un peu vite , il s'agit d'un module a base de encj260 et pas d'un shield ethernet
je ne sais pas si la lib permet d'attribuer une IP fixe (ce serait etonnant que non)

apres rapide verif , il semblerait que ce soit possible

Ethernet.begin(mac,IPAddress(192,168,0,6));

memel182:
Mais lorsque j'essaie de remplacer ma box Internet par un routeur classique (TP-Link TL-WR841N) ou un switch (Netgear GS108T), plus rien ne va :
.....
Ma question est donc la suivante : qu'est-ce que fait (ou ne fait pas) ma box Numericable pour me permettre de tout faire communiquer? Par quoi / Comment puis-je la remplacer?

Ta box fait serveur DHCP elle délivre une adresse IP à ton montage. La fonction doit être activée dans ta box tout simplement.

Un switch ne fait pas serveur DHCP. Un switch c'est juste un "aiguillage" pour les paquets transmis.

Ton routeur fait routeur DHCP donc il pourrait allouer une adresse IP à ton montage mais peut être la fonction n'est-elle pas activée.

Bonjour,

J’ai le même routeur que vous avec en gros le même matériel, un shield chinois avec la lib fourni en exemple par Arduino
tout ce passe bien tant que je suis sur le réseau, mais je n’arrive pas a ouvrir le serveur Arduino sur la toile,
ni d’ailleurs à me connecter en local avec un smartphone

Je suiss en HTTP sur le port 2000
le shied Ethernet s’appel : WIZnetDFCCE8 MAC adresse : 40-F3-08-DF-CC-E8 IP : 192.168.0.100

Selon le STATU du routeur j’ai :
MAC Address: 30-B5-C2-D9-9C-DB
IP Address: 89.157.157.56
Subnet Mask: 255.255.254.0
Default Gateway: 89.157.156.1
DNS Server: 89.2.0.1 , 89.2.0.2

mon serveur devrai être visible à l’adresse HTTP://89.157.157.56:2000 MAIS rien du tout

Avez-vous une idée du paramétrage de ce routeur TP-Link TL-WR841N pour ouvrir le serveur Arduino sur la toile ?

le code est l’exemple WEBSERVER avec mes paramètres :

/*
  Web Server

 A simple web server that shows the value of the analog input pins.
 using an Arduino Wiznet Ethernet shield.

 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)

 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe

 */

#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[] = {
  0x40, 0xF3, 0x08, 0xDF, 0xCC, 0xE8
};
IPAddress ip(192, 168, 0, 100); // 89.157.157.56:2000/
//IPAddress ip(89,157,157,56);
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(2000);

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: 20");  // 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("
");
          }
          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");
  }
}
[code]

merci par avance de vos réponse,
Henri

[/code]

Henrigp:
Bonjour,

J'ai le même routeur que vous avec en gros le même matériel, un shield chinois avec la lib fourni en exemple par Arduino
tout ce passe bien tant que je suis sur le réseau, mais je n'arrive pas a ouvrir le serveur Arduino sur la toile,
ni d’ailleurs à me connecter en local avec un smartphone

Je suiss en HTTP sur le port 2000
le shied Ethernet s'appel : WIZnetDFCCE8 MAC adresse : 40-F3-08-DF-CC-E8 IP : 192.168.0.100

bonjour
avec ton smartphone tu es connecté en wifi sur ton routeur ou en xG ?
pour le reste il sufffit (surement) de faire un regle NAT/translation/forward
attention à une chose selon les operateurs le loopback peut etre "exclu"

Bonjour,

Dans les faq de tp-Link, tu as la conf. Ici

Cela doit correspondre à ton matériel.

A+

RE

C'est casse-pied ce truc quand on y comprends rien ! ! !

Mon smartphone est connecté en WIFI
Mon smartphone ne répond jamais avec http://192.168.0.100:2000
mais à fonctionné avec HTTP://89.157.157.56:2000 (un court instant ! ! ! )

Le plus terrible c'est que j'ai réussi à le faire fonctionné 1/2 heure avec l'adresse HTTP://89.157.157.56:2000,
comme j’étais super content j'ai essayé de mon smartphone avec cette adresse HTTP://89.157.157.56:2000 qui à bien répondu, donc je suppose que je passe par internet et que c'est accessible de n'importe ou.
J'ai essayé avec un ordi portable(sur le même réseau) avec HTTP://89.157.157.56:2000 et http://192.168.0.100:2000/ qui ont bien répondu aussi toutes les deux

J’éteins mes machines je vais déjeuné . . . . . 2h après je rallume tout, ET LA y a juste l’adresse http://192.168.0.100:2000 qui continu à fonctionner
C'est rageant :smiling_imp:
Merci Jean-michel pour le lien ç'a a l'air très proche de ma config et de toute façon c'a a fonctionné, y a pas de raison que c'a ne redémarre pas :blush:

Merci de vos suggestions(et de vos rires étouffée devant mes manips infructueuse)
Henri

Salut
Pour info, j'ai bien une page qui s'affiche avec ton adresse publique.
Des valeurs analog qui change régulièrement .... et des boutons

A+

Bonjour Caape & les autres,

AH AH donc ceci veut dire que mon Arduino + le shield W5100 fonctionne correctement puisque vous pouvez y accéder,
Et surtout que mon routeur est bien configurer.

j'ai changé d'exemple de Webserver pour prendre celui-ci : ICI
Ce qui me permets de vérifier le fonctionnement de la carte SD et de comprendre comment l'utiliser
par contre cet exemple utilise AJAX que je ne connais pas, ni trop le xml.

Je fais tout ceci à titre ludique, sens but bien précis mais je trouve que les cartes Ethernet W5100 ne sont pas fiables, la première que j'ai tester m'a fusillé un routeur.

ce serveur par exemple ne démarre pas systématiquement, il est toujours visible sur mon réseau avec 192.168.0.100:2000 mais exceptionnellement avec HTTP://89.157.157.56:2000
Il n'as pas le même comportement selon que le cordon USB est branché ou pas malgré une alim 9V sur l'Arduino.
Mais c'a progresse ;D
j'ai encore des problèmes avec la carte en simple client.

petite question : Ou trouver une bonne et fiable carte Ethernet ?
une W5100 ou une 5200 ?

Merci Caape d'avoir tester cet url
Cordialement,
Henri

Bonjour,

Pour apporter des éléments à mon problème initial, j’ai fait quelques tests :

Box Numéricable Switch Netgear
ou
Routeur TP-Link
Carte Ethernet Arduino Serveur Web (HTTP:80) OK
​Client CoAP (UDP:5683) OK
Serveur Web (HTTP:80) OK
​Client CoAP (UDP:5683) OK
Carte Ethernet Velleman Serveur Web (HTTP:80) OK
​Client CoAP (UDP:5683) OK
Serveur Web (HTTP:80) KO
​Client CoAP (UDP:5683) KO

Je ne comprends toujours pas pourquoi ma carte Ethernet Velleman d’origine n’arrive pas à s’initialiser avec mon routeur.

J’ai testé plusieurs librairies UIPEthernet, EtherCard etc mais rien n’y fait! >:(

Déjà sur le velleman c'est un ENC28J60, un chip moins bien doté qu'un W5100. Un protocole n'est peut-être pas géré ...