ESP32 multiple Software Timer

OP #7731146
Lesenswert?

Ich habe ein Projekt, das mehrere (6) Sensoren innerhalb loop auswertet und bei erreichen eines Grenzwertes ein Gerät für einige Sekunden einschalten soll. Das Ausschalten soll im Hintergrund ausserhalb von loop geschehen. Ich weiß, dass es hier Bibliotheken gibt, habe so etwas ähnliches schon vor langer Zeit mit eine Arduino Nano realisiert. Brauche jetzt aber einen ESP wegen WiFi etc. Leider kann ich keine Bibliothek dazu finden.

Kann mir irgendwer bitte eine Link dazu geben.

Herzlichsten Dank im voraus.

Rainer

#7731154
Lesenswert?

Dafuer braucht man nicht mehrere timers, sondern 1 timer der zB jede 1msec ein counter erhoht. Beim Arduino heisst das millis(), ich denke der ESP hat da denke auch schon etwas standard eingebaut.

Beim Programmierung started man nicht jedes mal einen neuen timer, aber definiert man bei welche millis etwas passieren soll.

https://www.arduino.cc/reference/en/language/functions/time/millis/

Moderator (Firma: Titel) Persönliche Seite #7731158
Lesenswert?

Rainer M. schrieb:

Das Ausschalten soll im Hintergrund ausserhalb von loop geschehen.

Warum so umständlich?

Du kannst doch in der Mainloop (die ja sowieso dauernd schnellstmöglich durchlaufen werden soll) einfach abfragen, ob die Zeit schon um ist. Und wenn es so weit ist den Ausgang deaktivieren.

Oder wird deine Mainloop aus irgendwelchen Gründen nicht 50..1000 mal pro Sekunde durchlaufen?

OP #7731172
Lesenswert?

Sicher geht das auch in der Mainloop die oft genug durchlaufen wird, schon wegen OTA und millis verwende ich da schon für die Abfrage der Kanäle mit in einer 5 Sekunden Abfolge.

Was ich aber gerne möchte, ist dass ich nach dem Einschalten eine Funktion aufrufe die nach übergebener wieder ausschaltet ohne mich darum in loop kümmern zu müssen.

z.B. wie inzwischen gefunden https://github.com/espressif/arduino-esp32/blob/master/libraries/Ticker/examples/TickerBasic/TickerBasic.ino oder ähnlich. Muss mal sehen ob das passt.

Gruß

Rainer

#7733530
Lesenswert?

Mike R. schrieb:

Die notwendigen Librarys sind bei einem ESP32 doch schon mit dabei https://www.freertos.org/Documentation/02-Kernel/02-Kernel-features/05-Software-timers/01-Software-timers

Da sind sogar zwei Timer-"Libraries" dabei, die IDF-eigenen haben mehr Auflösung und hätten die Option, den Timer-Callback direkt im ISR-Kontext auszuführen.

https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/esp_timer.html

Die oben verlinkte "Ticker"-Arduino-Bibliothek nutzt die ESP-IDF-Timer.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren