[Erledigt] Kann keine Verbindung mehr zu meinem Uno mit Ethernet Shield aufbauen

Hallo zusammen,

Erstmal zusammengefasst,
ich habe einen Arduino UNO und ein Aukru W5100 Ethernet Shield von Amazon
(https://www.amazon.de/Aukru-Ethernet-Micro-SD-Kartensteck-Arduino/dp/B00PL70PA2/ref=sr_1_1?ie=UTF8&qid=1444674030&sr=8-1&keywords=arduino+ethernet+shield).

Vor ca 5 Monaten hab ich schonmal ein paar kleine Beispiel Sketche ausprobiert und herumexperimentiert z.B. LED an/aus übers heimnetz hat geklappt.
Jetzt wollte ich mir das shield wieder zu nutze machen um übers Heimnetz von PC oder Handy die Pins steuern zu können.
Zum reinkommen erstmal den Beispiel Sketch draufgeladen kabel ran und zack, kein Ergebnis.

IP Adresse passt,
Mac-Adresse ist die alte die schonmal geklappt hat,
LAN Kabel und Desktop-Switch ohne IP-Fragmetierung funktionieren,

hab jetzt seit 2 Wochen im Internet nach ähnlichen Problemen gesucht :

  • Das Shield hängt jetzt direkt am Router mit einem 6m LAN Kabel (hatte ich vor 5 monaten auch so)
  • Kontakte von Shield zu Arduino sind alle OK
  • hab jetzt einen Sketch so einfach wie möglich den geh ich beim Ausführen per SerialMonitor nach und nach mit
    --> Setup funktioniert... aber 'client' ist immer 'False' er kommt einfach nicht zum if (client) {...}
  • !!!Ping funktioniert wenn ich Shield und PC direkt mit einem LAN Kabel verbinde Edit:--> Funktioniert nicht
  • Firewall deaktivieren hat nicht geholfen kann mich aber auch nicht daran Erinnern dass ich das letztes mal gemacht hätte

Könnte es an der Bibliothek liegen? oder ist das Shield einfach kaputt? es wurde aber gut aufbewahrt

Wäre Froh wenn jemand mal das gleiche Problem hatte oder mir irgendwie weiter Helfen könnte,
bei Fragen einfach schreiben

MfG Vielen Dank im vorraus Sören

Mein Sketch:

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

byte mac[] = { 0xDE, 0xEB, 0x2D, 0xE6, 0x81, 0xED };
byte ip[] = {192,168,178,xxx};
EthernetServer server(80);

void setup() {

Serial.begin(9600);
while (!Serial) {
;
}
Ethernet.begin(mac, ip);
server.begin();
Serial.print("Server sollte online sein auf ");
Serial.println(Ethernet.localIP());

}

void loop() {

EthernetClient client = server.available();

if(client){

Serial.println("Say Hallo");
server.println("HTTP/1.1 200 OK");
server.println("Content-Type: text/html");
server.println("Connection: close");

}

}

eigener_nach_buch.ino (611 Bytes)

soeren99:
Hallo zusammen,

Erstmal zusammengefasst,

Zusammengefaßt: Der Sketch kann so wie von Dir gepostet überhaupt nicht funktionieren.

Falscher Code:

byte ip[] = {192,168,178,xxx};
-...
  Ethernet.begin(mac, ip);

Wenn Dein Arduino-Webserver an einer festen IP-Adresse laufen soll, dann würde ich eher eine in Deinem Heimnetzwerk gültige IP-Adresse verwenden und nicht diesen xxx-Scheiß als letzte Dreiergruppe, so wie Du es im Quellcode stehen hast. Ist die Adresse Deines Routers 192.168.178.1?

nicht diesen xxx-Scheiß als letzte Dreiergruppe

natürlich hab ich bei mir eine Zahl von 1 bis 255 drin stehen die noch nicht verwendet wird
und ja der Router hat 192.168.178.1

Ich würde mal die MAC Adresse in Sketch und auch die IP Adresse ändern.
Dann das Schield direkt mit dem PC verbinden, um alle anderen Quellen auszuschalten.

Dann ein ping auf die neue IP von Shield.

dann mit "arp -a" in der Konsole ( Windows-R -> Ausführen -> "cmd") alle Einträge anzeigen lassen.
In der Liste nach der IP suchen und schauen das die MAC Adresse passt.

Damit ist dann soweit klar, das Du Dein Shield noch konfigurieren kannst.

Was passiert denn wenn Du vom PC bei direkter Verbindung auf Port 80 der Arduino-IP zugreifst?

Mario.

soeren99:
natürlich hab ich bei mir eine Zahl von 1 bis 255 drin stehen die noch nicht verwendet wird

Natürlich(?) ist der von Dir verwendete Sketch überhaupt nicht 100% identisch mit dem, den Du hier gepostet hast?

Das ist natürlich(!) voll Scheiße!

Na wenn das so ist:

OK, dann gehe ich davon aus, dass Du natürlich nicht nur den Quatsch mit dem xxx" in dem geposteten Code stillschweigend korrigiert hast, sondern dass Du sämtlichen Quatsch in dem Code gefixt hast.

Ich mache mir doch nicht mehr als einmal die Mühe, Dich auf Quatsch in Deinem Sketch hinzuweisen, nur dass Du mir daraufhin mitteilst, dass Du inzwischen längst was anderes an der Stelle im Code stehen hast als "xxx", was nicht funktioniert.

Tipp: Der Webserver-Code unter "Datei - Beispiele - Ethernet - Webserver" enthält eine funktionierende loop-Funktion für einen Webserver-Sketch Wenn Du scchon nicht besser programmieren kannst als der Programmierer, der den Ethernet-Webserver Beispielsketch programmiert hat, dann solltest Du wenigstens keine zusätzlichen Fehler in die loop-Funktion einbauen, die im in der IDE existierenden Beispielsketch überhaupt nicht vorhanden sind.

    server.println("HTTP/1.1 200 OK");
    server.println("Content-Type: text/html");
    server.println("Connection: close");

Das ist nicht richtig, das sollte "client.println" stehen. Der Server bist Du selbst, wenn Du also keine Selbstgespräche führen willst :-), dann solltest Du mit dem Client reden.
Allerdings erklärt das noch nicht, warum bei einer Verbindung offensichtlich nicht in den Block verzweigt wird.

Hier müssen mehr Infos her. Was genau passiert, wenn Du den Port 80 ansprichst? Wird eine Verbindung hergestellt, oder schlägt schon das fehl?

Mario.

ganz kurz jurs dass tut mir leid dass ich die letzten 3 stellen unkenntlich gemacht habe, wenn du die angehängte Datei herunterlädst bekommst du genau den Sketch den ich auch genutzt habe.

sämtlichen Quatsch in dem Code

leider sind mir keine Fehler in dem Code aufgefallen daher hab ich ihn hier rein gepostet damit mich möglicherweise jemand darauf hinweisen kann

Mit dem Beispiel habe ich begonnen da das nicht Funktioniert hat hab ich es so gekürzt dass mögliche Fehlerquellen ausgeschlossen werden können und bin so zu dem angehängten Sketch gekommen.

Vielen Dank für die Konstruktive Antwort mario ich werds gleich ausprobieren.
Wie kann ich denn speziell den Port 80 ansprechen Mario? ich nutze immer die IP-Adresse im Browser bzw. zum pingen

MfG Sören

Korrektur zur ursprünglichen Frage,
Mario ich kann auch wenn PC und Shield direkt Verbunden sind das Shield nicht anpingen
--> das heißt doch es muss am Shield liegen?

MfG Sören

wenn PC und Shield direkt Verbunden sind das Shield nicht anpingen
--> das heißt doch es muss am Shield liegen?

Wenn Du die PC-Netzwerkkarte (LAN-Anschluss des PCs) direkt mit dem Ethernet-Shield zusammenstöpselst, dann ist das FALSCHE VERKABELUNG, und dann funktioniert am falsch verkabelten Ethernet-Shield natürlich nichts (selbst dann nicht, wenn auf dem UNO ein richtiger Sketch laufen würde.

Richtige Verkabelung wäre (mittels Cat5-Kabeln): LAN-Anschluss des Routers direkt mit dem Ethernet-Shield verbinden.

Oder (alternativ: LAN-Anschluss des Routers direkt mit einem Mehrfach-Switch verbinden und dann vom Switch zum Ethernet-Shield verkabeln.

Ja genau so hab ich das davor auch gemacht

Das Shield hängt jetzt direkt am Router mit einem 6m LAN Kabel

gut zu wissen dass das direkte zu Testzwecken nicht funktioniert, Danke

jurs:
Wenn Du die PC-Netzwerkkarte (LAN-Anschluss des PCs) direkt mit dem Ethernet-Shield zusammenstöpselst, dann ist das FALSCHE VERKABELUNG, und dann funktioniert am falsch verkabelten Ethernet-Shield natürlich nichts (selbst dann nicht, wenn auf dem UNO ein richtiger Sketch laufen würde.

Diese Aussage ist, wenn sie so pauschal getroffen wird, auch falsch.

  1. Hat der PC eine Gigabit Ethernetkarte, dann sollte es mit einem "normalen" 1:1 verdrahteten Netzwerkkabel funktionieren, da ab Gigabit Ethernet eigentlich alle Netzwerkkarten Auto-MDI-X beherrschen. Das klappt im übrigen auch, wenn nur eine angeschlossene Seite das behrrscht.

  2. Es wird ein Crosskabel verwendet, dann passt die Verkabelung auch bei einer älteren Netzwerkkarte.

Das sieht man übrigens am Switch und am Shield und am PC, wenn die "Link"-LED leuchtet.

@soeren99: Bitte strukturiert vorgehen, nicht sinnlos rumprobieren.

  1. Netzwerkkabel testen mit einem anderen Gerät. Wenn OK, dann weiter, wenn nicht solange Kabel testen bis Du eines hast das sicher funktioniert.
  2. Netzwerkkabel an PC und an das Shield -> Ping -> OK, dann zu 5, ansonsten weiter mit dem nächsten Test
  3. Netzwerkkabel an Switch und Shield, PC ebenfalls an Switch -> Ping -> OK?
  4. wenn in keiner Konstellation ein Ping geht, dann siehe Anmerkung "Reset"
  5. wenn Ping läuft, dann Zugriff auf Port 80 mit dem "client.println" Sketch -> OK?

Anmerkung: Es gibt einen Bug mit diversen Ethernet-Shields die auf dem WizNet 5100 Chip basieren. Der braucht einen vernünftigen Reset damit der funktioniert. Das klappt beim Programmieren eines Sketches und dem anschließenden Reset sehr gut. Klemmt man Arduino und Shield vom Strom ab und schließt es später wieder an, dann kann es sein, das der WizNet Chip nicht richtig initialisiert wird, weil der Reset-Pulse zu kurz ist. Dann einfach nochmal am Arduino einen Reset auslösen (kein Powercycle). Das in allen o.g. Fällen beim Ping-Test einmal machen, um auszuschließen dass Du beim Test in den Rest-Bug läufst.

Mario.

Vielen dank
habe jetzt alles probiert:

  1. Netzwerkkabel --> funkt
  2. Zielhost nicht erreichbar
  3. ebenfalls nicht erreichbar, aber wenn es direkt nicht funktioniert ( ich hab eine Gigabit Ethernetkarte ) sollte es über den switch doch auch nicht funktionieren?!
  4. ich bin davon ausgegangen dass du den physischen Reset Knopf am Board meinst --> PC an, Sketch drauf... warten, Reset... warten --> hat nicht geholfen (kein Ping)

hast du sonst noch eine Idee?

hast du sonst noch eine Idee?

Das Programm mittlerweile repariert?

ich arbeite damit:

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

//byte mac[] = { 0x34, 0x31, 0xc4, 0x21, 0xd1, 0x66 }; geänderte
byte mac[] = { 0xDE, 0xEB, 0x2D, 0xE6, 0x81, 0xED };
//byte ip[] = {192,168,178,222};
IPAddress ip(192, 168, 178, 222);
EthernetServer server(80);

void setup() {

Serial.begin(9600);
while (!Serial) {
;
}
Ethernet.begin(mac, ip);
server.begin();
Serial.print("Server sollte online sein auf ");
Serial.println(Ethernet.localIP());

}

void loop() {

EthernetClient client = server.available();

if(client){

Serial.println("Say Hallo");
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");

}

}

sind da Fehler? ich wüsste von keinem?

soeren99:
sind da Fehler? ich wüsste von keinem?

Dein PC arbeitet an diesem Netzwerk doch offenbar einwandfrei und Du kommst mit dem PC sogar ins Internet, ja?

Wie ist denn der PC an Deinem Heim-Netzwerk angeschlossen?

  1. Per LAN-Kabel?
    1a)Kabel von der LAN-Buchse des Routers zur LAN-Buchse des PCs?
    oder 1b) Kabel von der LAN-Buchse des Routers zu einem "Switch", dann LAN-Kabel vom Switch zur LAN-Buchse des PCs?
    oder 2) Der Router hat zusätzlich WLAN, der PC hat auch zusätzlich WLAN und der PC ist per WLAN/WiFi mit dem Router verbunden?

Du weißt schon, dass dein Sketch eine leere Webseite ausgibt, sollte er je funktionieren.

Wie wäre es mit

...
if (client)
{   client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println();
    client.println("<!DOCTYPE html>");
    client.println("<html>");
    client.print("<h1>Hallo, ist da jemand?</h1>");
    client.println("</html>");
    delay(250);
    client.stop();
}
...

dann ist es zumindest nicht ganz so leer :slight_smile:

Da ping nicht funktioniert, liegt wohl ein grundlegendes Problem vor.

Leider kenn ich die Bibliothek nicht genau genug um zu sagen ob Ping erst nach der Initialisierung des Webservers aktiv wird. Eigentlich sollte es immer aktiv sein, wenn der chip am Netzwerk hängt und eine IP hat. Die Zuweisung der IP erfolgt jedoch durch die Initialisierung des Shields bzw der Bibliothek.

Entweder nimmt das Shield keine Daten mehr an oder der Chip hat nen Schuss. Wenn du es in die Netzwerkbuchse steckst (am einfachsten bei Router oder Switch) leuchten dann kurz drauf die LEDs und zeigen eine Speed an. Damit meine ich wie bei meinem Netgear, der hat 2 LEDs die Gelb oder Grün leuchten können und anzeigen ob man 10, 100, 1000Mbit hat. Leuchten diese LEDs so hat der Chip sich erfolgreich mit dem Switchport auf eine Speed geeinigt. Das ist teil der Firmware des Ethernetchips. Der funktioniert also dann wohl.

Scheitert das schon ist der chip hinüber und das Shield kann man an die Wand nageln als Deko.

Ist das erledigt, reicht es eigentlich die Bibliothek zu initialisieren. Hier könnte die IDE eine Fehlerquelle sein. Es gibt wohl einige Bibliotheken die updates brauchen, wenn man neuere IDE installiert. Entweder Downgraden oder Bibliothek upgrade. Oder mal nach einer Alternative schauen und die benutzen.

Die Ausgabe einer Webseite kann erst erfolgreich sein, wenn auch Ping funktioniert. Der Switch wird dir nicht dazwischen funken, zumindest nicht wenn er über die LED anzeigt das ein Gerät connected ist. Diese LED ist nicht einfach nur eine Stecker gesteckt Kontrollleuchte, sondern sie leuchtet erst wenn das Gerät und der Switch sich auf die Speed geeinigt haben. Dafür müssen einige Datenpakete ausgetauscht werden und das heist der Chip arbeitet korrekt.

Zumal der Ping ja auch direkt nicht funktioniert.

Denk aber bitte dran, das dein Shield und dein PC im selben Segment sein müssen. Segment heist das die IPs aus dem selben Bereich kommen müssen. Also 192.168.178.1 für Router heist das alle Geräte eine IP mit 192.168.178.x haben müssen um drauf zuzugreifen. Und dein Shield läuft auf 222, läuft dein PC auch in diesem Bereich. Wenn nicht, kannst du machen was du willst, das wird NIE funktionieren. Dafür ist die Angabe Netzwerkmask zuständig. Die maskiert welche Bereiche zu einem Segment gehören. 255.255.255.0 heist das nur die letzte Ziffernfolge variabel ist.

PC arbeitet Einwandfrei ist auch schnell 50er Leitung.
hab den PC direkt per LAN kabel mit dem Router verbunden, meinen Wlan Adapter habe ich deaktiviert weil sonst irgendwie WLAN Priorität hat.

Danke, Sören

Danke chefin,

Mein PC hat 192.168.178.57 --> passt also
Jetzt wieder mit Switch... beim Stecker von meinem PC grünes Lämpchen.
beim Board an der Buchse Grünes und Orangenes, aber am Switch wo das Board angesteckt ist kein grünes Lämpchen!!!
Heißt dass jetzt schon Chip hinüber oder kann es noch an der bibliothek liegen?

MfG Sören