Arduino Ethernet Shield

Die bisher erschienen Arduino Boards (ausgenommen den Arduino Ethernet, Arduino Yun und den demnächst verfügbaren Arduino Tre) sind von Haus aus nicht netzwerkfähig. Um mit den Boards trotzdem eine Netzwerkverbindung herstellen zu können, gibt es von Arduino selbst sowohl ein Wifi- als auch ein Ethernet Shield. Auf den Arduino Uno und einige andere Modelle kann das Shield direkt aufgesteckt werden.

Mit dem Arduino Ethernet Shield R3 kann man den Arduino mit wenig Aufwand in das lokale Netzwerk hängen. Der Aufbau einer Netzwerkverbindung ist dank der gut dokumentierten Ethernet Library sowohl als Client als auch als Server einfach möglich. Das Shield kommuniziert per SPI mit dem Arduino und belegt beim Uno die Digitalpins 10, 11, 12 und 13. Das Ethernet Shield ist zusätzlich mit einem SD Card Slot ausgestattet, der über die SD Library angesprochen werden kann.

Eine kurze Beschreibung des Arduino Ethernet Shields samt besprochenem Programmbeispiel findet ihr in diesem Video:

Hier ist der im Video gezeigte Arduino Sketch.

/*
 Web Server
 
 Eine einfacher Webserver, der den Messwert auf Analogpin 0 als HTML zurückgibt.

 Notwendig sind:
 - Arduino Uno R3
 - Arduino Ethernet Shield
 - Analoger Sensor (z.B. lichtempfindlicher Widerstand an A0)
 
Based on script by David A. Mellis and Tom Igoe
 */

// Beide Libraries sind erforderlich
#include <SPI.h>
#include <Ethernet.h>

// Hier die MAC Adresse des Shields eingeben
// (Aufkleber auf Rückseite)
byte mac[] = { 
 0x90, 0xA2, 0xDA, 0x00, 0xFB, 0x80 };

// Eine IP im lokalen Netzwerk angeben. Dazu am besten die IP
// des PCs herausfinden (googlen!) und die letzte Zahl abändern 
IPAddress ip(192,168,1,177);

// Ethernet Library als Server initialisieren
// Verwendet die obige IP, Port ist per default 80
EthernetServer server(80);

void setup() {
 // Serielle Kommunikation starten, damit wir auf dem Seriellen Monitor
 // die Debug-Ausgaben mitlesen können.
 Serial.begin(9600);

 // Ethernet Verbindung und Server starten
 Ethernet.begin(mac, ip);
 server.begin();
 Serial.print("Server gestartet. IP: ");
 // IP des Arduino-Servers ausgeben
 Serial.println(Ethernet.localIP());
}


void loop() {
 // server.available() schaut, ob ein Client verfügbar ist und Daten
 // an den Server schicken möchte. Gibt dann eine Client-Objekt zurück,
 // sonst false
 EthernetClient client = server.available();
 // Wenn es einen Client gibt, dann...
 if (client) {
 Serial.println("Neuer Client");
 // Jetzt solange Zeichen lesen, bis eine leere Zeile empfangen wurde
 // HTTP Requests enden immer mit einer leeren Zeile 
 boolean currentLineIsBlank = true;
 // Solange Client verbunden 
 while (client.connected()) {
 // client.available() gibt die Anzahl der Zeichen zurück, die zum Lesen
 // verfügbar sind
 if (client.available()) {
 // Ein Zeichen lesen und am seriellen Monitor ausgeben
 char c = client.read();
 Serial.write(c);
 // In currentLineIsBlank merken wir uns, ob diese Zeile bisher leer war.
 // Wenn die Zeile leer ist und ein Zeilenwechsel (das \n) kommt,
 // dann ist die Anfrage zu Ende und wir können antworten
 if (c == '\n' && currentLineIsBlank) {
 // HTTP Header 200 an den Browser schicken
 client.println("HTTP/1.1 200 OK");
 client.println("Content-Type: text/html");
 client.println("Connection: close"); // Verbindung wird nach Antwort beendet
 client.println("Refresh: 2"); // Seite alle 25 Sekunden neu abfragen
 client.println();
 // Ab hier berginnt der HTML-Code, der an den Browser geschickt wird
 client.println("<!DOCTYPE HTML>");
 client.println("<html>");
 client.print("Analogpin 0: <b>");
 client.print(analogRead(A0));
 client.println("</b><br />"); 
 client.println("</html>");
 break;
 }
 if (c == '\n') {
 // Zeilenwechsel, also currentLineIsBlack erstmal auf True setzen
 currentLineIsBlank = true;
 } 
 else if (c != '\r') {
 // Zeile enthält Zeichen, also currentLineIsBlack auf False setzen
 currentLineIsBlank = false;
 }
 }
 }
 // Kleine Pause
 delay(1);
 // Verbindung schliessen
 client.stop();
 Serial.println("Verbindung mit Client beendet.");
 Serial.println("");
 }
}

Code-Sprache: Arduino (arduino)

Wie man über den Arduino gesammelte Sensordaten an eine Website übertragen kann, zeige ich anhand der „Internet of Things“-Website thingspeak.com in diesem Video:

Fragen, Kommentare, Hinweise und Fehler und sonstige Kritik bitte in die Kommentare.

Vielen Dank!

13 thoughts on “Das Arduino Ethernet Shield – erste Installation und Demo-Sketch

  • 30. April 2015 at 16:41
    Permalink

    Hallo,

    erstmal Danke für die Videos.
    Ich habe mir das Ethernet shield gekauft und ausgepackt, jedoch ist bei mir kein Kleber mit der MAC Adresse drauf.
    Wie du gesagt hast, soll man diese ja dann beliebig zuweisen. Wie genau mache ich diese Zuweisung?
    Bzw. in meinem Router muss ich diese MAC Adresse dann ebenfalls angeben, richtig?

    Ich würde mich über eine Rückmeldung sehr freuen :)

    Viele Grüße!

    Reply
    • 30. April 2015 at 17:12
      Permalink

      Hallo Michael,

      du kannst z.B. einfach

      byte mac[] = {
      0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

      nehmen. Spielt im lokalen Netzwerk eigentlich keine Rolle.

      lg, Adi

      Reply
  • 12. August 2015 at 18:37
    Permalink

    Klasse Arbeit die Du da leistest, Danke!

    Reply
  • 16. März 2016 at 17:52
    Permalink

    Hallo,

    bei mir gibt der Befehl if(client) ein false zurück und es kann somit keine Verbindung aufgebaut werden. Woran kann das liegen?

    Viele Grüße

    Reply
  • 8. April 2016 at 17:42
    Permalink

    Wo kann man die libraries runterladen?

    Reply
  • 20. April 2016 at 23:11
    Permalink

    WIrd es ggf. noch mal ein Beispiel ggf. gegeben, wo ich den Arduino mit Ethernetshield nicht als „Webserver“ benutze, sondern als Empfangsgerät von Daten? Ich habe ein Projekt in Planung, wo ich auf einem Textdisplay Werte ausgeben möchte, die extern übers Netzwerk gesendet werden.

    Drauf hingewiesen wurde ja im Video aber leider kein Tipp dazu, wo man da ggf. was zu findet.

    Reply
  • 29. August 2016 at 15:38
    Permalink

    Hi,
    ohne deine Hilfe hätte ich überhaupt nicht s hinbekommen, weil vuieles anfangs nicht funtioniert hat. Ich würde aber genre die Temperatur vom DHT 11 in eine Website per Frame integrieren, aber dazu muss der Arduino weltweit erreichbar sein. Hast Du eine Idee wie das gehen könnte. Wenn’s geht kostenlos.

    LG
    Heiko

    P.S. Die Website habe ich schon erstellt, es muss nur noch der Link des Arduino eingefügt werden, und im lokalen Netzwerk funtioniert es bereits.

    Reply
  • 24. August 2017 at 8:49
    Permalink

    Guten Tag,
    ich habe das Shield HanRun HR911105A.
    Dein Scetch wird ohne Fehler compiliert. Allerdings zeigt der Browser bei 192.168.69.70 eine Fehlermeldung.
    Offensichtlich sind ALLE Porte geschlossen. Wie kann ich das ändern?
    Für einen Tip wäre ich dankbar.

    pi@o-4:~$ ping 192.168.69.70
    PING 192.168.69.70 (192.168.69.70) 56(84) bytes of data.
    64 bytes from 192.168.69.70: icmp_seq=4 ttl=128 time=0.534 ms
    64 bytes from 192.168.69.70: icmp_seq=6 ttl=128 time=0.522 ms
    64 bytes from 192.168.69.70: icmp_seq=11 ttl=128 time=0.540 ms

    — 192.168.69.70 ping statistics —
    15 packets transmitted, 3 received, 80% packet loss, time 14012ms
    rtt min/avg/max/mdev = 0.522/0.532/0.540/0.007 ms
    ——————————————————————–
    pi@o-4:~$ nmap 192.168.69.70
    Starting Nmap 7.01 ( https://nmap.org ) at 2017-08-24 08:00 CEST
    Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
    Nmap done: 1 IP address (0 hosts up) scanned in 3.14 seconds
    ——————————————————————–
    pi@o-4:~$ nmap -Pn 192.168.69.70
    Starting Nmap 7.01 ( https://nmap.org ) at 2017-08-24 08:01 CEST
    Nmap scan report for 192.168.69.70
    Host is up (0.42s latency).
    All 1000 scanned ports on 192.168.69.70 are filtered
    Nmap done: 1 IP address (1 host up) scanned in 62.72 seconds
    ——————————————————————–

    MfG Eddi

    Reply
    • 4. Februar 2018 at 13:47
      Permalink

      Hallo Eddi,

      habe auch das Shield HanRun HR911105A.
      Bei mir funktioniert das Prg problemlos, der Browser zeigt den richtigen Wert an.

      MfG
      Rainer

      Reply
  • 7. Januar 2018 at 0:40
    Permalink

    Hallo Andi
    Danke für deine Arbeit du hast mir sehr weitergeholfen um mein Glashaus zu steuern sowie zu überwachen
    Reinhard

    Reply
  • 30. April 2020 at 23:06
    Permalink

    Hallo,

    habe einen Arduino Mega mit einem Ethernet Sheild vom Arduino. Ich habe das Programm 1:1
    auf meinem Arduino Mega aufgespielt, aber erhalte nur:

    z.B. 22:59:52.509 -> Server gestartet. IP 0.0.0.0

    Ich bin direkt mit der Fritz.Box in Verbindung. Was mache ich falsch?

    Reply
  • 18. Juni 2021 at 19:21
    Permalink

    Hallo,
    ersteinmal Dank für das tolle Video!
    Nun habe ich ein Problem.
    Ich habe das Arduino Ethernet Rev3 OHNE PoE.
    Diese Platine kann man nicht auf den Arduino Uno aufstecken.
    Wie kann ich nun eine Netzverbindung mit diesem Arduino Ethernet Rev3 herstellen?

    Über eine Lösung würde ich mich freuen!
    Gruß
    Heinz

    Reply

Schreibe einen Kommentar zu Eddi Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Time limit is exhausted. Please reload the CAPTCHA.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.