sitemap link mailform link home

Ethernet-Shield

Beitrag vom 2. August 2016

Während unserer Sommerschule Plus 2016 hat Tom, einer der zehn Teilnehmer, das folgende Projekt bearbeitet und eine funktionsfähige Demo-Applikation aufgebaut und (zum Teil) programmiert.

Die selbst gewählte Aufgabenstellung lautete:

Der Arduino Uno + Ethernet-Shield soll als Mini-Webserver konfiguriert werden und dann periodisch Messwerte eines Ulraschall-Entfernungssensors senden.

Diese Messwerte sollen auf einem PC oder Notebook im Browser dargestellt werden.

Hier nun die Original-Dokumentation von Tom:

Arduino als HTTP-Server mit dem W5500 Ethernet Shield V1.0

Ziel:
Sensordaten auf einer HTML-Website darstellen lassen.

Materialien:
W5500 Ethernet Shield V1.0
Ethernetkabel
Beispielhaft: Ultraschallsensor

Aufbau:
Der Ethernet Shield wird auf den Arduino gesteckt. Der benutzte Sensor wird an die Ports des Shields angesteckt. Dabei muss beachtet werden, dass die digitalen Pins 10, 11, 12 und 13 bereits durch den Ethernet Shield genutzt werden und somit nicht zur Nutzung mit Sensoren zur Verfügung stehen.

Funktionierender Arduino-Code:

ACHTUNG: Bei den #include fehlen noch die Namen der Bibliotheken! Das ist ein typisches HTML-Problem...


//importieren der Bibliotheken
#include
#include //Bibliotek muss heruntergeladen werden (https://github.com/adafruit/Ethernet2)

//Pins des Sensors
#define SENDER_PORT 5
#define EMPFAENGER_PORT 6

//Initialisierung einer Variable mit Gebrauch in der beispielhaften Messung des Ultraschallsensors
int time = 0;

/* Es kann hier eine beliebige MAC-Adresse angegeben werden, insofern sichergestellt ist, dass diese im Netzwerk noch nicht vorhanden ist. Dazu ist es sinnvoll sich diese im Internet generieren zu lassen (http://www.miniwebtool.com/mac-address-generator/) und diese dann auf einen bekannten Praefix von Elektronikherstellern zu ueberpruefen
(http://www.miniwebtool.com/mac-address-lookup/) */

byte mac[]{
0x9E, 0x14, 0x3E, 0x36, 0x56, 0x76
};

//Für die IP-Adresse gilt dasselbe wie fuer die MAC-Adresse
IPAddress ip(139, 30, 202, 243);

//Deklaration des Servers mit dem Port 80
EthernetServer server(80);

void setup() {
//Start des seriellen Monitors
Serial.begin(9600);
//warten auf den seriellen Monitor
while(!Serial){ };

//festlegen der Modi der Pins
pinMode(SENDER_PORT, OUTPUT);
pinMode(EMPFAENGER_PORT, INPUT);

//Start des Servers
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}

int distance() {
//Messung einer Distanz mit dem Ultraschallsensor
digitalWrite(SENDER_PORT, HIGH);
delayMicroseconds(10);
digitalWrite(SENDER_PORT, LOW);

time = pulseIn(EMPFAENGER_PORT, HIGH);
int vDistance = time / 58;

return(vDistance);
}

void loop() {
//auf Anfragen ueber das Netzwerk (clients) warten
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
//Eine HTTP-Anfrage endet mit einer leeren Zeilen
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
//Wenn das Ende der Zeile erreicht wurde (gekennzeichnet durch den Newline-Character „\n")
//und die nächste Zeile leer ist, ist die HTTP-Anfrage beendet und der Server antwortet
if (c == '\n' && currentLineIsBlank) {
//Es wird ein standart HTTP-Antwort header gesendet
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); //Die Verbindung wird nach Abschluss der Antwort beendet
client.println("Refresh: 5"); //Der Besucher der Website aktualisiert die Seite alle 5 Sekunden
client.println();
client.println("");
client.println("");
//Das eingerückte bestimmt, was auf der Website angezeigt wird
client.print("Distance: ");
//Die Funktion zum erlangen der Sensordaten wird aufgerufen
//und das Ergebnis wird in der Website angezeigt
client.println(distance());
client.println("
");
client.println("");
break;
}
if (c == '\n') {
//Es wird eine neue Zeile begonnen
currentLineIsBlank = true;
} else if (c != '\r') {
//In der aktuellen Zeile ist ein Character (Buchstabe/Zahl/...)
currentLineIsBlank = false;
}
}
}
//Dem Webbrowser wird Zeit zum empfangen der Daten gegeben
delay(10);

//Beendigung der Verbindung
client.stop();
Serial.println("client disconnected");
}
}

 

Wenn dieses Programm zum Laufen gebracht ist, kann über die IP-Adresse, welche im Programm angegeben ist, über einen Browser auf die Website zugegriffen werden.

Quellen / hilfreiche Internetseiten:
SenseBox Station:
https://github.com/sensebox/OER/wiki/08_Ethernet-Shield_und_OSeM
Ethernet2 Bibliothek:
https://github.com/adafruit/Ethernet2
MAC-Adressen Generator:
http://www.miniwebtool.com/mac-address-generator/
MAC-Adressen Prüfer:
http://www.miniwebtool.com/mac-address-lookup/

Unterstützt wurde Tom durch unseren Mitarbeiter Thomas Wegner.

.

Letzte Änderung:
March 23. 2023 21:04:40
«    top    »