Inhaltsverzeichnis:

Erste Schritte mit Arduino und Ethernet - Gunook
Erste Schritte mit Arduino und Ethernet - Gunook

Video: Erste Schritte mit Arduino und Ethernet - Gunook

Video: Erste Schritte mit Arduino und Ethernet - Gunook
Video: Arduino Tutorial - 1. Einführung (#1) 2024, Juli
Anonim
Erste Schritte mit Arduino und Ethernet
Erste Schritte mit Arduino und Ethernet

Ihr Arduino kann problemlos über eine kabelgebundene Ethernet-Verbindung mit der Außenwelt kommunizieren. Bevor wir jedoch beginnen, wird davon ausgegangen, dass Sie über ein grundlegendes Verständnis von Computernetzwerken verfügen, z. Darüber hinaus finden Sie hier einen guten kurzen Überblick über Ethernet.

Sie benötigen ein Arduino Uno oder ein kompatibles Board mit einem Ethernet-Shield, das den W5100-Ethernet-Controller-IC (so ziemlich alle) gemäß dem Bild verwendet.

Außerdem müssen Sie das Board über die externe DC-Buchse mit Strom versorgen – der W5100 IC verbraucht mehr Strom, als der USB-Strom liefern kann. Ein 9V 1,5A Steckerpack/Wandwarze reicht aus.

Schritt 1:

Bild
Bild

Schließlich - die Schilde werden heiß - achten Sie also darauf, den W5100 nach längerem Gebrauch nicht zu berühren. Falls Sie sich nicht sicher sind – das ist der W5100 IC.

Schritt 2:

Sobald Sie Ihr Ethernet-fähiges Arduino haben und die externe Stromversorgung angeschlossen haben, ist es eine gute Idee, zu überprüfen, ob alles funktioniert. Öffnen Sie die Arduino IDE und wählen Sie Datei > Beispiele > Ethernet > Webserver. Dadurch wird eine einfache Skizze geladen, die die von den analogen Eingängen gesammelten Daten in einem Webbrowser anzeigt. Laden Sie es jedoch noch nicht hoch, es muss geringfügig geändert werden.

Sie müssen die IP-Adresse des Ethernet-Shields angeben – was in der Skizze erfolgt. Das ist einfach, gehen Sie zur Zeile:

IP-Adresse ip(10, 1, 1, 77);

Und passen Sie es an Ihr eigenes Setup an. Bei uns zu Hause ist beispielsweise die IP-Adresse des Routers 10.1.1.1, der Drucker 10.1.1.50 und alle PCs sind unter …50. Also setze ich meine Schild-IP auf 10.1.1.77, indem ich die Zeile ändere auf:

Byte mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

Wenn Sie jedoch nur einen Schild haben, lassen Sie ihn einfach. Es kann die sehr, sehr, sehr seltene Chance geben, dass eine MAC-Adresse mit der Ihrer vorhandenen Hardware identisch ist, sodass es ein anderer Zeitpunkt wäre, sie zu ändern.

Schritt 3:

Bild
Bild

Wenn Sie jedoch nur einen Schild haben, lassen Sie ihn einfach. Es kann die sehr, sehr, sehr seltene Chance geben, dass eine MAC-Adresse mit der Ihrer vorhandenen Hardware identisch ist, sodass es ein anderer Zeitpunkt wäre, sie zu ändern.

Nachdem Sie Ihre Änderungen vorgenommen haben, speichern Sie die Skizze und laden Sie sie hoch. Öffnen Sie nun einen Webbrowser und navigieren Sie zu der IP-Adresse, die Sie in die Skizze eingegeben haben, und Sie sollten etwas Ähnliches wie auf dem Bild sehen.

Was ist los?

Der Arduino wurde so programmiert, dass er eine einfache Webseite mit den von den analogen Eingängen gemessenen Werten anbietet. Sie können den Browser aktualisieren, um aktualisierte Werte zu erhalten. Beachten Sie an dieser Stelle, dass die Ethernet-Schilde die digitalen Pins 10 bis 13 verwenden, sodass Sie diese für nichts anderes verwenden können. Einige Arduino-Ethernet-Shields verfügen möglicherweise auch über einen microSD-Kartensteckplatz, der auch einen anderen digitalen Pin verwendet – überprüfen Sie also die Dokumentation, um herauszufinden, welcher.

Schritt 4:

Jetzt, da wir jedoch sehen, dass das Ethernet-Shield funktioniert, können wir zu etwas Nützlicherem übergehen. Lassen Sie uns das vorherige Beispiel auf einfache Weise analysieren und sehen, wie wir interessantere Daten über das Netzwerk verteilen und anzeigen können. Als Referenz werden alle Ethernet-bezogenen Funktionen von der Ethernet-Arduino-Bibliothek behandelt. Wenn Sie sich die vorherige Skizze ansehen, die wir gerade verwendet haben, wird der Abschnitt von Interesse sein:

for (int analogChannel = 0; analogChannel < 6; analogChannel++) { int sensorReading = analogRead (analogChannel); client.print("analoger Eingang"); client.print (analogChannel); client.print(" ist "); client.print (sensorReading); client.println(""); } client.println("");

Hoffentlich sollte Ihnen dieser Abschnitt der Skizze bekannt vorkommen – erinnern Sie sich daran, wie wir serial.print() verwendet haben; in der Vergangenheit beim Senden von Daten an die serielle Monitorbox? Nun, jetzt können wir dasselbe tun, aber Daten von unserem Ethernet-Shield zurück an einen Webbrowser senden – mit anderen Worten, eine sehr einfache Art von Webseite die Ausgabe in einem lesbaren Format – HTML-Code. Ich bin kein Website-Entwickler (!) und werde mich daher nicht zu sehr mit HTML beschäftigen.

Wenn Sie jedoch schön formatierte Webseiten mit Ihrem Arduino usw. bereitstellen möchten, wäre dies ein guter Anfang. Der Einfachheit halber sind die folgenden beiden Funktionen am nützlichsten:

client.print(" ist ");

Client.print (); ermöglicht es uns, Text oder Daten an die Webseite zurückzusenden. Es funktioniert genauso wie serial.print(), also nichts Neues. Ebenso wie bei serial.print() können Sie auch den Datentyp angeben. Natürlich können Sie damit auch Daten zurücksenden. Die andere nützliche Zeile ist:

client.println("");

die den HTML-Code an den Webbrowser zurücksendet und ihn anweist, eine neue Zeile zu beginnen. Der Teil, der tatsächlich den Wagenrücklauf/die neue Zeile verursacht, ist der

das ist ein HTML-Code (oder „Tag“) für eine neue Zeile.

Wenn Sie also aufwändigere Webseiten-Anzeigen erstellen, können Sie einfach andere HTML-Tags in client.print() einfügen; Stellungnahme. Wenn Sie mehr über HTML-Befehle erfahren möchten, finden Sie hier eine gute Tutorial-Site.

Schließlich – beachten Sie, dass der Sketch die Daten nur sendet, wenn er angefordert wurde, dh wenn er eine Anfrage vom Webbrowser erhalten hat.

Schritt 5: Zugriff auf Ihr Arduino über das Internet

Zugriff auf Ihr Arduino über das Internet
Zugriff auf Ihr Arduino über das Internet

So weit, ist es gut. Aber was ist, wenn Sie von außerhalb des lokalen Netzwerks auf Ihr Arduino zugreifen möchten?

Sie benötigen eine statische IP-Adresse – d. h. die IP-Adresse, die Ihr Internetdienstanbieter Ihrer Verbindung zuweist, muss gleich bleiben. Wenn Sie keine statische IP haben, sollte sich Ihre IP nicht ändern, solange Sie Ihr Modem/Router dauerhaft eingeschaltet lassen. Das ist jedoch keine optimale Lösung.

Wenn Ihr ISP Ihnen überhaupt keine statische IP anbieten kann, können Sie das Projekt trotzdem fortsetzen, indem Sie eine Organisation verwenden, die ein dynamisches DNS anbietet. Diese Organisationen bieten Ihnen Ihren eigenen statischen IP-Hostnamen (z. B. mojo.monkeynuts.com) anstelle einer Nummer an, verfolgen Sie Ihre sich ändernde IP-Adresse und verknüpfen Sie sie mit dem neuen Hostnamen. Soweit ich weiß, muss Ihr Modem diese DDNS-Dienste unterstützen (einen eingebauten Client für … haben).

Als Beispiel sind zwei Unternehmen No-IP und DynDNS.com. Bitte beachten Sie, dass ich diese beiden nicht verwendet habe, sie werden nur als Beispiele angeboten. Nun, um Ihre IP-Adresse zu finden… Normalerweise können Sie diese finden, indem Sie sich auf der Administrationsseite Ihres Routers anmelden – normalerweise ist sie 192.168.0.1, kann aber anders sein. Erkundigen Sie sich bei Ihrem Lieferanten oder ISP, ob diese die Hardware geliefert haben. Wenn ich in diesem Beispiel 10.1.1.1 in einen Webbrowser eingebe und nach der Eingabe meines Modem-Administrationskennworts wird der folgende Bildschirm wie im Bild dargestellt angezeigt.

Schritt 6:

Bild
Bild

Was Sie suchen, ist Ihre WAN-IP-Adresse, wie Sie im Bild oben sehen können. Um die Witzbolde fernzuhalten, habe ich einen Teil meiner Adresse geschwärzt.

Als nächstes müssen Sie die Portweiterleitung aktivieren. Dies teilt dem Router mit, wohin er eingehende Anfragen von der Außenwelt umleiten soll. Wenn das Modem eine solche Anfrage erhält, möchten wir diese Anfrage an die Portnummer unseres Ethernet-Shields senden. Verwendung der:

EthernetServer-Server (125);

Funktion in unserer Skizze hat die Portnummer auf 125 gesetzt. Der Konfigurationsbildschirm jedes Modems sieht anders aus, aber als Beispiel hier ist einer im Bild.

Schritt 7:

Bild
Bild

So können Sie an der Zeilennummer eins im obigen Bild sehen, dass die eingehenden Portnummern auf 125 gesetzt wurden und die IP-Adresse des Ethernet-Shields auf 10.1.1.77 gesetzt wurde – genauso wie in der Skizze.

Nach dem Speichern der Einstellungen sind wir fertig. Die externe Adresse meines Ethernet-Shields ist WAN: 125. Um auf das Arduino zuzugreifen, gebe ich meine WAN-Adresse mit: 125 am Ende in den Browser des Remote-Webgeräts ein, das die einsame Ethernet-Hardware zu Hause kontaktiert.

Darüber hinaus müssen Sie möglicherweise die Firewall-Einstellungen Ihres Modems ändern, damit der Port 125 für eingehende Anfragen „offen“ist. Weitere Informationen hierzu finden Sie in der Dokumentation Ihres Modems. Jetzt kann ich von praktisch jedem mit dem Internet verbundenen Gerät in der freien Welt meine WAN- und Portnummer in das URL-Feld eingeben und die Ergebnisse erhalten. Zum Beispiel von einem Telefon, wenn es über LTE-Mobilfunkdaten mit dem Internet verbunden ist.

In diesem Stadium können Sie nun Daten auf einer einfachen, von Ihrem Arduino erstellten Webseite anzeigen und von überall mit uneingeschränktem Internetzugang darauf zugreifen. Mit Ihren Arduino-Vorkenntnissen können Sie nun Daten von Sensoren oder anderen Teilen einer Skizze verwenden und zum Abruf anzeigen.

Schritt 8: Anzeige von Sensordaten auf einer Webseite

Anzeige von Sensordaten auf einer Webseite
Anzeige von Sensordaten auf einer Webseite

Als Beispiel für die Anzeige von Sensordaten auf einer Webseite verwenden wir einen kostengünstigen und beliebten Temperatur- und Feuchtigkeitssensor – den DHT22. Sie müssen die Arduino-Bibliothek DHT22 installieren, die Sie auf dieser Seite finden. Wenn Sie das DHT22 zum ersten Mal verwenden, experimentieren Sie mit der Beispielskizze, die in der Bibliothek enthalten ist, damit Sie verstehen, wie es funktioniert.

Verbinden Sie das DHT22 mit dem Daten-Pin mit Arduino D2, Vin mit dem 5V-Pin und GND mit … GND. Nun zu unserer Skizze – um die Temperatur und Luftfeuchtigkeit auf einer Webseite anzuzeigen. Wenn Sie mit HTML nicht vertraut sind, können Sie Online-Dienste wie diesen verwenden, um den Code zu generieren, den Sie dann für die Verwendung in der Skizze ändern können. Im folgenden Beispiel werden die Temperatur- und Feuchtigkeitsdaten des DHT22 auf einer einfachen Webseite bereitgestellt:

#include "SPI.h"#include "Ethernet.h"

// für DHT22-Sensor

#include "DHT.h" #define DHTPIN 2 #define DHTTYPE DHT22

// Geben Sie unten eine MAC-Adresse und IP-Adresse für Ihren Controller ein.

// Die IP-Adresse hängt von Ihrem lokalen Netzwerk ab: byte mac = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IP-Adresse ip(10, 1, 1, 77);

// Initialisieren Sie die Ethernet-Server-Bibliothek

// mit der IP-Adresse und dem Port, den Sie verwenden möchten // (Port 80 ist Standard für HTTP): EthernetServer server(125); DHT dht(DHTPIN, DHTTYPE);

Void-Setup ()

{dht.begin(); // Öffnen Sie die serielle Kommunikation und warten Sie, bis der Port geöffnet ist: Serial.begin (9600); while (!Seriell) {; // Warten Sie, bis der serielle Port eine Verbindung herstellt. Nur für Leonardo benötigt } // Ethernet-Verbindung und Server starten: Ethernet.begin(mac, ip); server.begin(); Serial.print("Server ist auf"); Serial.println (Ethernet.localIP()); }

Leere Schleife ()

{ // auf eingehende Clients lauschen EthernetClient client = server.available(); if (Klient) {Serial.println ("neuer Kunde"); // eine http-Anfrage endet mit einer Leerzeile boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write (c); // wenn Sie das Ende der Zeile erreicht haben (ein Zeilenumbruchzeichen // erhalten haben) und die Zeile leer ist, ist die http-Anfrage beendet, // damit Sie eine Antwort senden können if (c == 'n' && currentLineIsBlank) { // Sende einen Standard-HTTP-Antwortheader client.println("HTTP/1.1 200 OK"); client.println("Inhaltstyp: text/html"); client.println("Verbindung: schließen"); // die Verbindung wird nach Abschluss der Antwort geschlossen client.println("Refresh: 30"); // die Seite automatisch alle 30 Sekunden aktualisieren client.println(); client.println("");

client.println("");

// Daten vom DHT22-Sensor abrufen

float h = dht.readHumidity(); float t = dht.readTemperature(); Serial.println (t); Serial.println (h);

// von hier aus können wir unseren eigenen HTML-Code eingeben, um die Webseite zu erstellen

client.print( Bürowetter

Bürotemperatur - );

client.print(t);

client.print( Grad Celsius

);

client.print("

Feuchtigkeit - );

client.print(h);

client.print( Prozent

);

client.print("

Seite wird alle 30 Sekunden aktualisiert<

. );

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; } } } // dem Webbrowser Zeit geben, die Daten zu empfangen delay(1); // Verbindung schließen: client.stop(); Serial.println ("Client getrennt"); } }

Es ist eine Modifikation der Webserver-Beispielskizze der IDE, die wir zuvor verwendet haben – mit einigen Modifikationen. Zunächst wird die Webseite alle 30 Sekunden automatisch aktualisiert – dieser Parameter wird in der Zeile gesetzt:

client.println("Aktualisieren: 30"); // aktualisiere die Seite automatisch alle 30 Sek.

… und der benutzerdefinierte HTML-Code für unsere Webseite beginnt unter der Zeile:

// von hier aus können wir unseren eigenen HTML-Code eingeben, um die Webseite zu erstellen

Sie können dann einfach den erforderlichen HTML-Code in die client.print()-Funktionen einfügen, um das gewünschte Layout zu erstellen. Zum Schluss – hier ist ein Beispiel-Screenshot der Beispielskizze bei der Arbeit.

Da haben Sie es also, eine weitere nützliche Möglichkeit, Ihr Arduino mit der Außenwelt interagieren zu lassen.

Empfohlen: