Arduino Ethernetshield läuft nicht

Hallo,
ich versuch gerade ein Ethernetshiel zum laufen zu bekommen,
aber im Browser wird angezeigt, dass der Server nicht erreichbar ist.
Ich verwende folgenden Code:

#include <SPI.h> 
#include <Ethernet.h>
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0xB4, 0x8C };  
byte ip[]  = { 192, 168, 178, 222 };                 
byte gateway[] = { 192, 168, 178, 1 };                
byte subnet[]  = { 255, 255, 255, 0 };

EthernetServer server(80);

void setup(){
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
} 

void loop() {
EthernetClient client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.print("Test123");

        } 
      }
    }
  
      delay(1);
    client.stop();
  }

Addi

Hi,
welche Shield hast du genau ?
Ist er Pingbar ?

Das hier.

Addi

Probier mal der Beispielsketch von Arduino

/*
  Web Server
 
 A simple web server that shows the value of the analog input pins.
 using an Arduino Wiznet Ethernet shield. 
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)
 
 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 
 */

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

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,178, 222);

// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connnection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
                    // add a meta refresh tag, so the browser pulls again every 5 seconds:
          client.println("<meta http-equiv=\"refresh\" content=\"5\">");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("
");       
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }
}

Hab ich schon versucht. → Auch kein Ergebniss.

Addi

Was steht auf den großen schwarzen Chip drauf ?

WizNet
Ethernet W5100
P9kl5-010
1133

Addi

byte ip = { 192, 168, 178, 222 };
byte gateway = { 192, 168, 178, 1 };
byte subnet = { 255, 255, 255, 0 };

Passt Dein Netzwerk denn überhaupt zu dieser Konfiguration?

Wenn Du es nicht weißt, poste mal Deine Netzkonfiguration, z.B. wenn Du unter Windows ein Kommandofenster öffnest (cmd.exe) und mal eingibst: ipconfig

Welches sind dann die angezeigten Werte für Deine IPv4-Adresse, Subnetzmaske und Standardgateway, die Windows (oder Dein Betriebssystem) Dir für Deinen PC anzeigen?

Das kommt bei ipconfig heraus:

Windows-IP-Konfiguration
Mobiler Breitbandadapter Mobile Breitbandverbindung 2:
   Verbindungsspezifisches DNS-Suffix:
   IPv4-Adresse  . . . . . . . . . . : 10.49.165.131
   Subnetzmaske  . . . . . . . . . . : 255.255.255.248
   Standardgateway . . . . . . . . . : 10.49.165.129

Ethernet-Adapter LAN-Verbindung:

   Medienstatus. . . . . . . . . . . : Medium getrennt
   Verbindungsspezifisches DNS-Suffix:

Tunneladapter isatap.{60595009-EACF-4173-BBFF-3CE98658601B}:

   Medienstatus. . . . . . . . . . . : Medium getrennt
   Verbindungsspezifisches DNS-Suffix:

Tunneladapter isatap.{393DC622-6379-4DCE-8A8C-4CCDE1E329A6}:

   Medienstatus. . . . . . . . . . . : Medium getrennt
   Verbindungsspezifisches DNS-Suffix:

Tunneladapter Teredo Tunneling Pseudo-Interface:

   Verbindungsspezifisches DNS-Suffix:
   IPv6-Adresse. . . . . . . . . . . : 2001:0:5ef5:79fb:2c36:3d:f5ce:5a7c
   Verbindungslokale IPv6-Adresse  . : fe80::2c36:3d:f5ce:5a7c%13
   Standardgateway . . . . . . . . . : ::

Addi

Addi:
IPv4-Adresse . . . . . . . . . . : 10.49.165.131
Subnetzmaske . . . . . . . . . . : 255.255.255.248
Standardgateway . . . . . . . . . : 10.49.165.129

Ach Du meine Güte, was'n das für ein Netz?
Wer hat denn das eingerichtet?

Subnetzmaske . . . . . . . . . . : 255.255.255.248
Standardgateway . . . . . . . . . : 10.49.165.129

Subnetzmaske und Stardardgateway kannst Du direkt 1:1 für Deinen Arduino übernehmen.

Aber bei Deinem Strang mit Subnetzmaske x.y.z.248 bin ich echt überfragt, was Du Dir da als IP-Adresse aussuchen kannst.

Im Zweifelsfall: Geh mit einem Gerät (z.B. ein anderer PC oder ein Smartphone) in das Netz und lasse Dir dessen IP-Adresse anzeigen, dann schalte das andere Gerät aus so dass dessen IP-Adresse nicht mehr in Verwendung ist und trage die gerade abgeschaltete IP-Adresse als Adresse für Deinen Arduino ein.

Die sauberste Lösung ist: Du läßt Dir für Deinen Arduino eine IP-Adresse vom zuständigen Netzwerk-Administrator geben.

Das dürfte nämlich ein etwas größeres Netz sein, in dem Du da hängst.

jurs:
Die sauberste Lösung ist: Du läßt Dir für Deinen Arduino eine IP-Adresse vom zuständigen Netzwerk-Administrator geben.

Gibt es nicht!
Das ist mein Internet über einen Internetstick.

Addi

Addi:
Gibt es nicht!
Das ist mein Internet über einen Internetstick.

Hehe, dann bist Du ja für Dein Netzwerk sogar DEIN EIGENER ADMIN!

Und dieser Admin Deines Netzwerks teilt Dir keine IP-Adresse für Deinen Arduino zu?

OK, ich rechne mal für Dich herum, mit diesem IP-Adressen Rechner und Deinen Netzdaten:
http://jodies.de/ipcalc

Damit bekomme ich für die von Dir nutzbaren IP-Adressen heraus:

HostMin: 10.49.165.129
HostMax: 10.49.165.134

Auf .129 läuft Dein Internet-Stick und stellt die Verbindung zum Internet her, auf .131 läuft offenbar Dein eigener PC, jetzt heißt es von Deiner Seite aus scharf überlegen: Welche Internetgeräte sind über diesen Internet-Stick sonst noch online? Ein Access-Poínt? Ein Router? Ein Smartphone? Ein Mediaplayer? Eine große Spielekonsole? Ein Notebook? Eine kleine Spielekonsole wie Nintendo DS? Und jetzt ziehst Du von diesem Adressbereich .129 bis .134 alle von anderen Geräten belegten IP-Adressen ab (mußt Du über das jeweilige Gerät abfragen, oder das Gerät ausschalten, damit es keine IP-Adresse mehr belegt), was dann vom IP-Adressenbereich übrigt bleibt, dass kannst Du als IP-Adresse für Deinen Arduino verwenden.

Mal angenommen Du kommst drauf, dass 10.49.165.132 noch frei ist. Dann sind Deine für das Ethernet des Arduino nutzbaren Daten:

IP-Adresse: 10.49.165.132
Subnetzmaske: 255.255.255.248
Standardgateway: 10.49.165.129

Übrigens: Die Arduino-Ethernetshields mit W5100 Chip können sich auch per DHCP eine IP-Adresse dynamisch zur Laufzeit zuteilen lassen, wenn Du eine passende Library mit dem dazugehörigen Code laufen läßt. Voraussetzung ist, dass in Deinem Netz ein DHCP-Server läuft, vielleicht kannst Du mal prüfen, ob Dein Stick-Netzwerk auch DHCP anbietet (so wie es normale Heim-Router machen).

In dem Fall, dass in Deinem Netz DHCP nutzbar ist, brauchst Du nämlich nur eine MAC-Adresse vorgeben, und IP-Adresse, Subnetzmaske und Standardgateway holt sich der Arduino dann jedesmal beim Starten selbst, wenn Du den entsprechenden Setup-Code verwendest. Dauert dann aber immer einige Sekunden extra, bis der Sketch sein Netz entsprechend selbst konfiguriert hat.

Immer noch nichts.
Ich verwende aktuell diesen Code:

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

byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0xB4, 0x8C };  
byte ip[]  = { 10,49,165,133 };                 
byte gateway[] = { 10,49,165,129 };                
byte subnet[]  = { 255,255,255,248 };

EthernetServer server(80);

void setup()
{
  Ethernet.begin(mac, ip,gateway,subnet);
  server.begin();
}

void loop()
{
  
  EthernetClient client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (c == '\n' && currentLineIsBlank) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();  
          
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(analogRead(analogChannel));
            client.println("
");
          }
          break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
}

Addi:
Immer noch nichts.

Wo hast Du denn das Netzwerkkabel vom Arduino-Ethernetshield angeschlossen?

Arduino ==> ?

Hast Du da einen Router im Netzwerk stehen, oder wie machst Du das mit Deinem Stick-Netz, um weitere Geräte per Netzwerkkabel ins Internet zu bringen?

Arduino ==> Computer
Der Stick kommt an eine USB-Buchse.
Einen Router gibt es nicht.

Addi

Direktverbindung: Benutzt Du auch ein Crosslink Kabel oder ein normales? Ansonsten würde ich empfehlen besorg Dir 'n billigen Ethernet Switch und stöpsel den dazwischen.

Ich weiß nicht genau welches KAbel ich habe.
Dies lag mal bei einem Vodafon-Router bei, der Router ist allerdings außer Betrieb.

Addi

Addi:
Arduino ==> Computer
Der Stick kommt an eine USB-Buchse.
Einen Router gibt es nicht.

Das ist schlecht. Die Ethernetbuchse am PC ist normalerweise eine Eingangsbuchse, wo das Internet in den PC reinkommt. Es ist standardmäßig keine Ausgangsbuchse, wo das Internet herauskommt und wo Du andere Internetgeräte anschließen kannst.

Aber Du kannst es mit Administrator-Rechten (und Administrator-Fähigkeiten!) natürlich umkonfigurieren, so dass aus der Ethernetbuchse am PC auch Internet für andere Gerät herauskommt.

Siehe bei Microsoft:

jurs:
Das ist schlecht. Die Ethernetbuchse am PC ist normalerweise eine Eingangsbuchse, wo das Internet in den PC reinkommt. Es ist standardmäßig keine Ausgangsbuchse, wo das Internet herauskommt und wo Du andere Internetgeräte anschließen kannst.

Aber Du kannst es mit Administrator-Rechten (und Administrator-Fähigkeiten!) natürlich umkonfigurieren, so dass aus der Ethernetbuchse am PC auch Internet für andere Gerät herauskommt.

Siehe bei Microsoft:
Windows help & learning

Ähm, wiebitte?? Wo kommt das Internet raus? Ich glaub jetzt redet Ihr aneinaner vorbei. Es geht ja lediglich um eine Verbindung zwischen Arduino und zwischen dem PC. Noch soll der Arduino ja nicht ins Internet.

Das Problem ist, das der USB-Stick für den Internetzugang ein eigenes Netzwerkinterface erzeugt, über das zunächst mal der gesamte Datenverkehr läuft.
Die "normale" Ethernetschnittstelle ist noch gar nicht konfiguriert. Das sieht man auch an der Ausgabe von ipconfig :

Ethernet-Adapter LAN-Verbindung:

Medienstatus. . . . . . . . . . . : Medium getrennt
Verbindungsspezifisches DNS-Suffix:

Der Hinweis "Mediumn getrennt" läßt vermuten, das es kein Cross-Kabel ist, das da verwendet wird. Neuere Netzwerkschnittstellen können das automatisch umstellen (1GBit Schnittstellen z.B. und auch einige 100MBit Schnittstellen). Das scheint hier aber leider nicht der Fall zu sein.
@Addi: entweder besorgst Du Dir ein anderes Kabel, oder verwendest zum Testen erstmal Deinen Router. Falls der mehrere Netzwerkanschlüsse hat, arbeitet er vermutlich auch als Switch und Du kannst dann mit 2 "normalen" Kabeln Arduino und PC an den Router anschliessen.
Dann benötigt Dein PC aber noch eine Netzwerkkonfiguration für die Schnittstelle, an der dann das Kabel steckt. Ggf. kann der Router das schon, denn meisten läuft da ein Dienst namens "DHCP". Der sorgt dafür, das Dein PC und auch Dein Arduino (wenn entsprechend programmiert) automatisch eine Konfiguration für das Netzwerk bekommt. Der Nachteil dieser Methode ist, das die Adresse die beide Geräte bekommen nicht immer die gleiche ist. Was es schwierig macht, ein Geräte direkt anzusprechen.
Ich glaube das Forum hier ist nicht wirklich der richtige Ort um jemanden die Details der Windows Netzwerkkonfiguration zu erklären. Zumal man sich seinen Rechner damit auch so verkonfigurieren kann, das kein sinnvoller Internetzugang mehr möglich ist.
Falls Du jemanden hast, der sich damit auskennt, frag den mal ob er Dir helfen kann. Ansonsten such im Netz mal nach Tutorials zur Windows Netzwerk-Konfiguration.

Mario.

mkl0815:
@Addi: entweder besorgst Du Dir ein anderes Kabel, oder verwendest zum Testen erstmal Deinen Router.

Einen Router habe ich nicht. Kannst du mir ein Kabel empefehlen, z.B. bei Amazon.
Worin unterscheidet sich ein Cross-Kabel von einem normalen?

Addi