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 EthernetClient
und 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 $.
Antworten:
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.quelle