Arduino + Ethernet Shield hängt nach einiger Zeit

7

Ich verwende ein Arduino, um einige Daten aus einer Webanwendung abzurufen. Das Problem ist, dass es nach einiger Zeit zu hängen beginnt.

Zum Testen habe ich die Standardskizze verwendet EthernetClientund ein wenig geändert, sodass alle paar Sekunden eine Anfrage an den Server gesendet wird, um die Informationen zu erhalten. Zum Testen mache ich nichts mit den Daten, die ich erhalte, so dass nur die Anfrage gesendet und die Daten abgerufen werden.

Zum Testen verwende ich ein Arduino Mega 2560 + Ethernet Shield und eine Arduino Ethernet-Karte. Bei beiden tritt das Problem auf. Es läuft von 30 Minuten bis zu einem Tag, dann friert das ganze Board ein. Die Bretter werden nicht heiß oder sonst etwas.

Zuerst scheint es zu funktionieren, aber nach einer unbestimmten Zeit beginnt es zu hängen. Hat jemand eine Idee, was dies verursachen könnte? Gibt es einen Fehler auf dem Arduino oder dem W5100 Ethernet Chip?

Würden Sie versuchen, dieses Problem zu beheben oder zu einem Raspberry Pi zu wechseln? Die Verwendung des Watchdog-Timers ist keine Option, da er auf dem Mega nicht funktioniert, ohne den Bootloader zu ändern.

UPDATE (Mein Loop-Code wurde hinzugefügt, es gibt keine Speicherprobleme, das habe ich vorher getestet):

void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    delay(2000);

    if (client.connect(server, 80)) {
      Serial.println("connected");
      client.println("GET / HTTP/1.0");
      client.println();
    }
  }
}

Dies ist alles, was es tut. Im Setup gibt es den Standardinitialisierungscode aus der Ethernet-Demoskizze.

UPDATE 2

Das Testen mit Arduino Mega + WiFi Shield hängt ebenfalls.

Das Testen mit EtherMega 2560 von Freetronics läuft jetzt 2 Tage ohne Probleme. Ich werde dies für min. eine Woche. Mein einziges Problem mit dieser Bord ist der Preis. Es ist ungefähr 100 $.

tbraun89
quelle
Haben Sie keinen Speicher mehr? Eine andere Ressource verbraucht?
pjc50
Für eine solche Frage müssen Sie wirklich ein bisschen Code posten. Es könnte so einfach sein, dass Sie Verbindungsabbrüche / Zeitüberschreitungen vom Server nicht korrekt behandeln, was möglicherweise erklärt, warum es etwas zufällig erscheint.
PeterJ
Mein Beitrag wurde aktualisiert. (Testen Sie dies tatsächlich auf einem EtherMega 2560 von Freetronics und einem Mega 2560 mit WiFi Shield) Sie laufen jetzt seit 30 Minuten. Ich lasse Sie jetzt, wenn beide oder einer von ihnen hängt.
Tbraun89
Also, was ist die Ausgabe des seriellen Monitors, wenn er "hängt"
vicatcu
Es druckt permanent den Inhalt einer Website, wenn er hängt, befindet er sich irgendwo in der HTML-Datei. (Fügte meine Testergebnisse mit den zu anderen Arduinos als Update hinzu)
tbraun89

Antworten:

0

AKTUALISIEREN

Hier ist eine funktionierende Lösung testet mit Mega (1.0.1) und Due (1.5.3)

Ok, es scheint , dass es einen Fehler in den Arduino 1.0.x- Bibliotheken gibt, der dazu führt, dass das Ethernet-Modul nach einiger Zeit hängen bleibt , wenn Sie einen Server dauerhaft abfragen müssen.

Mit dem Arduino Due (Arduino 1.5.2) läuft es jetzt und auch viel schneller! Es ist also vielleicht die beste Option, um dies zu verwenden, wenn Sie mit viel Netzwerkverkehr und vielen Vorgängen zu tun haben. Ich werde die Arduino-Entwickler bezüglich dieses Problems kontaktieren und diese Antwort aktualisieren, wenn ich weitere Informationen zu diesem Problem habe.

tbraun89
quelle