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!
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!
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
Klasse Arbeit die Du da leistest, Danke!
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
Wo kann man die libraries runterladen?
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.
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.
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
Hallo Eddi,
habe auch das Shield HanRun HR911105A.
Bei mir funktioniert das Prg problemlos, der Browser zeigt den richtigen Wert an.
MfG
Rainer
https://github.com/maximilianKoeper/ArduinoWebserver
Hallo Andi
Danke für deine Arbeit du hast mir sehr weitergeholfen um mein Glashaus zu steuern sowie zu überwachen
Reinhard
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?
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