Arduino - Ethernet-Shield

Die Verwendung des Arduino Ethernet Shields ist eine der einfachsten Möglichkeiten, Arduino mit dem Internet zu verbinden. Weitere Optionen, Arduino über Ethernet mit dem Internet zu verbinden, finden Sie im Arduino - Ethernet-Tutorial.

In diesem Tutorial werden wir lernen:

Arduino-Ethernet-Schild

Erforderliche Hardware

1×Arduino Uno R3
1×USB 2.0 Kabel Typ A/B (für USB-A PC)
1×USB 2.0 Kabel Typ C/B (für USB-C PC)
1×Arduino Ethernet Shield
1×Ethernet Cable
1×(Empfohlen) Schraubklemmenblock-Shield für Arduino Uno
1×(Empfohlen) Breadboard-Shield für Arduino Uno
1×(Empfohlen) Gehäuse für Arduino Uno
1×(Empfohlen) Prototyping-Grundplatte & Breadboard-Kit für Arduino Uno

Oder Sie können die folgenden Kits kaufen:

1×DIYables STEM V3 Starter-Kit (Arduino enthalten)
1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Grundlegende Kenntnisse der Netzwerktechnik für Anfänger

Dieser Abschnitt bietet Grundwissen für Anfänger, die nichts über Netzwerke wissen.

Wenn ein Gerät eine Verbindung zum Internet herstellt (über Ethernet oder WiFi), muss es sich mit einem Router oder einem Access Point verbinden. Router und Access Point sind Geräte, die die Rolle des Gateways zum Internet übernehmen. Alle Daten zwischen einem Gerät und dem Internet werden durch den Router oder Access Point weitergeleitet.

Wenn sich ein Gerät mit dem Internet verbindet, muss es:

  • Eine MAC-Adresse haben
  • Eine IP-Adresse haben
  • Die Subnetzmaske des Netzwerks kennen
  • Die IP-Adresse des Gateways kennen (IP-Adresse des Routers oder des Access Points)
  • Die IP-Adresse des DNS-Servers kennen (falls eine Verbindung zu einem Domainnamen hergestellt wird)

Das Gerät funktioniert nicht, wenn entweder:

  • Im selben Netzwerk gibt es ein oder mehrere weitere Geräte, die dieselbe MAC-Adresse des Geräts verwenden (als Konflikt-MAC-Adresse bezeichnet).
  • Im selben Netzwerk gibt es ein oder mehrere weitere Geräte, die dieselbe IP-Adresse des Geräts verwenden (als Konflikt-IP-Adresse bezeichnet).

Dieses Tutorial überfordert Sie nicht mit dem Wissen über Netzwerke. Deshalb erklärt das Tutorial diese Konzepte nicht. Es liegt außerhalb des Umfangs dieses Tutorials. Stattdessen zeigt das Tutorial, wie man sie verwendet.

Die MAC-Adresse ist bei Geräten normalerweise fest eingebaut. Daran müssen wir uns nicht kümmern. Allerdings hat das Arduino Ethernet Shield keine integrierte MAC-Adresse. Die MAC-Adresse ist auf einem Aufkleber auf dem Shield aufgedruckt. Wir müssen sie ablesen und die MAC-Adresse für das Arduino Shield im Arduino-Code festlegen.

Es gibt zwei Methoden, um einem Gerät (einschließlich Arduino) die IP-Adresse, die Subnetzmaske, die IP-Adresse des Gateways und die IP-Adresse des DNS-Servers zuzuweisen:

  1. Verwenden Sie die statische IP-Adresse:
    • Man muss die IP-Adresse, Subnetzmaske, Gateway-IP-Adresse und DNS-Server-IP-Adresse verwalten
    • Man muss die IP-Adresse, Subnetzmaske, Gateway-IP-Adresse und DNS-Server-IP-Adresse manuell festlegen (für den Arduino Ethernet Shield legt man diese Informationen im Arduino-Code fest)
    • Es funktioniert NICHT, wenn:
      • Eine IP-Adresse festgelegt wird, die von anderen Geräten im selben LAN-Netzwerk verwendet wird → IP-Konflikt
      • Eine falsche Subnetzmaske, Gateway-IP-Adresse und DNS-Server-IP-Adresse festlegen
  • Automatisch eine IP-Adresse erhalten (DHCP), auch dynamische IP-Adresse genannt
    • Das Gerät bezieht automatisch die IP-Adresse, Subnetzmaske, Gateway-IP-Adresse und DNS-Server-IP-Adresse vom Router oder Access Point mittels DHCP. Wir müssen die IP-Adresse, Subnetzmaske, Gateway-IP-Adresse und DNS-Server-IP-Adresse nicht verwalten. Der Router/Access Point erledigt dies für uns.

    Wenn Sie Ihr Smartphone mit Ihrem Heim-WLAN verbinden, wird die zweite Methode verwendet.

    Wenn man Arduino verwendet, ist die erste Methode für Anfänger schwierig. Die zweite Methode ist einfach und wird Anfängern empfohlen, die nichts über Netzwerke wissen.

    So verwenden Sie das Arduino Ethernet Shield

    Arduino kommuniziert über die SPI-Schnittstelle mit dem Ethernet Shield. Folgendes zeigt, wie man das Arduino Ethernet Shield verwendet.

    • Stecke das Ethernet-Shield auf den Arduino Uno oder Mega
    • Verbinde den PC mit dem Arduino Uno/Mega über ein USB-Kabel
    • Verbinde das Ethernet-Shield über ein Ethernet-Kabel mit dem Router oder Access Point
    • Öffne die Arduino-IDE und schreibe Code
    • Lade den Code auf den Arduino Uno/Mega hoch

    Es ist völlig einfach.

    Grundgerüstcode für Arduino Ethernet Shield bei Verwendung einer dynamischen IP-Adresse

    Voraussetzung

    • Wir müssen die MAC-Adresse des Ethernet-Shields kennen (aus einem vom Hersteller bereitgestellten Aufkleber)

    Wie programmiert man Schritt für Schritt

    • Bibliothek einbinden
    #include <SPI.h> #include <Ethernet.h>
    • MAC-Adresse deklarieren
    // Ersetze die untenstehende MAC-Adresse durch die MAC-Adresse, die auf dem Aufkleber des Arduino Shield 2 gedruckt ist byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    • Deklariere weitere Objekte, je nach Anwendung.
    • Starte das Ethernet-Shield
    // initialisiere das Ethernet-Shield mittels DHCP: Ethernet.begin(mac);

    *(Optional) Geben Sie die IP-Adresse des Arduino, die Subnetzmaske, die Gateway-IP-Adresse und die DNS-Server-IP-Adresse aus.

    Serial.print("Arduino's IP Address: "); Serial.println(Ethernet.localIP()); Serial.print("DNS Server's IP Address: "); Serial.println(Ethernet.dnsServerIP()); Serial.print("Gateway's IP Address: "); Serial.println(Ethernet.gatewayIP()); Serial.print("Network's Subnet Mask: "); Serial.println(Ethernet.subnetMask());

    Beachten Sie, dass Arduino in den folgenden Fällen keine IP-Adresse erhalten kann:

    • Der Router oder Access Point unterstützt kein DHCP
    • Das Ethernet-Kabel ist nicht richtig eingesteckt oder defekt

    Um diese Probleme zu erkennen, können wir Ethernet.begin(mac); wie folgt ändern:

    if (Ethernet.begin(mac) == 0) { Serial.println("Failed to obtaining an IP address"); // Überprüfe, ob Ethernet-Hardware vorhanden ist if (Ethernet.hardwareStatus() == EthernetNoHardware) Serial.println("Ethernet shield was not found"); // Überprüfe, ob das Ethernet-Kabel angeschlossen ist if (Ethernet.linkStatus() == LinkOFF) Serial.println("Ethernet cable is not connected."); while (true); }

    ※ Notiz:

    Wenn Sie die MAC-Adresse nicht ändern, kann sie trotzdem funktionieren. Allerdings kann sie nicht funktionieren, wenn sie mit der MAC-Adresse eines anderen Geräts im selben LAN-Netzwerk in Konflikt geraten. Falls der MAC-Aufkleber verloren geht, verwenden Sie einfach die oben genannte MAC-Adresse zum Testen.

    Der vollständige Skelettcode bei Verwendung der dynamischen IP-Adresse

    /* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino/arduino-ethernet-shield-2 */ #include <SPI.h> #include <Ethernet.h> // replace the MAC address below by the MAC address printed on a sticker on the Arduino Shield 2 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // TODO: Declare something depending on your application void setup() { Serial.begin(9600); // initialize the Ethernet shield using DHCP: Serial.println("Obtaining an IP address using DHCP"); if (Ethernet.begin(mac) == 0) { Serial.println("Failed to obtaining an IP address"); // check for Ethernet hardware present if (Ethernet.hardwareStatus() == EthernetNoHardware) Serial.println("Ethernet shield was not found"); // check for Ethernet cable if (Ethernet.linkStatus() == LinkOFF) Serial.println("Ethernet cable is not connected."); while (true); } // print out Arduino's IP address, subnet mask, gateway's IP address, and DNS server's IP address Serial.print("- Arduino's IP address : "); Serial.println(Ethernet.localIP()); Serial.print("- Gateway's IP address : "); Serial.println(Ethernet.gatewayIP()); Serial.print("- Network's subnet mask : "); Serial.println(Ethernet.subnetMask()); Serial.print("- DNS server's IP address: "); Serial.println(Ethernet.dnsServerIP()); // TODO: initialize something depending on your application } void loop() { // TODO: do something depending on your application }

    Lade den obigen Code auf Arduino hoch. Wenn es gelingt, zeigt der serielle Monitor Folgendes an:

    COM6
    Send
    Obtaining an IP address using DHCP - Arduino's IP address : 192.168.0.5 - Gateway's IP address : 192.168.0.1 - Network's subnet mask : 255.255.255.0 - DNS server's IP address: 8.8.8.8
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    Wenn der serielle Monitor nicht so angezeigt wird wie oben, überprüfe dein Ethernet-Kabel. Wenn es immer noch nicht funktioniert, gehe zum nächsten Teil, um die statische IP-Adresse zu verwenden.

    Skelettcode für das Arduino Ethernet Shield bei Verwendung der statischen IP-Adresse

    Voraussetzung

    Wie man Schritt für Schritt programmiert

    • Bibliothek einbinden
    #include <SPI.h> #include <Ethernet.h>
    • MAC-Adresse deklarieren
    // Ersetzen Sie unten die MAC-Adresse durch die MAC-Adresse, die auf einem Aufkleber am Arduino Shield 2 steht byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    • Deklarieren Sie eine ungenutzte IP-Adresse, eine Subnetzmaske, die IP-Adresse des Gateways und die IP-Adresse des DNS-Servers.
    // Ändern Sie die IP-Adresse, die Subnetzmaske, die Gateway-IP-Adresse und die DNS-Server-IP-Adresse IPAddress ip(192, 168, 0, 5); IPAddress gateway(192, 168, 0, 1); IPAddress subnet(255, 255, 255, 0); IPAddress myDns(8, 8, 8, 8);
    • Deklarieren Sie weitere Objekte, je nach Ihrer Anwendung.
    • Starten Sie das Ethernet-Shield
    // Initialisieren Sie das Ethernet-Shield mit der statischen IP-Adresse: Ethernet.begin(mac, ip, myDns, gateway, subnet);
    • Optional: Netzwerkverbindungsstatus prüfen.
    if (Ethernet.linkStatus() == LinkON) Serial.println("Link status: On"); else Serial.println("Link status: Off");

    ※ Notiz:

    Wenn Sie die MAC-Adresse NICHT ändern, kann es trotzdem funktionieren. Allerdings kann es NICHT funktionieren, wenn sie mit der MAC-Adresse eines anderen Geräts im selben LAN-Netzwerk kollidiert. Falls der MAC-Aufkleber verloren geht, verwenden Sie einfach die oben genannte MAC-Adresse zum Testen.

    Der vollständige Skelettcode bei der Verwendung der statischen IP-Adresse

    /* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino/arduino-ethernet-shield-2 */ #include <SPI.h> #include <Ethernet.h> // replace the MAC address below by the MAC address printed on a sticker on the Arduino Shield 2 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // change the IP address, subnet mask, gateway's IP address, and DNS server's IP address depending on your network IPAddress ip(192, 168, 0, 5); IPAddress gateway(192, 168, 0, 1); IPAddress subnet(255, 255, 255, 0); IPAddress myDns(8, 8, 8, 8); // TODO: Declare something depending on your application void setup() { Serial.begin(9600); // initialize the Ethernet shield using the static IP address: Ethernet.begin(mac, ip, myDns, gateway, subnet); // TODO: initialize something depending on your application } void loop() { // optional, check link status if (Ethernet.linkStatus() == LinkON) Serial.println("Link status: On"); else Serial.println("Link status: Off"); // TODO: do something depending on your application }

    Lade den obigen Code auf den Arduino hoch. Wenn der Upload erfolgreich war, zeigt der serielle Monitor Folgendes:

    COM6
    Send
    Link status: On Link status: On Link status: On
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    Wenn der Serial Monitor nicht wie oben angezeigt wird:

    • Prüfen Sie Ihr Ethernetkabel
    • Stellen Sie sicher, dass die IP-Adresse zu Ihrem Netzwerk gehört
    • Stellen Sie sicher, dass die IP-Adresse nicht mit anderen Geräten im selben Netzwerk kollidiert
    • Stellen Sie sicher, dass die Subnetzmaske, die IP-Adresse des Gateways und die IP-Adresse des DNS-Servers korrekt eingestellt sind

    Zusätzliches Wissen über Netzwerke für Anfänger

    Wenn Sie eine statische IP verwenden, müssen Sie eine ungenutzte IP-Adresse, eine Subnetzmaske, die IP-Adresse des Gateways und die IP-Adresse des DNS-Servers erhalten. Unten wird gezeigt, wie man sie erhält.

    Wenn Arduino und Ihr PC sich mit demselben Netzwerk verbinden.

    • Öffnen Sie die Eingabeaufforderung auf Ihrem PC
    • Geben Sie den folgenden Befehl in der Eingabeaufforderung ein:
    ipconfig
    Command Prompt
    C:\Windows\system32>ipconfig Ethernet adapter Ethernet 2: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . : Wireless LAN adapter Wi-Fi: Connection-specific DNS Suffix . : Link-local IPv6 Address . . . . . : fe80::d559:ae92:8dff:a604%20 IPv4 Address. . . . . . . . . . . : 192.168.0.14 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.0.1
    • Aus dem Obigen können Sie die Subnetzmaske und die IP-Adresse des Gateways erhalten.
    • Aus der obigen Ausgabe können Sie die IP-Adresse Ihres PCs sehen. Wir werden versuchen, basierend auf der IP-Adresse Ihres PCs eine ungenutzte IP-Adresse zu finden.
      • Erhöhen oder verringern Sie die IP-Adresse schrittweise, beginnend mit der IP-Adresse des PCs.
      • Senden Sie den ping-Befehl an diese IP-Adresse in der Eingabeaufforderung. Wiederholen Sie diese beiden Schritte, bis die IP-Adresse nicht erreichbar ist. Falls die Adresse nicht erreichbar ist, handelt es sich um eine unbenutzte IP-Adresse und wir können sie für Arduino verwenden. Zum Beispiel:
      ping 192.168.0.16
      Command Prompt
      C:\Users\youruser>ping 192.168.0.16 Pinging 192.168.0.16 with 32 bytes of data: Reply from 192.168.0.14: Destination host unreachable. Reply from 192.168.0.14: Destination host unreachable. Reply from 192.168.0.14: Destination host unreachable. Reply from 192.168.0.14: Destination host unreachable. Ping statistics for 192.168.0.16: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

      ※ Notiz:

      In einigen Fällen kann die IP-Adresse, auch wenn sie nicht erreichbar ist, von einem anderen Gerät verwendet werden. Dieser Fall tritt jedoch in Ihrem Heimnetzwerk in der Regel nicht auf.

      • Für DNS-Server-IP-Adresse, können wir einfach 8.8.8.8 verwenden

      Jetzt können Sie diese Shields verwenden, um Arduino mit dem Internet zu verbinden. Siehe auch ein weiteres Beispiel im Abschnitt 'Siehe Auch'.

      WARNING

      Bitte beachten Sie, dass dieses Tutorial unvollständig ist. Wir werden auf unserer Facebook-Seite posten, wenn das Tutorial vollständig ist. Liken Sie sie, um auf dem Laufenden zu bleiben.

    ※ UNSERE NACHRICHTEN

    • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!