Arduino Ethernet Rev3 Dyn DNS

Hi,

wie ihr oben schon gesehen habt, habe ich den Arduino Ethernet Rev3.

Ich habe folgenden Plan:

Ich möchte meinen Arduino in einem beliebigen Netzwerk installieren und dort ADC Werte auslesen. Diese sollen mir dann in einem bestimmten Intervall an eine Dyn DNS Adresse geschickt werden.
Der PC der an der Dyn DNS Adresse hängt soll zusätzlich die Werte protokollieren.

Nun meine Frage: Ist es möglich, dem Arduino mitzuteilen, das er an eine best. Dyn DNS Adresse schicken soll, oder geht wie ich schon in Foren gelesen habe, nur der umgekehrte Weg, dass man dem Arduino eine Dyn DNS vergibt und ihn abfragen muss um die Daten zu protokollieren.

Vielen Dank schon im voraus,

eure Paula <3

Salumi: Nun meine Frage: Ist es möglich, dem Arduino mitzuteilen, das er an eine best. Dyn DNS Adresse schicken soll, oder geht wie ich schon in Foren gelesen habe, nur der umgekehrte Weg, dass man dem Arduino eine Dyn DNS vergibt und ihn abfragen muss um die Daten zu protokollieren.

Wie stellte schon Angela M. fest: "Das Internet ist für uns alle Neuland!" ]:D

Natürlich kann ein Arduino mit Ethernet-Shield nicht nur als Server fungieren und auf Anfragen von einem Client (z.B. Web-Browser) antworten, sondern kann genauso gut als Client fungieren und Verbindung zu einem im Internet laufenden Server aufnehmen und diesem Daten senden.

Danke für deine schnelle Antwort. Das ist schon mal gut ^^ Nur leider wüsste ich gerne, wie ich im Sketch definiere, dass er die Daten an einen Dyn DNS Server, z.B. InternetistfürunsalleNeuland.de sendet und nicht an eine fest vorgegebene IP. Diesen Befehl habe ich bisher noch nicht herausfinden können.

Eure Paula

Könnte das helfen?

http://forum.arduino.cc/index.php/topic,110556.0.html

Danke für die Antwort, aber leider hilft das auch nicht weiter. Das hab ich auch schon bei google gelesen.
Dort wird nur eine feste DNS IP eingegeben. Da wir aber eine dynamische DNS IP benötigen, da durch die Zwangstrennung unsere IP sich täglich ändert, sind wir auf Dyn DNS angewiesen!

Salumi: Nur leider wüsste ich gerne, wie ich im Sketch definiere, dass er die Daten an einen Dyn DNS Server, z.B. InternetistfürunsalleNeuland.de sendet und nicht an eine fest vorgegebene IP.

Der Zugriff auf eine "Webadresse mit Namen" ist vollkommen unabhängig davon, ob der Name "dynamisch" oder "statisch" per DNS aufgelöst wird. Ob Du also auf den Server "www.arduino.cc" oder "InternetistfuerunsalleNeuland.de" zugreifst, macht von der Programmierung her absolut keinen Unterschied.

Falls der Zugriff auf einen Webserver an Port-80 erfolgen soll, also beispielsweise:

char server[]="InternetistfuerunsalleNeuland.de"; ... if (client.connect(server, 80)) { Serial.println("connected"); ...

Die client.connect() Methode aus der Ethernet-Library hat nämlich nicht nur die Möglichkeit, dass Du sie mit einer IP-Nummer und Portnummer aufrufen kannst, sondern Du kannst sie auch mit einem C-String und einer Portnummer aufrufen, und dann löst die Library den Namen für den Server selbst auf.

[Edit] Ich habe mal den Umlaut aus dem Domainnamen in der Beispiel-Codezeile herausgenommen, denn so funktioniert das nur für Domainnamen ohne Umlaute. Der Zugriff auf Umlaut-Domains erfordert die vorherige Umwandlung des Umlauts nach bestimmten Regeln.

Danke für die vielen Antworten. Ihr habt mir damit schon sehr weitergeholfen. Doch leider bin ich ein Arduino-Newbie und benötige noch etwas Hilfe.
Wenn ich mich nicht irre, sollte der folgende Code sich mit dem Google-Server verbinden.

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

EthernetClient client;

byte mac[] = {0x90, 0xA2, 0xDA, 0x0D, 0xDD, 0x4C};
byte ip[] = {192,168,2,123};
byte gateway[] = {192,168,2,1};
byte subnet[] = {255,255,255,0};
char server[] = "google.de";

void setup()
{
  Serial.begin(9600);
  Ethernet.begin(mac, ip, gateway, subnet);

  delay(1000);
  Serial.println("verbinde...");

  if (client.connect(server, 80))
        {
        Serial.println("verbunden");
        }
    else
        {
         Serial.println("Verbindung fehlgeschlagen");
         }
}

void loop[.....]

Aber ich bekomme als Rückgabewert “Verbindung fehlgeschlagen”. Könnt ihr vielleicht den Fehler finden und mir sagen was ich falsch gemacht habe?
Vielen lieben Dank schon im voraus.

Salumi: Aber ich bekomme als Rückgabewert "Verbindung fehlgeschlagen". Könnt ihr vielleicht den Fehler finden und mir sagen was ich falsch gemacht habe?

Ich kenne Deine Netzwerkkonfiguration nicht.

Wenn ich mal raten soll: Die von Dir gewünschte feste IP-Adresse für den Client wird von Deinem Router nicht als Netzwerkadresse akzeptiert, möglicherweise weil sie in den Bereich fällt, der für die dynamische Adressenvergabe per DHCP im Router reserviert ist.

Wenn es um einen Client geht, lasse ihn doch auf einer per DHCP vom Router vergebenen IP-Adresse laufen! Beispielcode siehe unter "Datei - Beispiele - Ethernet - Webclient".

Ich gehe mal davon aus, dass der Arduino an einen gewöhnlichen Home-DSL-Router mit DHCP angeschlossen wird, oder?

Nein, er ist nicht an einen Home-DSL-Router angeschlossen. Ich habe die Netzwerkadministration nicht vorgenommen und muss mich erst einarbeiten. Aber danke nochmal für die viele Hilfe. Falls ich noch weitere Fragen haben sollte, werde ich mich hier wieder melden.

Salumi: Nein, er ist nicht an einen Home-DSL-Router angeschlossen. Ich habe die Netzwerkadministration nicht vorgenommen und muss mich erst einarbeiten. Aber danke nochmal für die viele Hilfe. Falls ich noch weitere Fragen haben sollte, werde ich mich hier wieder melden.

OK, nochmal zu Deinem "nicht verbunden" Fehler nach der Zeile: Ethernet.begin(mac, ip, gateway, subnet);

Diese Intitialisierung gibt es gar nicht, siehe http://arduino.cc/de/Reference/EthernetBegin

Eine Initialisierung mit vier Parametern steht für: Ethernet.begin(mac, ip, dns, gateway);

Wenn Du unbedingt die Subnetzmaske vorgeben möchtest und der Router gleichzeitig sowohl Internet-Gateway als auch DNS-Server gleichzeitig ist (so ist es zumindest bei DSL-Home-Routern), kannst Du es für eine rein manuelle Netzwerkkonfiguration eher versuchen mit: Ethernet.begin(mac, ip, gateway, gateway, subnet);