Arduino (Uno) Ethernet-client-Verbindung schlägt fehl, nachdem viele Kunden druckt
Bin ich mit einem Arduino Uno mit Ethernet-Shield.
Nach dem Absenden viele HTTP-Anforderungen, client.println(...), wird der client gestartet, um Fehler beim anschließen. Die Zeit zu scheitern scheint willkürlich zu sein, und die Sequenz Auslesen aus der Schleife können überall variieren zwischen ~1000 und ~7000.
Den Fehler nicht zu tun mit dem Ethernet-Sendepuffer überläuft (Nach diese Beratung)
Hier ist der code, fehlschlägt:
#include <Ethernet.h>
#include <SPI.h>
//Network constants
byte mac[] = {0x00, 0x23, 0xdf, 0x82, 0xd4, 0x01};
byte ip[] = {/*REDACTED*/};
byte server[] = {/*REDACTED*/};
int port = /*REDACTED*/;
Client client(server, port);
//State
int sequence;
void setup(){
Ethernet.begin(mac, ip);
Serial.begin(9600);
sequence = 0;
delay(1000);
}
void loop(){
httpPut("/topic/:test/publish?sessionId=SESenanhygrp");
Serial.println(sequence++);
}
void httpPut(char* url){
if (!client.connect()) {
Serial.println("EXCEPTION: during HTTP PUT. Could not connect");
return;
}
client.print("PUT");
client.print(" ");
client.print(url);
client.println(" HTTP/1.0");
client.println();
while(!client.available()){
delay(1);
}
while(client.available()) {
char c = client.read();
Serial.print(c);
}
while(client.connected()){
Serial.println("Waiting for server to disconnect");
}
client.stop();
}
Tritt der Fehler im folgenden segment
if (!client.connect()) {
Serial.println("EXCEPTION: during HTTP PUT. Could not connect");
return;
}
An dem Punkt, wenn der client nicht verbinden, ich würde zwei Dinge tun: (1) überprüfen Sie die server-logs für jeden Beweis der server empfängt die fehlerhafte Verbindung anfordert; (2)
Zusätzlich zu den oben genannten, 3) würde ich überprüfen, ob der stack überlaufen ist. 4) es ist ein Speicherverlust tritt auf, dass nach tausenden von Zyklen.
Die server-logs nicht an, keine Probleme. Speicher ist immer ein problem bei der Verwendung von Arduinos, aber der obige code sollte ganz "memory safe"
Wie haben Sie die Bibliothek herunterladen von basteln?
netstat
auf dem server, um festzustellen, ob die früheren verbindungen geschlossen wurden oder noch werden.Zusätzlich zu den oben genannten, 3) würde ich überprüfen, ob der stack überlaufen ist. 4) es ist ein Speicherverlust tritt auf, dass nach tausenden von Zyklen.
Die server-logs nicht an, keine Probleme. Speicher ist immer ein problem bei der Verwendung von Arduinos, aber der obige code sollte ganz "memory safe"
Wie haben Sie die Bibliothek herunterladen von basteln?
InformationsquelleAutor ChrisSSocha | 2011-09-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ein bug in der Arduino-Ethernet-Bibliothek in v22 (wie besprochen, in Linux - /Windows-V0022/1.0 Ethernet-problem GELÖST).
Die Lösung für mich war, mit Ethernet2 library (von Peter aus basteln.es). Der code, der benötigt minor basteln, aber alles scheint einwandfrei zu funktionieren jetzt. Ich habe es geschafft, mehr als 40000+ HTTP-Nachrichten gesendet, ohne Probleme. (Gelegentlich einzelne Nachrichten können nicht gesendet werden, aber diese Fehlerquote ist weniger als 4%.)
InformationsquelleAutor ChrisSSocha
Ich würde verlangsamen die Kommunikation rate mit Zunehmender Zeit 10x zwischen den Nachrichten. Dann, wenn Sie nicht erhalten eine Fehlermeldung, zwischen 1000 und 7000 Nachrichten, es würde wahrscheinlich bedeuten, dass Sie sprechen zu schnell, um Ihr kleines Arduino-und es-Puffer wird ein überlauf -, die Kommunikations-Bibliothek ist leider nicht erholen. Ich würde auch Arduino monitor freier bytes im Puffer über die serielle Schnittstelle nach jeder Nachricht. Sie können auch testen, für dieses Verhalten durch das senden von Nachrichten so schnell wie möglich aus dem PC, und sehen, ob das einfrieren den Arduino nach einer Weile. Wenn Sie es tut, können Sie zu leugnen Nachrichten, bis Puffer ist oben etwas einzugrenzen.
InformationsquelleAutor avra