Arduino Ethernet Shield Tutorial

Mit dem Arduino Ethernet Shield können Sie Ihr Arduino einfach mit dem Internet verbinden. Mit diesem Schutzschild kann Ihr Arduino über eine Internetverbindung Daten von überall auf der Welt senden und empfangen. Sie können es verwenden, um lustige Dinge wie Steuerroboter von einer Website aus zu erledigen oder jedes Mal, wenn Sie eine neue Twitter-Nachricht erhalten, eine Glocke zu läuten. Dieses Schutzschild eröffnet unendlich viele Möglichkeiten, indem Sie Ihr Projekt in kürzester Zeit mit dem Internet verbinden können.

Schritt 1: Setup

Das Einrichten ist so einfach wie das Einstecken der Header-Pins vom Shield in Ihr Arduino.

Beachten Sie, dass das hier verwendete Ethernet Shield früher bei RadioShack verkauft wurde. Da RadioShack jedoch nicht mehr verfügbar ist, ist es schwieriger, an den Schild zu kommen. Dieses generische Ethernet-Schutzschild, das bei Amazon erhältlich ist, sollte auch funktionieren. * Es ist für die Verwendung mit Arduino Uno Rev. 3-Boards (oder höher) vorgesehen. Es hat zu viele Pins, um sie an Arduino-Boards früherer Versionen anzuschließen.

* Ich habe dies nicht persönlich bestätigt. Käufer aufgepasst!

Schritt 2: Schildfunktionen

Das Ethernet Shield basiert auf dem W51000-Chip, der über einen internen 16K-Puffer verfügt. Es hat eine Verbindungsgeschwindigkeit von bis zu 10 / 100Mb. Dies ist nicht die schnellste Verbindung, aber es ist auch nichts, woran man die Nase hochdrehen kann.

Es basiert auf der Arduino Ethernet-Bibliothek, die im Lieferumfang der Entwicklungsumgebung enthalten ist.

Es gibt auch einen integrierten Micro-SD-Steckplatz, in dem Sie eine Menge Daten speichern und ganze Websites nur mit Ihrem Arduino bereitstellen können. Dies erfordert die Verwendung einer externen SD-Bibliothek, die nicht im Lieferumfang der Software enthalten ist. Die Verwendung der SD-Karte wird in dieser Anleitung nicht behandelt. Es wird jedoch in Schritt 8 der Anleitung zur Wireless SD-Karte behandelt.

Auf der Karte ist außerdem Platz für ein PoE-Modul (Power over Ethernet), mit dem Sie Ihr Arduino über eine Ethernet-Verbindung mit Strom versorgen können.

Eine vollständige technische Übersicht finden Sie auf der offiziellen Ethernet Shield-Seite.

Schritt 3: Erste Schritte

Stecken Sie den Arduino in den USB-Anschluss Ihres Computers und das Ethernet-Shield in Ihren Router (oder eine direkte Internetverbindung).

Öffnen Sie als Nächstes die Arduino-Entwicklungsumgebung. Ich empfehle dringend, ein Upgrade auf Arduino 1.0 oder höher durchzuführen (falls Sie dies noch nicht getan haben). Diese Version der Software verfügt über eine integrierte DHCP-Unterstützung und erfordert keine manuelle Konfiguration einer IP-Adresse.

Öffnen Sie die DhcpAddressPrinter-Skizze, um herauszufinden, welche IP-Adresse Ihrem Board zugewiesen wurde. Dies finden Sie unter:

Datei -> Beispiele -> Ethernet -> DhcpAddressPrinter

Nach dem Öffnen müssen Sie möglicherweise die Mac-Adresse ändern. Bei neueren Versionen des Ethernet-Shields sollte diese Adresse auf einem auf der Platine angebrachten Aufkleber angezeigt werden. Wenn Sie einen Aufkleber vermissen, sollte es einfach funktionieren, eine eindeutige Mac-Adresse zu erstellen. Wenn Sie mehrere Schilde verwenden, stellen Sie sicher, dass jedes eine eindeutige Mac-Adresse hat.

Sobald die Mac-Adresse richtig konfiguriert ist, laden Sie die Skizze auf Ihr Arduino hoch und öffnen Sie den seriellen Monitor. Es sollte die verwendete IP-Adresse ausdrucken.

Schritt 4: Server

Sie können das Arduino Ethernet Shield als Webserver verwenden, um eine HTML-Seite zu laden oder als Chat-Server zu fungieren. Sie können auch von einem Client gesendete Anforderungen analysieren, z. B. einen Webbrowser. Die folgenden zwei Beispiele zeigen, wie Sie damit HTML-Seiten bereitstellen und URL-Zeichenfolgen analysieren.

Eine wichtige Sache, die Sie beachten sollten, ist, dass Sie in beiden Beispielen unten die IP-Adresse Ihres Arduino eingeben müssen, damit sie funktionieren.

Der folgende Code ändert die bereitgestellte Webseite basierend auf einem Tastendruck:
 / * Webserver-Demo von Randy Sarafan zusammengestellt Ein einfacher Webserver, der die Seite ändert, die bereitgestellt wird, ausgelöst durch einen Knopfdruck. Schaltung: * Ethernet-Abschirmung an Pin 10, 11, 12, 13 * Anschließen einer Taste zwischen Pin D2 und 5 V * Anschließen eines 10K-Widerstands zwischen Pin D2 und Masse Basierend fast ausschließlich auf dem Webserver von Tom Igoe und David Mellis Bearbeitungsverlauf: erstellt 18. Dezember 2009 von David A. Mellis geändert 4. September 2010 von Tom Igoe * / #include #include // Geben Sie unten eine MAC-Adresse und eine IP-Adresse für Ihren Controller ein. // Die IP-Adresse hängt von Ihrem lokalen Netzwerk ab: Byte mac [] = {0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02}; IPAddress ip (191, 11, 1, 1); // <<< Geben Sie Ihre IP-Adresse hier ein !!! // Initialisieren Sie die Ethernet-Serverbibliothek // mit der IP-Adresse und dem Port, die Sie verwenden möchten // (Port 80 ist Standard für HTTP): EthernetServer-Server (80); int buttonPress = 1; void setup () {pinMode (2, INPUT); // Starten Sie die Ethernet-Verbindung und den Server: Ethernet.begin (mac, ip); server.begin (); } void loop () {buttonPress = digitalRead (2); // auf eingehende Clients warten EthernetClient client = server.available (); if (client) {// eine http-Anfrage endet mit einer Leerzeile boolean currentLineIsBlank = true; while (client.connected ()) {if (client.available ()) {char c = client.read (); // Wenn Sie am Ende der Zeile angelangt sind (// ein neues Zeilenzeichen erhalten haben) und die Zeile leer ist, ist die http-Anforderung beendet, // sodass Sie eine Antwort senden können, wenn (c == '\ n' && currentLineIsBlank) {// sende einen Standard-HTTP-Antwortheader client.println ("HTTP / 1.1 200 OK"); client.println ("Inhaltstyp: text / html"); client.println (); // dient einer anderen Version einer Website, je nachdem, ob die // Taste an Pin 2 gedrückt wird oder nicht. if (buttonPress == 1) {client.println ("LIGHT!"); } else if (buttonPress == 0) {client.println ("DARK!"); } brechen; } if (c == '\ n') {// Sie beginnen eine neue Zeile currentLineIsBlank = true; } else if (c! = '\ r') {// Sie haben ein Zeichen in der aktuellen Zeile erhalten currentLineIsBlank = false; }}} // Geben Sie dem Webbrowser Zeit, um die Datenverzögerung zu empfangen (1); // Verbindung schließen: client.stop (); }} 

Damit dieser Beispielcode funktioniert, schließen Sie einfach eine Taste zwischen Pin D2 und 5 V an, einen 10K-Widerstand zwischen Pin D2 und Masse, und laden Sie dann die IP-Adresse Ihres Arduino in Ihren Webbrowser. Die Seite sollte mit einem schwarzen Hintergrund geladen werden. Halten Sie die Taste gedrückt und aktualisieren Sie die Browserseite. Die Site sollte jetzt mit einem weißen Hintergrund geladen werden.


Der folgende Code leuchtet abhängig von der an das Arduino gesendeten URL auf:
 / * Webserver-Demo von Randy Sarafan Ermöglicht das Ein- und Ausschalten einer LED durch Eingabe verschiedener URLs. So schalten Sie es ein: // Ihre-IP-Adresse / $ 1 So schalten Sie es aus: // Ihre-IP-Adresse / $ 2 Schaltung: * Ethernet-Abschirmung an Pin 10, 11, 12, 13 * Schließen Sie eine LED an Pin D2 an und in Reihe mit einem 220-Ohm-Widerstand gegen Masse geschaltet. Basierend fast ausschließlich auf dem Webserver von Tom Igoe und David Mellis. Verlauf bearbeiten: Erstellt am 18. Dezember 2009 von David A. Mellis, geändert am 4. September 2010 von Tom Igoe * / #include #include boolean eingehend = 0; // Geben Sie unten eine MAC-Adresse und eine IP-Adresse für Ihren Controller ein. // Die IP-Adresse hängt von Ihrem lokalen Netzwerk ab: Byte mac [] = {0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02}; IPAddress ip (191, 11, 1, 1); // <<< Geben Sie Ihre IP-Adresse hier ein !!! // Initialisieren Sie die Ethernet-Serverbibliothek // mit der IP-Adresse und dem Port, die Sie verwenden möchten // (Port 80 ist Standard für HTTP): EthernetServer-Server (80); void setup () {pinMode (2, OUTPUT); // Starten Sie die Ethernet-Verbindung und den Server: Ethernet.begin (mac, ip); server.begin (); Serial.begin (9600); } void loop () {// auf eingehende Clients warten EthernetClient client = server.available (); if (client) {// eine http-Anfrage endet mit einer Leerzeile boolean currentLineIsBlank = true; while (client.connected ()) {if (client.available ()) {char c = client.read (); // Wenn Sie am Ende der Zeile angelangt sind (ein Zeilenumbruchzeichen // erhalten haben) und die Zeile leer ist, ist die http-Anforderung beendet, // sodass Sie eine Antwort senden können // liest die URL-Zeichenfolge von $ bis zuerst Leerzeichen if (eingehend && c == '') {eingehend = 0; } if (c == ' 

Damit dies funktioniert, verbinden Sie das Pluskabel mit einer LED an Pin D2 und das Minuskabel in Reihe mit einem 220-Ohm-Widerstand an Masse.

Um die LED einzuschalten, geben Sie dies in Ihren Browser ein:
// [IHRE IP-ADRESSE HIER] / $ 1

Um die LED auszuschalten, geben Sie dies in Ihren Browser ein:
// [IHRE IP-ADRESSE HIER] / $ 2

Hinweis: Sie sollten natürlich [IHRE IP-ADRESSE HIER] durch Ihre IP-Adresse ersetzen.) {Incoming = 1; } // Überprüft die URL-Zeichenfolge $ 1 oder $ 2, wenn (eingehend == 1) {Serial.println (c); if (c == '1') {Serial.println ("ON"); digitalWrite (2, HIGH); } if (c == '2') {Serial.println ("OFF"); digitalWrite (2, LOW); }}

if (c == '\ n') {// Sie beginnen eine neue Zeile currentLineIsBlank = true; } else if (c! = '\ r') {// Sie haben ein Zeichen in der aktuellen Zeile erhalten currentLineIsBlank = false; }}} // Geben Sie dem Webbrowser Zeit, um die Datenverzögerung zu empfangen (1); // Verbindung schließen: client.stop (); }}

Damit dies funktioniert, verbinden Sie das Pluskabel mit einer LED an Pin D2 und das Minuskabel in Reihe mit einem 220-Ohm-Widerstand an Masse.

Um die LED einzuschalten, geben Sie dies in Ihren Browser ein:
// [IHRE IP-ADRESSE HIER] / $ 1

Um die LED auszuschalten, geben Sie dies in Ihren Browser ein:
// [IHRE IP-ADRESSE HIER] / $ 2

Hinweis: Sie sollten natürlich [IHRE IP-ADRESSE HIER] durch Ihre IP-Adresse ersetzen.

Schritt 5: Client

Sie können das Ethernet Shield auch als Client verwenden. Mit anderen Worten, Sie können damit Websites wie einen Webbrowser lesen.

Websites enthalten viel sichtbaren und ausgeblendeten Text, was die Programmierung auf der Clientseite sehr schwierig macht. Das Lesen von Informationen von Websites umfasst normalerweise das Parsen vieler Zeichenfolgen. Das ist verrückt, aber es lohnt sich, wenn Sie das vorhaben.

Ich wollte Code schreiben, um Twitter-Nachrichten zu lesen, aber ein solcher Code existiert bereits als Beispiel im Arduino-Programmierer. Stattdessen habe ich es einfach leicht modifiziert, um eine LED einzuschalten, wenn eine spezielle Nachricht gelesen wird.

Damit dies funktioniert, verbinden Sie das Pluskabel mit einer LED an Pin D2 und das Minuskabel in Reihe mit einem 220-Ohm-Widerstand an Masse.

Vergessen Sie nicht, Ihre eigene IP-Adresse in den folgenden Code einzugeben, da dies sonst nicht funktioniert.

Hier ist der Code:
 / * Twitter-Client mit Zeichenfolgen Diese Skizze stellt über ein Ethernet-Shield eine Verbindung zu Twitter her. Es analysiert das zurückgegebene XML und sucht nach einem Tweet. Sie können das Arduino-Ethernet-Shield oder das Adafruit-Ethernet-Shield verwenden. Beide funktionieren, solange ein Wiznet-Ethernet-Modul an Bord ist. In diesem Beispiel werden die DHCP-Routinen in der Ethernet-Bibliothek verwendet, die Teil des Arduino-Kerns ab Version 1.0 Beta 1 ist. In diesem Beispiel wird die String-Bibliothek verwendet, die Teil des Arduino-Kerns ab Version 0019 ist. Schaltung: * Ethernet-Abschirmung an Pin 10, 11, 12, 13 erstellt am 21. Mai 2011 von Tom Igoe Dieser Code ist gemeinfrei. * / #include #include // Geben Sie unten eine MAC-Adresse und eine IP-Adresse für Ihren Controller ein. // Die IP-Adresse hängt von Ihrem lokalen Netzwerk ab: Byte mac [] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01}; IPAddress ip (191, 11, 1, 1); // <<< Geben Sie Ihre IP-Adresse hier ein !!! // Bibliotheksinstanz initialisieren: EthernetClient client; const int requestInterval = 60000; // Verzögerung zwischen Anfragen char serverName [] = "api.twitter.com"; // Twitter URL boolean angefordert; // ob Sie eine Anfrage gestellt haben, seit Sie long lastAttemptTime = 0 verbunden haben; // das letzte Mal, als Sie eine Verbindung zum Server hergestellt haben, in Millisekunden String currentLine = ""; // Zeichenfolge zum Speichern des Texts vom Server String tweet = ""; // Zeichenfolge für den Tweet boolean ReadingTweet = false; // wenn Sie gerade den Tweet lesen void setup () {pinMode (2, OUTPUT); // Platz für die Strings reservieren: currentLine.reserve (256); tweet.reserve (150); // serial initialisiere: Serial.begin (9600); // versuche eine DHCP-Verbindung: if (! Ethernet.begin (mac)) {// Wenn DHCP fehlschlägt, beginne mit einer fest codierten Adresse: Ethernet.begin (mac, ip); } // Verbindung zu Twitter herstellen: connectToServer (); } void loop () {if (client.connected ()) {if (client.available ()) {// eingehende Bytes lesen: char inChar = client.read (); // eingehendes Byte am Zeilenende hinzufügen: currentLine + = inChar; // Wenn Sie eine neue Zeile erhalten, löschen Sie die Zeile: if (inChar == '\ n') {currentLine = ""; } // Wenn die aktuelle Zeile mit endet, // folgt der Tweet: if (currentLine.endsWith ("")) {// Tweet beginnt. Löschen Sie die Tweet-Zeichenfolge: ReadingTweet = true; tweet = ""; } // Wenn Sie gerade die Bytes eines Tweets lesen, // fügen Sie sie dem Tweet hinzu. String: if (ReadingTweet) {if (inChar! = '<') {tweet + = inChar; } else {// wenn du eine "Hallo grausame Welt" hast) {digitalWrite (2, HIGH); Serial.println ("LED ON!"); } if (tweet! = "> Hallo grausame Welt") {digitalWrite (2, LOW); Serial.println ("LED AUS!"); } // Verbindung zum Server schließen: client.stop (); }}}} else if (millis () - lastAttemptTime> requestInterval) {// Wenn Sie nicht verbunden sind und seit // Ihrer letzten Verbindung zwei Minuten vergangen sind, versuchen Sie erneut, eine Verbindung herzustellen: connectToServer (); }} void connectToServer () {// versuche eine Verbindung herzustellen und warte eine Millisekunde: Serial.println ("Verbindung zum Server herstellen ..."); if (client.connect (serverName, 80)) {Serial.println ("HTTP-Anfrage stellen ..."); // HTTP-GET-Anfrage an Twitter senden: client.println ("GET /1/statuses/user_timeline.xml?screen_name=RandyMcTester&count=1 HTTP / 1.1"); client.println ("HOST: api.twitter.com"); client.println (); } // notiere den Zeitpunkt dieses Verbindungsversuchs: lastAttemptTime = millis (); }} 

Vermutlich möchten Sie etwas anderes als den letzten Beitrag im RandyMcTester-Twitter-Feed lesen.

Ändern Sie den folgenden Text, um andere Twitter-Feeds zu lesen:
client.println ("GET /1/statuses/user_timeline.xml?screen_name= [NEUER TWITTER-NAME HIER] & count = 1 HTTP / 1.1");

Ähnlicher Artikel