Ethernet Shield Wiznet

Hallo Arduino Begeisterte.

Ich habe seit 2 Wochen das Arduino Ethernet Shield auf meinem Arduino Uno R3.
Leider funktioniert keines der Samples. Die Suche im Forum...einfach nur nach "Ethernet"...
ließ mich auf viele Topics stoßen, doch niemand klagt anscheinend darüber, dass die Sketche
garnix von sich geben.

Ich nutze den Arduino ansich schon länger ohne Ethernetshield und hatte bisher nie Probleme
mit irgendwelchen Ports. Mein Shield ist dieses hier: http://arduino.cc/en/Guide/ArduinoEthernetShield

Ich beziehe mich folgend auf das Webserver/client Sketch.
Ich passte die IP Adresse im Sketch an und lud es hoch, das Board war nach dem
Uploadreset und manuellem Reset mal bereits mit Netzwerkkabel und einmal ohne
verbindung, mit Serieller Verbindung und ohne (wenn ich mich nicht mit dem Serial Monitor
verbinden wollte, wurde in setup() while(!Serial).. entfernt.

Leider antwortet das Board weder auf Ping (Host unreachable), noch funktioniert das DHCPAdressPrinter beispiel.
Ausprobiert mit Dhcp übern Router, LAN Kabel getestet und iO, Crossoverkabel und statische
IPs ausprobiert (Im Webserver/clientsketch) und kein Erfolg.

eine Verbindung per "telnet arduinoip 80" vom PC funktioniert ebenfalls nicht und scheitert
ebenso wie mit jeder x-belibigen nicht vorhandenen IP Adresse im Netzwerk.

Nichtmal der Hauch einer Antwort kommt zurück oder geht rein. Nach hinzufügen vieler
Debugmeldungen hab ich herausgefunden dass server.available() immer null zu sein scheint
und wenn das Board ein client ist, ist Ethernet.begin(mac) immer 0.

Mein Shield hat keinen sticker mit MAC Adresse, mehrere MAC-Adressen habe ich getestet.

Weiterhin hatte ich irgendwo gelesen das es abundzu probleme mit dem SD Karten zugriff gibt
da der Wiznet grundsätzlich auf dem SPI kommuniziert wenn Port X nicht gesetzt ist, dies
hab ich im Sketch nicht weiter berücksichtigt da die SD Karteneinheit aktuell nicht benötigt wird.

Tjoa was kann ich nun noch tun?

Ein weiteres Ethernetshield und neuer Arduino Uno r3 ist bereits bestellt um festzustellen obs an der
Hardware liegt. Außerdem ein Arduino Mega und Nano die noch nicht da sind

Einen Sticker mit MAC-Adresse gibt es nicht, da es keine festgelegte MAC gibt. Der WIZnet5100 (ich vermute mal das es der auf dem Shield ist) bekommt diese vom Sketch vorgegeben.
Ich würde erstmal schrittweise vorgehen und in einem einfachen Beispiel-Programm jeden einzelnen Schritt mit "Serial.println()" Ausgaben kapseln, um zu sehen, ob das Programm irgendwo hängen bleibt.
Sobald die Initialisierung des Ethernet-Chips abgeschlossen ist, sollte die gesetzte IP per "ping" erreichbar sein, da das direkt vom Chip abgehandelt wird, dazu ist kein eigener Code notwendig. Allerdings nur, wenn es tatsächlich der WIZnet-Chip ist. Es gibt auch "billige" Shields mit dem ENC28J60 Chip, bei dem man "alles selbst machen" muss. Daher bitte nochmal prüfen, welchen Chip Du hast.
Ansonsten poste mal das Programm mit dem Du testest, ggf. können wir Dir beim Anpassen auf die Debug-Ausgaben helfen.
Mario.

WIZnet5100 chip ist drauf.

#include <SPI.h>
#include <Ethernet.h>

//Router: 192.168.178.1/24
//DHCP: 192.168.178.30-50/24
//DNS: 192.168.178.1 o. 141.1.1.1
IPAddress myip(192, 168, 178, 100);
byte mac[] = {  0xAD, 0xEE, 0xBB, 0xFF, 0xFA, 0xAD };
IPAddress server(173,194,69,94); // Google

EthernetClient client;
double timestamp;

void setup() {
  Serial.begin(9600);
  timestamp=millis();
  
  Serial.println("Ethernet.begin()");
  
  Ethernet.begin(mac,myip);
  
  /*
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Serial.println("no point in carrying on, so do nothing forevermore");
    Serial.print( "Timeout after: ");
    Serial.println( millis()-timestamp );
    
    for(;;)
      ;
  }else{
     Serial.println("Ethernet.begin(mac) != 0");
  }
  */
  
  delay(1000);
  
  Serial.println("connecting...");
  
  if (client.connect(server, 80)) {
    Serial.println("connected");
    client.println("GET /search?q=arduino HTTP/1.0");
    client.println();
  } else {
    Serial.println("connection failed");
  }
}

void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    for(;;)
      ;
  }
  delay(100);
}

Einmal mit DHCP und ohne. DHCP an dann scheiterts schon am Ethernet.begin(mac)
und gebe ich mir selbst ne IP, ist spätestens bei client.connect(server,80) schluss

Also zunächstmal ist das Beispiel ein HTTP-Client Beispiel. Damit lauscht Dein Arduino nicht auf ankommende Verbindungen. Allerdings sollte ein Ping aus dem lokalen Netz funktionieren.
Das nach dem "client.connect(server,80)" Schluss ist, liegt daran, das Du kein Gateway für die IP-Konfig des Arduino angegeben hast. Damit kann der Arduino nur Netzwerkgeräte / -teilnehmer im lokalen Netz erreichen, da er nicht weiss, wer als "Vermittler" zu anderen Netzen fungiert. Das wäre dann die IP Deines Routers. Vermutlich die 192.168.178.1 (ich schätze mal eine Fritzbox :slight_smile: )

Verwende mal zusätzlich noch die Einstellungen für Gateway und Netzmaske:

byte netmask[] = { 
  255,255,255,0 };
byte gateway[] = { 
  192,168,178,1 };
byte dns[] = { 
  192,168,178,1 };

...
Ethernet.begin(mac, myip, dns, gateway, netmask);

Damit sollte der Arduino auch das lokale Netz verlassen können. Wichtig ist auch, das Du die festgelegte IP nicht noch einmal in Deinem Netz verwendet hast, das gibt sonst auch Probleme. Schau also mal in der Fritzbox nach, ob evtl. der DHCP-Server die 192.168.178.100 bereits vergeben haben könnte. Ich glaube das ist bei der Fritzbox der Standard, das DHCP-Adressen ab .100 anfangen.
Ggf. einfach mal was ganz krummes wie 192.168.178.247 oder so verwenden, damit sind die Chancen ganz gut, das die IP nur einmal vergeben ist.
Mario.

Vielen Dank erstmal für deine Hilfe :slight_smile:

Der DHCP Adressbereich wurde verändert. Die IP ist definitiv nur einmal
in Benutzung. Wenn DHCP funktioniert hätte, bekommt der Chip ja auch
direkt noch die Netzmaske, Gateway und DNS mitgeteilt was ein setzen
der parameter unnötig macht, aber es funktioniert ja nichtmal der DHCP Request.

Weiterhin habe ich auch versucht, ein Serversketch auf Port 80 TCP lauschen zu lassen
und mich darauf mit telnet aurduinoip 80 verbunden, was zumindest zu einer
Verbindung führen MUSS (sprich, schwarzer bildschirm in cmd)

Außerdem ist die Google Adresse die einzige externe IP, die ich testete.
Als ich zur Google IP keine Verbindung bekam, habe ich ihn eine Verbindung zu meinem
Webserver im netzwerk aufbauen lassen was auch nicht funktionierte.

Grüße

Micha :slight_smile:

Hi,

bitte beachte, dass Ethernet.begin() bei Sketches nach IDE 1.0 an dritter Stelle die IP eines DNS-Servers erwartet:
Ethernet.begin(mac, ip, dns, gateway, subnet);

Wie viel Volt liegen am VIN-Pin des Arduinos?
Ich hatte mal ein Problem weil ich noch ein paar andere Verbraucher dran hatte und das Ethernet-Shield dann rumsponn bei nur 5V Versorgungsspannung. Mit 9V klappte dann alles wie ich wollte.

Ansonsten: Blinken die LED neben der Ethernet-Buchse eigentlich?

Oh, am VIN Port liegen nur 4,26V an. Ja alle LEDs blinken so vor sich hin,
auch die RX und TX der Ethernetschnittstelle.

Nun habe ich ein Netzteil mit angeschlossen und habe eine SPannung
von 12V am VIN Port. Weiterhin den Fehler "Failed to configure Ethernet using DHCP"
beim DhcpAddressPrinter example :frowning:

Hast Du evtl. die Möglichkeit mittels Etherreal zu schauen ob der DHCP Broadcast des Arduino sichtbar ist? Es müßte ja die vergebene MAC-Adresse in den Paketen sichtbar sein. Somit wüßte man, ob die Kiste überhaupt Daten sendet.
Wie sieht den die restliche Netzwerk-Konfig aus? Router - Switch - Rechner - Arduino?

Das werde ich nachher mal ausprobieren, da die Fritzbox die Broadcastdomänen
zwischen LAN und WLAN trennen wird, muss ich den Arduino und meinen Etherreal PC wohl
erstmal per Switch am Router anschließen um den Broadcasts noch zu bekommen.
Aber das schaue ich mir nachher an.
Einen anderen Router habe ich auch schon getestet und ohne Router mit Crossoverkabel
und statischen IPs hats ja auch nicht funktioniert. Ich behaupte nun mal das mein Netzwerkaufbau
soweit in Ordnung ist und verdächtige langsam das Ethernet Shield.

Grüße

Hummelpups:
Ich behaupte nun mal das mein Netzwerkaufbau
soweit in Ordnung ist und verdächtige langsam das Ethernet Shield.

Das denke ich mittlerweile auch fast. Vermutlich wird sich das erst genau klären wenn Deine zusätzliche Hardware da ist.

Ich berichte, wenns da ist. Watterott is ja immer recht flott mit Versand

Es lag am Shield, schade um eure und meine Zeit

Vielen Dank für euren Support!

Für den Fall dass jemand ein ähnliches Problem hat:
Die version des Shields ist entscheidend, bei meinem wiznet ethernet shield hat die die standard library #include <Ethernet.h> nicht funktioniert, man muss die neuere #include <Ethernet2.h> library verwenden welche ich auf github gefunden habe.

Die Ethernet2 ist nicht neuer, sondern für einen anderen Chip (WIZ550) während die Ethernet für WIZ5100 ist.

Gruß Tommy