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
  gaaaanz einfacher Webserver wonk 15 464 Heute 17:30
Letzter Beitrag: wonk
  Daten mitels Fetch Senden/Empfangen mat-sche 8 303 06.04.2021 18:53
Letzter Beitrag: mat-sche
  Webserver: Dateneingabe UND Datenausgabe wmauss 2 244 26.03.2021 20:19
Letzter Beitrag: wmauss
  ESP8266 Webserver nach Zeit nicht mehr verfügbar. ESPWolf 21 2.379 02.02.2021 17:54
Letzter Beitrag: Tommy56
  Wo MQTT LogIn Daten einfügen? Steinspiel 10 1.087 28.12.2020 14:32
Letzter Beitrag: Tommy56
  serieller Monitor verschluckt Daten wonk 20 2.055 02.12.2020 21:22
Letzter Beitrag: Tommy56
  Webserver HTPPS / HTTP wonk 0 510 23.11.2020 21:55
Letzter Beitrag: wonk
  WiFi Verbindung zu lokalem Webserver wonk 4 705 21.11.2020 13:55
Letzter Beitrag: wonk
  DHT11 Daten via MQTT an Raspi senden Hanibal_Smith 5 742 10.11.2020 16:24
Letzter Beitrag: biologist
  ESP8266: ADC und Webserver stw 19 4.753 23.09.2020 01:03
Letzter Beitrag: Bitklopfer

Gehe zu:


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