
Das Ethernet-Shield ist eine Platine, die einfach auf den Arduino aufgesteckt wird. Auf ihr befindet sich ein LAN-Anschluss (RJ45). Alle digitalen und analogen Anschlüsse stehen auch weiterhin zur Verfügung.
An zwei Beispielen sollen die Variablen und Funktionen der Bibliothek Ethernet erläutert werden.
Es wird eine Testseite erstellt und der von der Testseite gesendete Buchstabe angezeigt. Du musst die im Seriellen Monitor angezeigt IP in der Adresszeile des Browsers eingeben, anschließend fügst du ein / und den Buchstaben hinzu.
So sieht es aus:

Benötigte Bibliothek:

oder: Sketch -> Bibliothek einbinden -> Bibliotheken verwalten
Binde die Bibliothek ein und definiere die benötigten Variablen. Der "Schalter" festeIP entscheidet, ob eine IP über DHCP vergeben wird oder eine statische IP festgelegt wird.
Für die Vergabe eine festen IP kannst du die bereits belegten Adressen mit dem Programm arp herausfinden:
Windows:
Öffne zuerst eine Eingabeaufforderung.
Mit dem Befehl arp -a
kannst du die IP-Adressen und die MAC-Adressen aller in deinem Netzwerk vorhandenen Geräte herausfinden.


Auch Linux kennt den Befehl arp.
# include <Ethernet.h>
// MAC-Adresse und IP definieren
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
// festeIP = false -> IP-Adresse über DHCP vergeben
bool festeIP = true;
// feste IP
IPAddress ip(192, 168, 1, 200);
// Name des Servers vergeben
EthernetServer Server(80);
Der setup-Teil vergibt die IP, startet den Server und zeigt die vergebene IP an.

void setup()
{
// Ethernet starten feste IP
if (festeIP) Ethernet.begin(mac, ip);
// Ethernet starten DHCP
else Ethernet.begin(mac);
// Server starten
Server.begin();
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial) {;}
// zur Kontrolle IP-Adresse anzeigen
// localIP -> Adresse, die im Browser eingegeben wird
Serial.print(F("IP Adresse: "));
Serial.println(Ethernet.localIP());
}
Der loop-Teil. Beachte die Kommentare.
void loop()
{
String Auswertung = "";
// auf Klienten warten ...
EthernetClient client = Server.available();
// neue Anfrage
if (client)
{
// solange der client verbunden ist ...
while (client.connected())
{
if (client.available())
{
// Zeichen vom clienten lesen
char Zeichen = client.read();
// String "zusammenbauen"
// += ist die Kurzform von Auswertung = Auswertung + Zeichen;
Auswertung += Zeichen;
// \n = Seite vom clienten vollständig geladen
if (Zeichen == '\n')
{
// HTTP-Anforderung senden
client.println(F("HTTP/1.1 200 OK"));
client.println(F("Content-Type: text/html"));
// Leerzeile zwingend erforderlich
client.println();
/*
HTML-Seite aufbauen
die folgenden Anweisungen müssen
mit print oder println gesendet werden
println "verschönert" den Quelltext
(jede Anweisung in einer eigenen Zeile)
*/
client.println(F("<!doctype html>"));
client.println(F("<html>"));
client.println(F("<body>"));
client.println(F("<h1>Testseite</h1>"));
client.println(F("<b>Gelesenes Zeichen: </b>"));
client.println(Auswertung);
/*
ein Zeichen hinter der IP nach dem /
erzeugt eine GET-Anweisung in der Form
GET /a HTTP/1.1 -> a auswerten
GET /b HTTP/1.1 -> b auswerten
indexOf durchsucht den String nach diesen Zeichen
(> 0 = Zeichen gefunden)
*/
if (Auswertung.indexOf("a") > 0)
{
client.println(F("<hr>Der Buchstabe a wurde eingegeben!"));
}
if (Auswertung.indexOf("b") > 0)
{
client.println(F("<hr>Der Buchstabe b wurde eingegeben!"));
}
// IPs anzeigen
client.print(F("<hr><b>Eigene IP: "));
client.print(client.remoteIP());
client.println(F("<br>"));
client.println(F("IP des Ethernet-Shields: "));
client.print(Ethernet.localIP());
client.println(F("</b>"));
client.println(F("</body>"));
client.println(F("</html>"));
// Zeit, um die Antwort zu übertragen
delay(1);
// Verbindung beenden
client.stop();
}
}
}
}
}
Buttons können auf die gleiche Weise ausgewertet werden:

# include <Ethernet.h>
// MAC-Adresse und IP definieren
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
// festeIP = false -> IP-Adresse über DHCP vergeben
bool festeIP = true;
// feste IP
IPAddress ip(192, 168, 1, 200);
// Name des Servers vergeben
EthernetServer Server(80);
void setup()
{
// Ethernet starten feste IP
if (festeIP) Ethernet.begin(mac, ip);
// Ethernet starten DHCP
else Ethernet.begin(mac);
// Server starten
Server.begin();
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial) {;}
// zur Kontrolle IP-Adresse anzeigen
// localIP -> Adresse, die im Browser eingegeben wird
Serial.print(F("IP des Ethernet-Shields: "));
Serial.println(Ethernet.localIP());
}
void loop()
{
String Auswertung = "";
// auf Klienten warten ...
EthernetClient client = Server.available();
// neue Anfrage
if (client)
{
// solange der client verbunden ist ...
while (client.connected())
{
if (client.available())
{
// Zeichen vom clienten lesen
char Zeichen = client.read();
Auswertung += Zeichen;
// entspricht:
// Auswertung = Auswertung + Zeichen;
// \n = Seite vom clienten vollständig geladen
if (Zeichen == '\n')
{
// HTTP-Anforderung senden
client.println(F("HTTP/1.1 200 OK"));
client.println(F("Content-Type: text/html"));
// Leerzeile zwingend erforderlich
client.println();
/*
HTML-Seite aufbauen
die folgenden Anweisungen müssen
mit print oder println gesendet werden
println "verschönert" den Quelltext
(jede Anweisung in einer eigenen Zeile)
*/
client.println(F("<!doctype html>"));
client.println(F("<html>"));
client.println(F("<body>"));
client.println(F("<h1>Testseite mit Buttons</h1>"));
// Button rot
client.print(F("<input style='background-color:red;cursor:pointer'"));
client.print(F(" border-radius:5px;border: 2px solid black;' type='button'"));
client.print(F(" type='button'"));
client.println(F(" onClick=\"location.href='rot'\""));
client.println(F(" value='rot'>"));
// Button gelb
client.print(F("<input style='background-color:yellow;cursor:pointer'"));
client.print(F(" border-radius:5px;border: 2px solid black;'"));
client.print(F(" type='button'"));
client.println(F(" onClick=\"location.href='gelb'\""));
client.println(F(" value='gelb'>"));
// Button grün
client.print(F("<input type='button' style='background-color:#92F099;cursor:pointer'"));
client.print(F(" border-radius:5px;border: 2px solid black;'"));
client.print(F(" type='button'"));
client.println(F(" onClick=\"location.href='gruen'\""));
client.println(F(" value='grün'>"));
client.println(F("<br><hr>"));
client.println(F("<b>Gelesenes Zeichen: </b>"));
client.println(Auswertung);
/*
ein Zeichen hinter der IP nach dem /
erzeugt eine GET-Anweisung in der Form
GET /grau HTTP/1.1 -> Button grau auswerten
GET /gelb HTTP/1.1 -> Button gelb auswerten
indexOf durchsucht den String nach diesen Zeichen (> 0 = Zeichen gefunden)
*/
if (Auswertung.indexOf("rot") > 0)
{
client.println(F("<hr>Der Button rot wurde gedrückt!"));
}
if (Auswertung.indexOf("gelb") > 0)
{
client.println(F("<hr>Der Button gelb wurde gedrückt!"));
}
if (Auswertung.indexOf("gruen") > 0)
{
client.println(F("<hr>Der Button grün wurde gedrückt!"));
}
// IPs anzeigen
client.print(F("<hr><b>Eigene IP: "));
client.print(client.remoteIP());
client.println(F("<br>"));
client.println(F("IP des Ethernet-Shields: "));
client.print(Ethernet.localIP());
client.println(F("</b>"));
client.println(F("</body>"));
client.println(F("</html>"));
// Zeit, um die Antwort zu übertragen
delay(1);
// Verbindung beenden
client.stop();
}
}
}
}
}
Letzte Aktualisierung: