Arduino und der Speedport

Hallo :slight_smile: ,
ich habe mir vor ca. 4 Wochen in Ebay ein Ethernet Shield bestellt, da ich sonst keine gefunden habe, die sofort verfügbar waren. Es kam letzte Woche aus Hongkong an. Heute habe ich einen Code für einen einfachen Webserver aus dem Buch "Arduino Physical Computing für Bastler, Designer und Geeks" verwendet. Nun bekomme ich aber keine Verbindung zum Internet. Brauche ich eine statische Ip, oder geht das normalerweise auch mit einer Dynamischen? Ich habe einen Speedport W504 von der Telekom. Ich habe keine Idee für einen Lösungsansatz. Ich würde mich über Hilfe sehr freuen.
Hier mein bisheriger Code:

#include <Client.h>
#include <Ethernet.h>
#include <Server.h>
#include <Udp.h>

#include <SPI.h>


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {192, 168, 2, 174 };
byte gateway[] = { 192, 168, 2, 1 };
byte subnet[] = { 255, 255, 255, 0 };
Server server = Server(80);

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

void loop() {
  Client client = server.available();
  if (client) {
 server.print("HTTP/1.0 200 OK\r\nServer: arduino\r\n");
 server.print("Content-Type: text/html\r\n\r\n");
 server.print("<HTML><HEAD><TITLE>");
 server.print("Arduino Board");
 server.print("</TITLE>");
 server.print("</HEAD><BODY>");
 server.print("<b>Hello World!</b>
");
 server.print("Arduino runs for ");
 server.print(millis());
 server.print(" ms.</BODY></HTML>");
 delay(10);
 client.stop();
  }
}

Liebe Grüße
Florian

Du musst eine Portfreigabe auf den Port:80 machen (http: Protokoll). Diese portfreigabe leitest du auf deinen Arduino um (Routing). Dann musst du noch einen Dynamic DNS einrichten der die täglich wechselnde IP-Adresse des DSL über den Service umschlüsselt. Dann kannst du den aus dem Internet erreichen:

Bei mir klappt es einwandfrei
http://dhmaster.dnsalias.net/

Hallo, danke für die schnelle Antwort:)

leider traue ich mich nicht einfach am Router "herum zu probieren", weil ich auch am Wochenende für die Arbeit Internet bracuhe, und ich es nicht riskieren kann, dass dieses ausfällt.
Also als Dynamic DNS habe ich mir den Anbieter DynDNS.com gewählt, dort gibt es eine DNS kostenlos:)
Bei meinem Router kann ich nun für die Port Weiterleitung verschiedenes einstellen, ich weiß allerdings nicht was :blush:
Ich hänge mal ein Bild an. Ich würde mich sehr über eine nochmals so hilfreiche Antwort freuen:)
http://www.flickr.com/photos/florih/5740326015/

Nachtrag: Ich wundere mich nur, dass in dem Buch steht, dass man die ip des Arduinos nur in einen Webbrowser eingeben muss und dann erscheint die Website, wie kann das gehen?

Lg Florian

Welche interne IP hast du am PC? Kannst du den Arduino vom internen Netzwerk erreichen? Welche Subnetzmaske hast du am PC?

Die IP von meinem Pc ist: ist gleich bis auf die letzte Zahl. Ich kann den Arduino nicht über einen Browser eines Pcs im selben Netzwerk erreichen. DIe Subnetzmaske ist die Standartmaske: 255.255.255.0
Der Router vergibt die ips normalerweise Dynamisch, ich habe keine besonderen Einstellungen an ihm vorgenommen.

Viele Grüße

Ich würde sagen wenn du den Arduino noch nicht einmal vom internen Netz erreichen kannst brauchst du noch keine Portweiterleitung.
Kann es sein das du einen IP-Konflikt hast, sprich 2 mal die selbe IP Adresse auf 2 verschiedenen Geräten?

Huch da war ich schon ein Schritt zuweit. Ich denke du hast keine SD-Karte drin weil du sonst Probleme bekommst, wenn du nicht explizit den Ethernet Chip über den CS Port anwählst.
Ich hatte änhliche Probleme bis ich das hier:

pinMode(4,OUTPUT); // zum Abwählen der SD karte auf dem Shield
digitalWrite(4,HIGH); // zum Abwählen der SD karte auf dem Shield

in den void Setup() mit aufgenommen habe. Siehe

"Note that because the W5100 and SD card share the SPI bus, only one can be active at a time. If you are using both peripherals in your program, this should be taken care of by the corresponding libraries. If you're not using one of the peripherals in your program, however, you'll need to explicitly deselect it. To do this with the SD card, set pin 4 as an output and write a high to it. For the W5100, set digital pin 10 as a high output."

Wenn das alles gemacht ist gehe bei Windows auf "Ausführen" das Kommando CMD.
Danach bekommst du ein Dos-Fenster hier gibst du ein:
ping 192.168.2.174
Jetzt müsstest du eine Antwort mit den Zeiten für verschiedene Paketgrößen bekommen.
Wenn da aber steht "Zeitüberschreitung bei..... "
Dann ist der Ardu physikalisch noch nicht zu erreichen, dann muss du ein bisschen weitersuchen.

Ist der Ardu direkt an dem Speedport dran oder über einen Switch. <= Dann dürfte es kein Problem sein
Direkt an einem PC musst du ein bisschen was einstellen Feste IP auf dem Rechner, und auf dem Ardu und eine Cross Kabel.

Danke für eure hilfreichen Tipps. Ich habe schon mehrere Endungen der Ipadresse ausprobiert und auch extra eine weiter hinten gewählt(174)(Der Router unterstützt nur Ips im Bereich von 100 bis 199).

Volvodani du vermutest richtig, ich habe kein Sd Kartenslot, auch keinen W5100. Auf der Netzwerkbuchse steht : HanRun HR911102A 09/44
Leider hat es keine Veränderung bewirkt, deinen Code einzufügen :frowning:

Brauche ich vielleicht eine andere Library?
Kann es sein, dass ich statische IPs für die einzelnen Geräte im NEtzwerk festlegen muss?

Vielen vielen Dank für eure Hilfe!

Nachtrag: In der Konsole erscheint nur, dass der Zielhost nicht erreichbar sei. Der Arduino ist direkt an dem Router angeschlossen.

Handelt es sich um das "Original"-EthernetShield mit dem WizNet5100-Chip
oder um eines mit enc28j60-Chip, dafür bräuchtest Du eine andere Bibliothek.

Die Bezeichnung steht auf dem schwarzen Chip, auf der Netzwerkbuchse
steht nur deren Bezeichnung.

Grüße,
Alex

Hey, super daran lags! Also ich habe den enc28j60-Chip!

Nur wenn ich diese Library jetzt einfüge, ist die Funktion Ethernet nicht mehr gültig, wie muss ich denn den Code verändern?
Die Exemples sehen ja sehr undurchschaubar aus, also für mich. ICh bin, wie gesagt noch mit dem Buch am lernen und der Code den ich gepostet habe verstehe ich noch, aber die Exemples garnicht:(

Vielen Dank :slight_smile:

Für den enc28j60 gibt es verschiedene Bibliotheken im Netz,
welche verwendest Du denn?

Bei dieser hier:
http://www.nuelectronics.com/download/projects/etherShield.zip
sind einige Beispiele dabei. Ich würde als erstes versuchen, das ping-Beispiel zum
Laufen zu bringen, also dem Arduino eine freie Adresse aus Deinem Netz geben
und ihn dann vom Rechner aus anpingen, so weisst Du, ob hardewarmäßig alles funktioniert.

Der wiznet5100 macht es einem deutlich leichter, da er außer einem HardwareStack (so wie der enc28j60) die Unterstützung für TCP, UDP, ICMP und andere, auch schon an Board hat und nicht der Arduino die Pakete zusammenbasteln bzw. zerlegen muss.

Viel Erfolg :slight_smile:
Alex

Ja genau diese verwende ich, es funktioniert nun auch mit den Exemples nur verstehen tu ich sie noch nicht :blush:

Oh das wusste ich nicht, dass es so große Unterschiede gibt, dann habe ich ja noch einiges mehr zum lernen:( :smiley:

Vielen Dank für die Hilfen