ich nutze einen Arduino mit Ethernetshield als TCP-Client und bekomme vom Server ein 73 Byte großes Datenpaket geschickt (siehe Anhang).
Mit client.read() kann ich aber immer nur das erste Byte auslesen, deshalb habe ich gedacht, ich versuche es mal mit client.readBytes()
Aber da bekomme ich eine Fehlermeldung " invalid conversion from 'byte*' to 'char*' ". Wenn ich bufferRX[] als char definiere, kommt die Fehlermeldung nicht, dafür erhalte ich als Ergebnis nur "Müll" im Serial Monitor (siehe Anhang).
Kann mir jemand helfen, wie man die 73 Bytes richtig ausliest?
Wieso machst du nicht so wie beim WebClient aus dem Beispiel-sketch?
void loop()
{
// if there are incoming bytes available
// from the server, read them and print them:
if (client.available()) {
char c = client.read();
Serial.print(c);
}
......
Und das "client.connect" hab ich eigentlich immer in der void setup()
vielen Dank für den Hinweis. Manchmal sieht man vor lauter Herumprobieren den Wald vor lauter Bäumen nicht. Ich mache es jetzt so:
if (client.available())
{
byte bufferRX[73];
int i = 0;
bufferRX[i] = client.read();
Serial.print(bufferRX[i], HEX);
Serial.print(" ");
i++;
}
"client.connect()" steht deswegen bei mir in void loop(), weil ich im endgültigen Programm zwei verschiedene Server abfragen will. Und da muss ich die einzelnen Verbindungen ja jeweils nacheinander aufbauen und wieder schließen. Oder liege ich da falsch?
@ Serenifly
Danke, habe ich auch gerade gemerkt, aber ich bin ja noch ganz am Anfang und probiere noch, ob meine einzelnen Programmteile grundsätzlich funktionieren.
...
The Arduino Ethernet Shield allows an Arduino board to connect to the internet. It is based on the Wiznet W5100 ethernet chip (datasheet). The Wiznet W5100 provides a network (IP) stack capable of both TCP and UDP. It supports up to four simultaneous socket connections. Use the Ethernet library to write sketches which connect to the internet using the shield. The ethernet shield connects to an Arduino board using long wire-wrap headers which extend through the shield. This keeps the pin layout intact and allows another shield to be stacked on top. ....
mir ist noch was nicht ganz klar zu Deinem Vorschlag die Verbindung in void.setup aufzubauen.
Kann man mit dem Wiznet nicht gleichzeitig 4 Verbindungen aufbauen?
In meinem Fall möchte ich zwei Server (Wechselrichter meiner PV Anlage) per TCP alle 15 Sekunden nach deren Betriebswerten abfragen. Wenn ich nun die beiden Verbindungen in void.setup herstelle und offenhalte, wie stelle ich dann in void.loop sicher, dass meine Anfragen den jeweils "richtigen" Server erreichen, bzw. stelle ich fest, von welchem Server die Antworten stammen?