Pages: [1]   Go Down
Author Topic: [Résolu] Changer l'adresse IP du W5100 dans le setup()  (Read 771 times)
0 Members and 1 Guest are viewing this topic.
France
Offline Offline
Full Member
***
Karma: 0
Posts: 154
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je cherche à changer l'IP du W5100 dans le setup() du sketch.

Pour ça j'affecte une ip avec un Ethernet.begin(mac, IP).

Un Serial.println(Ethernet.localIP()) me confirme la bonne affectation de l'IP.

J'envoie quelques trames UDP en broadcast avec une serie de :
udp.beginPacket(IPBroadcast, udpPort)
udp.write("-----")
udp.endPacket()
Wireshark me confirme le bon envoi des paquets UDP.

Je change l'IP avec un Ethernet.begin(mac, autreIP).

Un Serial.println(Ethernet.localIP()) me confirme le changement d'IP.
Par contre, les trames :
udp.beginPacket(IPBroadcast, udpPort)
udp.write("-----")
udp.endPacket()
ne passent plus (plus de trace dans Wireshark).

Y a t'il quelque chose de plus à réinitialiser ou le changement d'IP à chaud est impossible?
« Last Edit: December 29, 2012, 07:29:48 am by Pac2Kro » Logged

Offline Offline
Edison Member
*
Karma: 17
Posts: 1990
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour,
tu es toujours dans la même plage ip?
ex: 192.168.1.xxx
Logged

France
Offline Offline
Full Member
***
Karma: 0
Posts: 154
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Un exemple valant mieux qu'un long discourt.
Code:
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUDP.h>

const unsigned int udpPort = 30666;
byte mac[] = { 0x90, 0xA2, 0xDA, 0x01, 0x01, 0x01 };
IPAddress IPgateDNS(10, 0, 0, 1);
IPAddress IP2(10, 0, 0, 2);
IPAddress IP3(10, 0, 0, 3);
IPAddress mask(255, 0, 0 ,0);
IPAddress broadcast(10, 255, 255, 255);
unsigned long monTimer = 0;
byte maBoucle = 0;
EthernetUDP udp;

void udpPacket(void);

void setup()
{
  Serial.begin(9600);
  Ethernet.begin(mac, IP2, IPgateDNS, IPgateDNS, mask);
  udp.begin(udpPort);
  udpPacket();
  while(Ethernet.localIP()==IP2)
  {
    if (millis()-monTimer>10000)
    {
      monTimer=millis();
      maBoucle++;
      Serial.println("Boucle");
      Serial.println(Ethernet.localIP());
      if (maBoucle>2)
      {
        Ethernet.begin(mac, IP3, IPgateDNS, IPgateDNS, mask);
      }
      else
      {
        udpPacket();
      }
    }      
  }
  Serial.println("FinBoucle");
  Serial.println(Ethernet.localIP());

  udp.beginPacket(broadcast, udpPort);
  Serial.println("Tag1");
  udp.write("VRB");
  Serial.println("Tag2");
  udp.write(mac,6);
  Serial.println("Tag3");
  udp.endPacket();
  Serial.println("Tag4");
}

void loop()
{
 Serial.println("TheEnd");
 delay(15000);
}

void udpPacket(void)
{
  udp.beginPacket(broadcast, udpPort);
  udp.write("ASK");
  udp.write(mac,6);
  udp.endPacket();
}
Sortie série:
Quote
Boucle
10.0.0.2
Boucle
10.0.0.2
Boucle
10.0.0.2
FinBoucle
10.0.0.3
Tag1
Tag2
Tag3

Je ne passe pas le Tag4.
Logged

Offline Offline
Edison Member
*
Karma: 17
Posts: 1990
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

tu n'aurais pas un pc qui aurait la même ip?
Logged

France
Offline Offline
Full Member
***
Karma: 0
Posts: 154
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci pour tes réponses.

Mon LAN est en 192.168.x.y

LAN-------en1-MacBook-en0--------ArduinoEthernetR3

en1 192.168.x.y
en0 10.0.0.1

Pas d'autre équipement sur le sous réseau 10.255.255.255.
« Last Edit: December 29, 2012, 04:21:55 am by Pac2Kro » Logged

Offline Offline
Edison Member
*
Karma: 17
Posts: 1990
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

pourquoi ne passes tu pas par ton lan directement?
Logged

France
Offline Offline
Full Member
***
Karma: 0
Posts: 154
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pour l'instant je suis en mode "plateforme de développement", je ne souhaite pas perturber mon LAN.
Mon projet est que plusieurs arduino puissent s'auto-affecter des adresses IP lorsque le serveur DHCP n'est pas joingnable en se découvrant les uns les autres via des trames UDP. Je sais que les ip pourraient être affectées dans le sketch mais ça ne serait pas marrant.


Je pense que le problème vient plutôt de la librairie EthernetUDP.h que j'utilise mal ou qui ne permet pas le changement d'IP à chaud.
« Last Edit: December 29, 2012, 05:16:51 am by Pac2Kro » Logged

France
Offline Offline
Full Member
***
Karma: 0
Posts: 154
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bon le problème est résolu, en allant farfouiller dans EthernetUDP.h, j'ai trouvé la class stop() qui n'est pas documentée sur le site arduino.

Donc après le :
        Ethernet.begin(mac, IP3, IPgateDNS, IPgateDNS, mask);
Je fais :
        udp.stop(); //ferme le socket
        udp.begin(udpPort); //ré-ouvre le socket
« Last Edit: December 29, 2012, 11:04:24 am by Pac2Kro » Logged

Pages: [1]   Go Up
Jump to: