Go Down

Topic: Arduino Ethernetshield läuft nicht (Read 2245 times) previous topic - next topic

Addi

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:
Code: [Select]

#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
/ \    _|  _| o
 /--\ (_| (_| |

Shojo

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

Addi

/ \    _|  _| o
 /--\ (_| (_| |

Shojo

Probier mal der Beispielsketch von Arduino

Code: [Select]

/*
 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("<br />");      
         }
         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");
 }
}

Addi

Hab ich schon versucht. -> Auch kein Ergebniss.

Addi
/ \    _|  _| o
 /--\ (_| (_| |

Shojo

Was steht auf den großen schwarzen Chip drauf ?

Addi

WizNet
Ethernet W5100
P9kl5-010
1133

Addi
/ \    _|  _| o
 /--\ (_| (_| |

jurs

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?


Addi

Das kommt bei ipconfig heraus:
Code: [Select]
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
/ \    _|  _| o
 /--\ (_| (_| |

jurs


   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.

Addi


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
/ \    _|  _| o
 /--\ (_| (_| |

jurs

#11
Dec 19, 2012, 09:02 pm Last Edit: Dec 19, 2012, 09:06 pm by jurs Reason: 1

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.

Addi

Immer noch nichts.
Ich verwende aktuell diesen Code:
Code: [Select]

#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("<br />");
          }
          break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
}
/ \    _|  _| o
 /--\ (_| (_| |

jurs


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?


Addi

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

Addi
/ \    _|  _| o
 /--\ (_| (_| |

Go Up