INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Daten auf webserver printen
13.12.2020, 13:21 (Dieser Beitrag wurde zuletzt bearbeitet: 13.12.2020 16:52 von Andreas-ESP32-Beginner.)
Beitrag #1
Daten auf webserver printen
Hallo,

ich hoffe ihr könnt mir weiterhelfen

ich will die Signale die mein ESP aufnimmt auf einem Webserver permanent ausgeben lassen.

Ausgegeben werden
Zeit-----Anzahl der Signale
wenn die Signale auf LOW stehen wird nichts ausgeben.

so sieht es aktuell aus (muss die Seite neu laden für neue Daten)
KreiselZeit KreiselUmdrehung PraezessionsZeit PraezessionUmdrehung
286 851 2566 114


so will ich es haben
KreiselZeit KreiselUmdrehung PraezessionsZeit PraezessionUmdrehung
286 851 2566 114
286 852 2566 114
286 853 2566 114
286 854 2565 115
286 855 2566 115
286 856 2566 115



Danke im voraus für eure Hilfe

Gruß
Andreas

anbei das Programm:


Code:
///////////////////////////////////////////////// Webserver Anfang
#include <WiFi.h>
const char* ssid = "Takeyourown";
const char* password = "takeyourown";
WiFiServer server(80);

// Variable to store the HTTP request
String header;


// Current time
unsigned long currentTime = millis();
// Previous time
unsigned long previousTime = 0;
// Define timeout time in milliseconds (example: 2000ms = 2s)
const long timeoutTime = 2000;
//////////////////////////////////////////////////// Webserver ENDE


///////////////////////////////////////////// Datenaufnahme vom Sensorsignal
#define kreisel 2
#define praezession 3

bool daten = false;
bool connection = false;
int i = 0;
int countkr = 0;
unsigned long timekr = millis();
unsigned long difftimekr = millis();
unsigned long timekrprev = millis();
int countpr = 0;
unsigned long timepr = millis();
unsigned long difftimepr = millis();
unsigned long timeprprev = millis();
bool serveron = false;
void isrkr() {
countkr = countkr + 1;
timekr = millis();
difftimekr = timekr - timekrprev;
timekrprev = timekr;
daten = true;
}

void isrpr() {

countpr = countpr + 1;
timepr = millis();
difftimepr = timepr - timeprprev;
timeprprev = timepr;
daten = true;
}



/*void daten() {
client.print(difftimekr);
client.print(" ");
client.print(countkr);
client.print(" ");
client.print(difftimepr);
client.print(" ");
client.println(countpr);
}*/
////////////////////////////////////////// Datenaufnahme vom Sensorsignal Ende





void setup() {
Serial.begin(115200);
///////////////////////////////////////////////Zeiten für Sensorsignal
timekrprev = millis();
timeprprev = millis();
attachInterrupt(2, isrkr, RISING);
attachInterrupt(4, isrpr, RISING);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
////////////////////////////////////////////////Sensorsignal Ende


// Connect to Wi-Fi network with SSID and password
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Print local IP address and start web server
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
/*WiFiClient client = server.available();
client.print("KreiselZeit");
client.print(" ");
client.print("KreiselUmdrehung");
client.print(" ");
client.print("PraezessionsZeit");
client.print(" ");
client.println("PraezessionUmdrehung");*/
}

void loop() {
WiFiClient client = server.available(); // Listen for incoming clients
client.print("KreiselZeit");
client.print(" ");
client.print("KreiselUmdrehung");
client.print(" ");
client.print("PraezessionsZeit");
client.print(" ");
client.println("PraezessionUmdrehung");
serveron = true;
//////////////////////////////der Fehler scheint hier zu liegen.....
if (client.connected() && serveron == true && daten == true)
{
/*server.available();
client.read();*/
client.print(difftimekr);
client.print(" ");
client.print(countkr);
client.print(" ");
client.print(difftimepr);
client.print(" ");
client.println(countpr);
Serial.print(difftimekr);
Serial.print(" ");
Serial.print(countkr);
Serial.print(" ");
Serial.print(difftimepr);
Serial.print(" ");
Serial.println(countpr);
daten = false;
}
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.12.2020, 13:38
Beitrag #2
RE: Daten auf webserver printen
Stelle Deinen Sketch bitte in Codetags.
Wie das geht, steht hier.
Das kannst Du auch noch nachträglich ändern.

Sehe ich das richtig, dass vom Webserver auf dem ESP immer nur eine Zeile mit den 4 Werten geliefert wird und Du sie untereinander in der Website darstellen willst?

Soll das ewig so weiter gehen oder willst Du nach einer definierten Anzahl die ältesten Werte entfernen?

Da musst Du auf dem ESP fast nichts ändern, da die Arbeit grundlegend im Browser erfolgt. Du holst Dir die neue Wertezeile mit der Fetch-API, spaltest sie auf in die 4 Werte und fügst mit Javascript eine neue Zeile in den Dombaum ein.

Beispiele für die Fetch-API findest Du bei Fips, Für Javascript empfehle ich Selfhtml.org und w3schools.com. Suche mal als Einstieg nach appendChild / insertBefore.
Das wäre der effektivste Weg.

Du kannst natürlich auch auf dem ESP alles in ein Array packen und die Seite immer wieder komplett ausliefern. Das wäre der uneffektiverere Weg, er erfordert aber nur Kenntnisse in C++ und nicht zusätzlich tiefere Kenntnisse in JavaScript/CSS/HTML.

Die Entscheidung, welchen Weg Du gehen willst, musst Du gleich am Anfang treffen, da ein Wechsel fast eine Neuentwicklung bedeutet.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.12.2020, 17:00 (Dieser Beitrag wurde zuletzt bearbeitet: 13.12.2020 17:15 von Andreas-ESP32-Beginner.)
Beitrag #3
RE: Daten auf webserver printen
Signal 1 kommt ca alle 50-120ms
Signal 2 kommt ca. alle 2500ms bis 4500ms
diese Werte werden in einer Zeile ausgegeben und anschließend folgt auf die Zeile eine neue Zeile (mit neuen Signal werten) die aber nicht verschwinden sollen.
Es soll also ewig so weiter gehen, bis am ende keine Signale mehr kommen, deswegen auch ein interrupt.
^

anbei in Bild, das was ich seriellen Monitor dargestellt wird, soll auch auf dem webserver dargestellt werden.


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.12.2020, 17:18
Beitrag #4
RE: Daten auf webserver printen
(13.12.2020 17:00)Andreas-ESP32-Beginner schrieb:  Signal 1 kommt ca alle 50-120ms
Signal 2 kommt ca. alle 2500ms bis 4500ms
diese Werte werden in einer Zeile ausgegeben und anschließend folgt auf die Zeile eine neue Zeile (mit neuen Signal werten) die aber nicht verschwinden sollen.
Es soll also ewig so weiter gehen, bis am ende keine Signale mehr kommen, deswegen auch ein interrupt.
Du meinst, im Abstand von 50 ms kannst Du eine Website bespaßen? Dann wirst Du sehr effektiv programmieren lernen müssen. Da hilft Dir auch kein Interrupt.

Nur mal den ungünstigsten Fall angenommen:

50 ms und 4500 ms --> 90 Zeilen in 4,5 Sekunden, bei denen der Wert von Signal 2 konstant bleibt und sich der Wert von Signal 1 ändert. Wer soll das im Browser lesen können?
Beim anderen Extrem sind es immer noch 20 Zeilen in 2,5 Sekunden.

Bei so kurzen Zeiten wird nicht der Browser pollen können, sondern Du wirst über Websocket von Server pushen müssen. Das ist nicht ohne in diesen Zeitfenstern.

Ich halte die Vorgaben für illusorisch.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.12.2020, 17:21
Beitrag #5
RE: Daten auf webserver printen
Soll denn die Webseite persistent sein? D.h., wenn sich ein neuer Client verbindet: soll der erneut alle Daten zu sehen bekommen, oder nur die, die ab dem Verbinden entstehen?
Wenn ersteres, bleibt Dir nichts anderes, als die Daten auf dem ESP lokal in einem Array zu speichern und einem Client eine komplette Seite auszuliefern.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Daten maskieren und zum String zusammensetzen mat-sche 2 259 23.07.2021 08:11
Letzter Beitrag: mat-sche
  Daten zwischen 2 esp (Client-Server) mat-sche 8 662 16.07.2021 21:47
Letzter Beitrag: nbk83
  8266 Webserver-Verbindung instabil wonk 9 1.304 06.06.2021 08:52
Letzter Beitrag: wonk
  Webserver am Smartphone wonk 2 622 14.05.2021 20:56
Letzter Beitrag: wonk
  Wemos d1 Ph Sonde - Hilfe bei Daten per MQTT senden SoerenKaiser99 23 2.553 10.05.2021 21:25
Letzter Beitrag: SoerenKaiser99
  Client(ESP8266) und Webserver(ESP32) Dahabcon 14 1.974 25.04.2021 20:32
Letzter Beitrag: Tommy56
  ESP32 Daten aus HTML Roger100499 11 1.509 15.04.2021 15:00
Letzter Beitrag: Tommy56
  ESP8266 SPIFF Daten schreiben und zeilenweise lesen? foto2004 10 1.360 15.04.2021 14:26
Letzter Beitrag: hotsystems
  gaaaanz einfacher Webserver wonk 17 2.295 12.04.2021 20:07
Letzter Beitrag: rev.antun
  Daten mitels Fetch Senden/Empfangen mat-sche 8 1.281 06.04.2021 18:53
Letzter Beitrag: mat-sche

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste