Hallo Zusammen,
ich möchte mit den Arduino einen Datenlogger realisieren, der die Zustände der Eingänge über Ethernet an einen PC sendet.
Auf dem PC sollen die Daten dann angezeigt und weiterverarbeitet werden.
Meine verwendete Hardware:
- SainSmart MEGA2560 R3
- Ethernet Shield v5.0
Prinzipiell klappt es schon das Arduino als Telentclient mit einen Telnetserver auf dem PC zu verbinden.
Auch das Datenschicken von Borad zum PC funktioniert grundsätzlich.
Allerdings bricht das Board nach einiger Zeit (Zeit und Datenmenge beliebig, nicht reproduzierbar) die Datenübertragung ab.
Ein Whiresharksmitschitt zeigt, dass bis zum Auftreten des Abruchs das Board jedes Zeichen einzeln übers Netz schickt (Scheint okay zu sein wenn ich den "client.println()"-Befehl richtig verstanden habe). Im Fehlerfall wird jedoch eine ganze Sequenz an Zeichen übertragen und dann kommt nix mehr.
Selbst ein Reset von Board und Shield bringen nix. Die Ethernetschnittstelle hängt, da nichtmal versucht wird eine Verbindung zum Server aufgebaut.
Erst nach Wegnehmen der Versorgungsspannung und anschließenden Wiederanschluss funktioniert alles wieder.
Der Server, der auf dem PC läuft erkennt den Abbruch der Verbindung. Nach Spannung AUS/AN meldet er die Verbindung und zeigt bis zum nächsten Absturz artig die Daten an. (Er muss nicht neugestartet werden.)
Hier das Testprogramm für die Datenübertragung:
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xAA };
IPAddress ip(192,168,6,7);
IPAddress server(192,168,6,2);
EthernetClient client;
String Ausgabe0 = "";
int Ausgabe1 = 0;
String Trennzeichen = ";";
String Startzeichen = "*";
String Endezeichen = "#";
int Schleife = 0;
void setup() {
pinMode(53, OUTPUT);
Ethernet.begin(mac, ip);
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Serial.println("connecting...");
delay(1000);
while (Schleife == 0)
{
client.connect(server, 2300);
Serial.println("Server connection failed_" + String (client.connected(), DEC));
delay (1000);
if (client.connected())
{
Schleife = 1;
}
}
Serial.println("Server connection OK");
delay (100);
}
void loop() {
Ausgabe1 = Ausgabe1 + 1;
Ausgabe0 = String(Startzeichen + String(millis(), DEC) + Trennzeichen + String(Ausgabe1, DEC) + Endezeichen);
Serial.println(Ausgabe0);
client.println(Ausgabe0);
delay(1);
}
Meine Frage ist jetzt:
Was bzw. wo mache ich etwas falsch?
Mit freundlichen Grüßen
Oliver