Hallo, ich würde gerne Sonardaten am Webserver anzeigen, die Daten sollen über das Ethernetshield übertragen werden.
Gruß Uwe
Hallo Uwe
Wie schauen die Sonardaten denn aus?
Wie willst Du die Daten anzeigen? Tabelle? Grafik?
Normalerweise liefert ein Webserver nur Daten/Files an Clients aus.
Kann ein Client/ Browser die Daten anzeigen??
Grüße Uwe
Und was genau ist deine Frage ?
Dann ist das Beispiel
Ethernet / WebClientRepeating
eigentlich genau das, nach dem du vorgehen solltest.
Welche Frage ergibt sich daraus?
Hallo Uwe, die Sonardaten messen einen Abstand zwischen 0 bis 50cm diese Daten würde ich gerne auf einer Webseite in einem Feld oder auch Tabelle als Zahl anzeigen.
Oder anders ausgedrückt, anstatt die Sonardaten im Serieller Monitor auf dem Webserver anzuzeigen.
Gruß Uwe
Die Frage ist, wie übertrage ich die Daten welche ich im Seriellen Monitor angezeigt bekomme, nun auf einem WebServer bekomme ?
Gruß Uwe
Was läuft denn auf dem webserver?
Nur HTML?
Grüße Uwe
Und warum zeigst du uns nicht einfach deinen Sketch ?
Dann sehen wir evtl. woran es hakt.
Sketch bitte in Code-Tags hier einfügen. Dazu den Sketch mit rechter Maustaste aus der IDE für das Forum kopieren.
Hi ich habe nur den Sketch ohne WebServer, das ist ja mein Problem das ich anstatt LEDs anzusteuern die Information an den WebServer senden möchte.
Hier der Sketch:
######################
int trigger=12;int echo=13;long dauer=0;long entfernung=0;int red=6;
void setup()
{Serial.begin (9600);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
pinMode(red, OUTPUT);
void loop()
{digitalWrite(trigger, LOW);delay(5);digitalWrite(trigger, HIGH);delay(10);digitalWrite(trigger, LOW);dauer = pulseIn(echo, HIGH);entfernung = (dauer/2) / 29.1;
else{Serial.print(entfernung);Serial.println(" cm");
}
if (entfernung <= 0){digitalWrite(red,LOW);}else{digitalWrite(red,HIGH);}
if (entfernung <= 50){digitalWrite(red,HIGH);}else{digitalWrite(red,LOW);}
delay(1000);}
#################
Gruß Uwe
Für den Webserver (welcher überhaupt ?) gibt es sicher genug Beispiele, die sogar in der IDE. Das Beispiel brauchst du doch nur für deine Bedürfnisse anpassen.
Hallo
ich vermute mal Du unterliegst einem Denkfehler.
Dein Arduino soll den Abstand messen und den auf einer Webseite anzeigen. Dann sollte der Arduino auch der Webserver sein. Über seine IP Adresse kannst Du Ihn dann mit einem normalen Brauser auf dem PC oder Handy ansprechen und er antwortet mit dem Inhalt der HTML Seite. Der Arduino ist dabei Server , denn er stellt einen "Service" zur Verfügung , und der PC Brauser ist der Client, der fordert die Webseite an.
Such Dir ein einfaches Beispiel , am besten aus der IDE, und teste das. Meist wird da eine Webseite angezeigt die "Hallo Welt" oder so etwas ähnliches auf dem Brauser anzeigt. Das kannst Du dann recht einfach anpassen und mit Deinem Messwert ersetzen.
Allerdings wirst Du das delay(1000) rausnehmen und durch ein Konstrukt mit millis() ersetzen müssen. Die beiden andren delay() zur Erzeugung des Trigger Signals, können vermutlich erst mal drin bleiben.
Hallo Zusammen, ich habe nun mal hier meinen Sketch, das Problem ist das ich die Sonardaten nicht auf die Website bekommen, der Headliner Uwe Test 28.09.2023 wird angezeigt aber nicht meine Abstandswerte.
/*
Web Server + Sonar Sensor
*/
#include <SPI.h>
#include <Ethernet.h>
#define PIN_TRIGGER 12
#define PIN_ECHO 13
const int SENSOR_MAX_RANGE = 300; // in cm
unsigned long duration;
unsigned int distance;
// Gib die 6 (hexadezimalen) Zahlen der Mac-Adresse Deines Ethernet-Shields ein:
byte mac[] = {0xA8, 0x61, 0x0A, 0xAE, 0xBB, 0x80 };
// IP-Adresse:
IPAddress ip(10,0,0,70);
// Port:
EthernetServer server(80);
void setup() {
// Seriellen Monitor
{
Serial.begin(9600);
pinMode(PIN_TRIGGER, OUTPUT);
pinMode(PIN_ECHO, INPUT);
// while (!Serial) {
; // warte
}
// starte Ethernet Verbindung und Server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("Server an IP: ");
Serial.println(Ethernet.localIP());
}
void loop() {
// horchen auf Clients:
EthernetClient client = server.available();
if (client) {
Serial.println("neuer Client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// ein meta refresh tag, refresht den browser alle 5 Sekunden:
client.println("<meta http-equiv=\"refresh\" content=\"5\">");
client.print("<font face=\"Arial\"><h1>UWE's Arduino Webserver!</h1><br>");
// Ausgabe der Sonar Werte:
{
digitalWrite(PIN_TRIGGER, LOW);
delayMicroseconds(2);
digitalWrite(PIN_TRIGGER, HIGH);
delayMicroseconds(10);
duration = pulseIn(PIN_ECHO, HIGH);
distance = duration/58;
if (distance > SENSOR_MAX_RANGE || distance <= 0){
Client.println("Out of sensor range!");
} else {
Client.println("Distance to object: " + String(distance) + " cm");
}
}
client.print("<br><br>Uwe Test 28.09.2023 ");
client.println("</font>");
client.println("</html>");
break;
}
if (c == '\n') {
currentLineIsBlank = true;
}
else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(1000);
// gib dem Browser Zeit, Daten zu empfangen:
delay(5);
// Schließe die Verbindung:
client.stop();
Serial.println("Verbindung geschlossen.");
}
}
**Hier ist der Error:**
C:\Users\Zuhause\Documents\Arduino Projekte\Uwe_ethernetshield2_und_Sonar\Uwe_ethernetshield2_und_Sonar.ino:84:11: error: expected unqualified-id before '.' token
Client.print("Out of sensor range!");
^
C:\Users\Zuhause\Documents\Arduino Projekte\Uwe_ethernetshield2_und_Sonar\Uwe_ethernetshield2_und_Sonar.ino:86:11: error: expected unqualified-id before '.' token
Client.print("Distance to object: " + String(distance) + " cm");
^
exit status 1
Compilation error: expected unqualified-id before '.' token
Gruß Uwe
strg-t drücken und den Sketch formatieren!
Groß-Kleinschreibung beachten.
client.print ... nicht Client.print ...
sagt auch der Kompiler. Und der hat immer recht.
Hi, OK Augen auf dann klappt es manchmal bei Kleinigkeiten, Danke.
Aber weshalb werden keine Werte vom Sensor ausgegeben, das Ergebnis ist immer "Out of sensor range!" also an dieser Stelle:
client.println("Out of sensor range!");
/*
Web Server + Sonar Sensor
*/
#include <SPI.h>
#include <Ethernet.h>
#define PIN_TRIGGER 12
#define PIN_ECHO 13
const int SENSOR_MAX_RANGE = 300; // in cm
unsigned long duration;
unsigned int distance;
// Gib die 6 (hexadezimalen) Zahlen der Mac-Adresse Deines Ethernet-Shields ein:
byte mac[] = { 0xA8, 0x61, 0x0A, 0xAE, 0xBB, 0x80 };
// IP-Adresse:
IPAddress ip(10, 0, 0, 70);
// Port:
EthernetServer server(80);
void setup() {
// Seriellen Monitor
{
Serial.begin(9600);
pinMode(PIN_TRIGGER, OUTPUT);
pinMode(PIN_ECHO, INPUT);
// while (!Serial) {
; // warte
}
// starte Ethernet Verbindung und Server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("Server an IP: ");
Serial.println(Ethernet.localIP());
}
void loop() {
// horchen auf Clients:
EthernetClient client = server.available();
if (client) {
Serial.println("neuer Client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// ein meta refresh tag, refresht den browser alle 5 Sekunden:
// client.println("<meta http-equiv=\"refresh\" content=\"5\">");
//client.print("<font face=\"Arial\"><h1>UWE's Arduino Webserver!</h1><br>");
digitalWrite(PIN_TRIGGER, LOW);
delayMicroseconds(2);
digitalWrite(PIN_TRIGGER, HIGH);
delayMicroseconds(10);
duration = pulseIn(PIN_ECHO, HIGH);
distance = duration / 58;
if (distance > SENSOR_MAX_RANGE || distance <= 0) {
client.println("Out of sensor range!");
} else {
client.println("Distance to object: " + String(distance) + " cm");
}
delay(3000);
client.print("<br><br>Uwe Test 29.09.2023 ");
client.print("Verbindung geschlossen.");
client.println("</font>");
client.println("</html>");
}
if (c == '\n') {
currentLineIsBlank = true;
} else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
// gib dem Browser Zeit, Daten zu empfangen:
delay(5);
// Schließe die Verbindung:
client.stop();
Serial.println("Verbindung geschlossen.");
}
}
Bau dir doch par Serial.print rein dann seihst du wo klemmt

Du musst andere Pins nutzen
versuche mal:
int trigger=7;
int echo=6;
Versuche mal:
/* Web Server + Sonar Sensor */
#include <SPI.h>
#include <Ethernet.h>
#define PIN_TRIGGER 6
#define PIN_ECHO 7
const int SENSOR_MAX_RANGE = 300; // in cm
unsigned long duration;
unsigned int distance;
// Gib die 6 (hexadezimalen) Zahlen der Mac-Adresse Deines Ethernet-Shields ein:
byte mac[] = { 0xA8, 0x61, 0x0A, 0xAE, 0xBB, 0x80 };
// IP-Adresse:
IPAddress ip(10, 0, 0, 70);
// Port:
EthernetServer server(80);
void setup() {
Serial.begin(9600);
pinMode(PIN_TRIGGER, OUTPUT);
pinMode(PIN_ECHO, INPUT);
// starte Ethernet Verbindung und Server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("Server an IP: ");
Serial.println(Ethernet.localIP());
}
void loop() {
// horchen auf Clients:
EthernetClient client = server.available();
if (client) {
Serial.println("neuer Client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
digitalWrite(PIN_TRIGGER, LOW);
delayMicroseconds(2);
digitalWrite(PIN_TRIGGER, HIGH);
delayMicroseconds(10);
duration = pulseIn(PIN_ECHO, HIGH);
Serial.println(duration);
distance = duration / 58;
if (distance > SENSOR_MAX_RANGE || distance <= 0) {
client.println("Out of sensor range!");
} else {
client.println("Distance to object: " + String(distance) + " cm");
}
client.print("<br><br>Uwe Test 29.09.2023 ");
client.print("Verbindung geschlossen.");
client.println("</font>");
client.println("</html>");
}
if (c == '\n') {
currentLineIsBlank = true;
} else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
// gib dem Browser Zeit, Daten zu empfangen:
delay(50);
// Schließe die Verbindung:
client.stop();
Serial.println("Verbindung geschlossen.");
}
}
Oder vor der 12 D setzen =D12, wobei ist besser GPIO Nr verwenden
ja das hat geklappt, nun werden die Werte angezeigt.
Immer GPIO nutzen nicht D Nr. ![]()
OK guter Tipp, jetzt muß ich noch schauen das der Browser sich selbst aktualisiert.