Hallo ich versuche vergebens die per DHCP bezogene IP Adresse (Ethernet.localIP)
über UDP.write zu versenden (finden vom gerät im netzwerk).
Nur nimmt UDP.write nur chars. Ich hab leider kein Plan wie ich das miteinander verbinden kann. Hoffe jemand von euch kann mir dabei helfen.
Vielen Dank im voraus.
Jimmy
Kannst Du bitte etwas detaillierter Beschreiben, was Du vor hast und ggf. den Code posten, der noch funktioniert.
So ganz verstehe ich nicht was Du machen willst.
Mario
Man kann ja mit Udp.write Daten per UDP über das Netzwerk schicken.
z.B.
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.write("Test");
Udp.endPacket();
das klappt soweit auch alles
nun kann ich mir ja per
Serial.println(Ethernet.localIP());
meine IP Adresse ausgeben die der Controller per DHCP bekommen hat.
Diese Adresse möchte ich per UDP verschicken.
also z.b.
Udp.write(Ethernet.localIP()); --> das jedoch geht nicht, da Udp.write chars erwartet und Ethernet.localIP was anderes liefert.
Ja, die Doku der Libs auf der Arduinoseite sind leider nicht immer sehr geschickt.
Die Methode "localIP()" liefert ein Objekt vom Typ IPAddress zurück. Auf die einzelnen Oktets kannst Du über den Array-Operator zugreifen (ist in der IPAddress Klasse überladen)
Du kannst also mit folgenden arbeiten:
IPaddress ip = Ethernet.loaclIP();
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.write(ip[0]);
Udp.write(ip[1]);
Udp.write(ip[2]);
Udp.write(ip[3]);
Udp.endPacket();
Hm habe ich so getestet
Kommen auf der anderen Seite aber nur Hieroglyphen an.
Kann es sein das ip[0] z.b. kein char array ist?
Natürlich ist das kein char-Array, wieso sollte es das auch sein.
Eine IP-Adresse besteht nunmal aus 4 bytes.
"192.168.25x.111" sind 14 bytes plus ggf. noch das terminierende '\0'.
Die 4 Bytes 192,168,25,111 enthalten genau die gleichen Informationen.
Du musst also die ankommende 4 bytes die Du sendest noch in einen String verwandeln, oder das Ganze gleich als String losschicken
char buffer[16] ="" //maximale Größe des Strings sind 15 Zeichen plus Terminierung
int len = 0;
len = sprintf(buffer, "%d.%d.%d.%d",ip[0],ip[1],ip[2],ip[3]);
Udp.write(buffer,len);