Hallo zusammen,
Ich möchte eine Unicast-Verbindung zu einem Gerät in meinem Netzwerk herstellen, welches sobald sich ein anderes Gerät mit ihm verbindet, seine gesamte Konfiguration an dieses sendet.
Mein Netzwerk:
Besteht nur aus einem Switch an dem ca. 15 Geräte hängen. Es gibt keinen Router und demnach auch keine Verbindung ins Internet. Auch einen DHCP-Server sucht man vergeblich.
Mein Arduino-Setup:
Ich benutze einen originalen Arduino Uno SMD R3 auf dem ein originales Arduino Ethernet Shield 2 sitzt. Der Uno ist via USB an meinen PC angeschlossen, das Ethernet Shield ist via LAN mit meinen Switch verbunden.
Mein bisheriges Vorgehen:
Ich habe das Beispiel "WebClient" aus der Arduino Ethernet Library verwendet und es etwas für mich angepasst (siehe Code 1 unten).
Wie aus meinem Code 1 hervorgeht macht der Arduino erst eine DHCP-Anfrage, stellt dann fest das es keinen DHCP-Server gibt und nimmt die eingetragene IP- und DNS-Adresse. Im Serielen Monitor bekomme ich dann meine Daten (die Konfiguration des Geräts).
Soweit so gut.
Da ich meine IP nicht über einen DHCP beziehen möchte (und auch nicht kann weil es keinen DHCP-Server gibt) habe ich den Code nochmal ein wenig umgeschrieben (siehe Code 2) und folgendes festgestellt:
Das Problem:
Wenn ich Ethernet.begin direkt mit meiner IP-Adresse verwende, kann keine Verbindung zum Zielgerät aufgebaut werden. Wenn ich es erst mit einem DHCP versuche, feststelle das es keinen gibt und dann Ethernet.begin mit IP-Adresse verwende geht es!
Ich hab mir die Library mal kurz angeschaut, finde aber nichts (kann auch sein das ich da nicht ganz durchblicke).
Wäre über eine Antwort sehr dankbar!
Grüße jjw2202
Hier noch mein Code:
Code 1
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(10,1,22,30);
IPAddress ip(10, 1, 22, 77);
IPAddress myDns(10, 1, 22, 1);
EthernetClient client;
unsigned long beginMicros, endMicros;
unsigned long byteCount = 0;
bool printWebData = true;
void setup() {
Serial.begin(9600);
while (!Serial) {
;
}
Serial.println("Initialize Ethernet with DHCP:");
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
while (true) {
delay(1);
}
}
if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Ethernet cable is not connected.");
}
Ethernet.begin(mac, ip, myDns);
} else {
Serial.print(" DHCP assigned IP ");
Serial.println(Ethernet.localIP());
}
delay(1000);
Serial.print("connecting to ");
Serial.print(server);
Serial.println("...");
if (client.connect(server, 9990)) {
Serial.print("connected to ");
Serial.println(client.remoteIP());
} else {
Serial.println("connection failed");
}
beginMicros = micros();
}
void loop() {
int len = client.available();
if (len > 0) {
byte buffer[80];
if (len > 80) len = 80;
client.read(buffer, len);
if (printWebData) {
Serial.write(buffer, len);
}
byteCount = byteCount + len;
}
if (!client.connected()) {
endMicros = micros();
Serial.println();
Serial.println("disconnecting.");
client.stop();
Serial.print("Received ");
Serial.print(byteCount);
Serial.print(" bytes in ");
float seconds = (float)(endMicros - beginMicros) / 1000000.0;
Serial.print(seconds, 4);
float rate = (float)byteCount / seconds / 1000.0;
Serial.print(", rate = ");
Serial.print(rate);
Serial.print(" kbytes/second");
Serial.println();
while (true) {
delay(1);
}
}
}
Code 2
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(10,1,22,30);
IPAddress ip(10, 1, 22, 77);
IPAddress myDns(10, 1, 22, 1);
EthernetClient client;
unsigned long beginMicros, endMicros;
unsigned long byteCount = 0;
bool printWebData = true;
void setup() {
Serial.begin(9600);
while (!Serial) {
;
}
Ethernet.begin(mac, ip, myDns);
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
while (true) {
delay(1);
}
}
if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Ethernet cable is not connected.");
}
delay(1000);
Serial.print("connecting to ");
Serial.print(server);
Serial.println("...");
if (client.connect(server, 9990)) {
Serial.print("connected to ");
Serial.println(client.remoteIP());
} else {
Serial.println("connection failed");
}
beginMicros = micros();
}
void loop() {
int len = client.available();
if (len > 0) {
byte buffer[80];
if (len > 80) len = 80;
client.read(buffer, len);
if (printWebData) {
Serial.write(buffer, len);
}
byteCount = byteCount + len;
}
if (!client.connected()) {
endMicros = micros();
Serial.println();
Serial.println("disconnecting.");
client.stop();
Serial.print("Received ");
Serial.print(byteCount);
Serial.print(" bytes in ");
float seconds = (float)(endMicros - beginMicros) / 1000000.0;
Serial.print(seconds, 4);
float rate = (float)byteCount / seconds / 1000.0;
Serial.print(", rate = ");
Serial.print(rate);
Serial.print(" kbytes/second");
Serial.println();
while (true) {
delay(1);
}
}
}