ESp32 Dev Modul maximale Baud

Hallo,

mein Programm nimmt endlich Form an, nur ist es mir jetzt noch zu langsam. Mich würden alle Tipps zur Beschleunigung sehr interessieren! Dazu hier das Prog: // Based on this library example: https://github.com/tobiasschuerg/InfluxDB-Clie - Pastebin.com Ich sende meine Daten an eine InfluxDB, ev wäre es geschickter die Daten alle 1 min an die Datenbank zu senden, oder von einem ESP auf einen anderen (per BLE) und von diesem dann an die Datenbank. Für derartige Tipps wäre ich auch sehr dankbar! Jetzt geht es mir allerdings erstmal um die maximale Geschwindigkleit des ESP32 Dev. Kann da jemand behilflich sein? Soweit ich das richtig verstanden habe muss ich zuerst UART aktivieren? Und die Arduino IDE ist glaub ich begrenzt? (Visual Studio auch?)

LG

Die maximale Baudrate der UARTs ist 5000000 Baud.

Pastebin Dinger stecke ich mir nicht in den Mund.

Also frage ich dich:
Nutzt du den 2ten Core?
Takt hochgesetzt?

Gut, das ist eine Antwort!
Aber was ist die zugehörige Frage?

Was genau ist denn "zu langsam" ?
Was hat Daten in eine DB speichern mit einer seriellen Schnittstelle zu tun?

Hallo,
das halte ich für Unsinn. Wichtig ist doch jetzt erst mal heraus zu bekommen was Dir zu langsam ist und an was das dann liegen kann. Sicher nicht an der Seriellen Ausgabe in dem Sketch aus dem Link
Ich kann mir auch vorstellen das Cloud basierte Systeme von hause aus nicht besonders schnell sind. Aber was ist schnell ??

Welche Messraten strebst Du denn an ?

Heinz

Hallo @all!

Ich hab mich noch nicht genauer eingelesen wie ich den Sketch umschreiben muss, damit er maximal schnell abgearbeitet wird. Bin die ganze Zeit bei dem Ermitteln der Peak Werte gehangen. Vermutlich muss ich jetzt erstmal den Takt maximal erhöhen und den 2ten Kern aktivieren? Ich suche gleich dazu. Am Ende soll so eine Kurve rauskommen:

image

Mein Signal sieht aber abgehakt aus, das scheint aber am Takt zu liegen, da ich nun einmal den Serial Plotter ausgelesen habe.

Hallo
@ESCHICK schön das Du uns die Kurve zeigst , aber was steht an der x Achse Monate, Tage , Sekunden ?Welche Abtastrate soll das denn werden, d.h welche Zeit zwischen zwei Messwerten , Messrate strebst Du an.
man sollte Fragen auch beantworten , sonst gibt es schnell komische Antworten :wink:

Heinz

Das ist eine Pulswelle. Der Puls liegt ja in der Regel so bei 80 "Wellen" pro Minute (bei 20 Werte pro Welle währen das grob überschlagen 160 Werte pro 60 Sek). Ich würde es zunächst gerne mit der maximal möglichen Geschwindigkeit versuchen, die über den ESP32 möglich ist.

Hallo,
also 60s/160 macht etwa 370ms. Das ist für den ESP noch keine Herausforderung. Da kannst Du schon jeden Messwert seriell ausgeben aber nicht nicht in der Cloud abspeichern.

Also wenn Du eine für die Serielle 115200 einstellst dann sind das etwa 11000 Zeichen/s . Bezogen auf Deine 370ms kannst Du sicher 50% für die Serielle opfern damit bekommst Du 5000 Zeichen raus ohne das da ein Engpass entsteht. Gib doch mal nur den Messwert auf die Serielle aus und nutze den Plotter in der IDE , lass den ganzen cloud Kram erst mal weg , denn da ist Dein Problem das bekommst Du nicht schneller.

Heinz

1 Like

Hallo Heinz,

besten Dank! Das hatte ich auch vermutet und du hast ganz recht, wenn ich den ESP über den Plotter auslese, dann ist das Signal okay. (Nicht optimal, aber das liegt ev noch an dem Signal selbst, mir scheint meine Lösung mit dem Peak min / max war nicht optimal).

Ich versuche jetzt mal das Signal sauber zu filtern und habe mir dazu folgende Filter rausgesucht:

//Zuerst würde ich mal den DC Wert abziehen (ich habe ein DC Signal das auf dem meinem AC draufliegt)//

struct fifo_t {
  uint16_t rawIR;
  uint16_t rawRed;
};
dcFilter_t MAX30100::dcRemoval(float x, float prev_w, float alpha)
{
  dcFilter_t filtered;
  filtered.w = x + alpha * prev_w;
  filtered.result = filtered.w - prev_w;

  return filtered;
}

Da muss ich noch herausfinden, wie ich den in meinen Sketch implementiere, ich würde auch gerne den gefilterten Wert in einer eigene Variablen speichern (als AC Wert und den gefilterten DC Wert als DC, die beiden Werte brauche ich später um was zu berechnen). Ich hoffe ich frag hier nicht zuviel im Forum. :slight_smile:

Das mit dem direkten Senden an die InfluxDB scheint so nicht zu klappen, wie du auch angeführt hast (ich habe das leider schon vermutet), als Lösung denke ich daran den ESP mit dem PC oder Handy (oder Rasperry) zu verbinden und von dort dann die Daten weiter an die Cloud zu schicken, ev macht es Sinn die Wellenwerte für 1 Sekunde (oder mehr) zu sammeln und an die Datenbank gesammelt zu schicken, wobei ich da glaube ich eine MySQL oä brauche, da die Influx DB ja mWn nach einen Zeitstempel auf die Daten packt, das wird wohl mit gesammelten Werten nicht gehen?).

Erstmal einen Schritt nach dem anderen, ich versuche jetzt mal den Filter zu verstehen und zu implementieren. Ein gutes Tut habe ich hier gefunden: Implementing pulse oximeter using MAX30100 - MORF - Coding And Engineering

Beste Grüße

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.