Arduino mit Netzwerk erneut verbinden

Hallo,

wie kann ich meinen Arduino ausgehend von dem u.a. Code dazu bringen, dass er sich im Falle eines Verbindungsabbruchs automatisch erneut mit dem Netzwerk verbindet?

Gruß Chris

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

byte mac[] = {0x90, 0xA2, 0xDA, 0x0E, 0xBD, 0xB0};
EthernetServer server(80);  // Serverobjekt

void setup()
{
  Ethernet.begin(mac);
  server.begin();        // Webinterface
}

void loop()
{
  refreshLease();             // Ethernet- LeaseAktualisierung
}

void refreshLease()
{
  static unsigned long lastTime;

  if (millis() - lastTime >= 1000)
  {
    Ethernet.maintain();
    lastTime = millis();
  }
}

Chris72622:
Hallo,

wie kann ich meinen Arduino ausgehend von dem u.a. Code dazu bringen, dass er sich im Falle eines Verbindungsabbruchs automatisch erneut mit dem Netzwerk verbindet?

Was meinst Du damit konkret?

Wenn Du beim Ethernet-Shield das Netzwerkkabel h erausziehst und danach oirgendwann wieder einstöpselst?

Ja, genau.

Gruß Chris

Chris72622:
wie kann ich meinen Arduino ausgehend von dem u.a. Code dazu bringen, dass er sich im Falle eines Verbindungsabbruchs automatisch erneut mit dem Netzwerk verbindet?

Wenn du mit festen IP-Adressen arbeitest, hast du das Problem nicht.

Kannst du nicht von den Leds ableiten, ob eine Netzwerkverbindung besteht und dann die Verbindung neu starten ?

Chris72622:
Ja, genau.

Gruß Chris

Hast Du es schon mal mit einem Reset probiert?
Den Reset-Pin mit einem Arduino-Pin verbinden, der dann bei Bedarf auf OUTPUT und LOW geschaltet wird, dann sollte das Board und das Programm neu starten.

Chris72622:
wie kann ich meinen Arduino ausgehend von dem u.a. Code dazu bringen, dass er sich im Falle eines Verbindungsabbruchs automatisch erneut mit dem Netzwerk verbindet?

Darf ich dich mal fragen, wozu du Ethernet.maintain(); in deinem Programm verwendest?

?

combie:
Darf ich dich mal fragen, wozu du Ethernet.maintain(); in deinem Programm verwendest?

Das ist doch ganz offensichtlich:
Er vergibt in seinem Programm keine feste IP-Adresse im Netzwerk, sondern er "mietet" sich eine dynamische IP-Adresse per DHCP.

Und die "Mietzeit (lease time) für dynamische IP-Adressen ist begrenzt. Und um zu verhindern, dass die Mietzeit abläuft, und die IP-Adresse ungültig wird, wenn der DHCP-Server (das ist im allgemeinen der Router) diese "abgelaufene" IP-Adresse möglicherweise am ein anderes Gerät im Netzwerk neu vergibt, beantragt er regelmäßig eine "Verlängerung der Mietzeit" für die erhaltene IP-Adresse per Ethernet.maintain() Funktionsaufruf.

Das ist doch ganz offensichtlich:

Ja, nee....