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
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/
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?
hier ist ein gute Sucheseite für Arduino Libs: https://www.arduinolibraries.info/ Da gibt es reichlich Treffer für Timer.
Der Bibliotheksverwalter bietet z.B. "UniversalTimer" an. https://github.com/michaelgranz/UniversalTimer
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
> .. ohne mich darum in loop kümmern zu müssen.
Irgendwie wird das nichts mit Programmieren werden.
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
Rainer M. schrieb: > das mehrere (6) Sensoren innerhalb loop auswertet Warum diese Fixierung? Merke: loop() ist auch nur eine FreeRTOS Thread/Task Kein Problem weitere Tasks zu starten. FreeRTOS macht dir dann auch das Timing.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.