Hallo liebe Forummitglieder,
ich bräuchte ein wenig Hilfe mit meinem ESP32. Ich habe vor meine LED´s mit diesem über Browseraufrufe zu steuern. Jetzt hat sich aber das Problem aufgetan, dass ich Effekte abspielen will, die einen loop benötigen, gleichzeitig soll der ESP aber auch auf neue Browseraufrufe reagieren können. Kennt da jemand eine gute Lösung?
Schau Dir BlinkWithoutDelay an und verstehe es. Dann kannst Du das Lösen. Kein delay, keine langen Schleifen, also nichts, was den loop blockiert.
Gruß Tommy
Kimosaj:
Kennt da jemand eine gute Lösung?
Die Lösung ist eigentlich so einfach wie genial, verzichte auf alles was blockiert!
Gruß Fips
Ich bin mir nicht sicher ob das alles so richtig ist.
Denn immerhin ist der ESP32 in der Regel ein DualCore µC.
Wenn man es erstlich nimmt so gar ein TripelCore.
Was dazu führt, dass mindestens 2 Codefäden gleichzeitig laufen können.
Auch trägt er FreeRTOS in sich.
Was dazu führt, dass jeder Thread eine Endlosschleife beinhalten darf, und delay() nach belieben benutzt werden kann ohne den Scheduler zu stören. (eher ganz im Gegenteil)
Was dazu führt, dass über ein Dutzend Codefäden quasi gleichzeitig laufen können.
Pack die Animation in eine eigene Tasks, delays sind kein Problem, die führen direkt zu Sleep und Taskswitch.
Deine Webserver Callbacks sollten problemlos eingeschleift werden.
Du arbeitest ja immerhin auf einem Dual Core System mit einem RTOS.
ESPAsyncWebServer kann das.
Der läuft asynchron und unabhängig vom loop()
Aber auf die installierte ESP32 Version in der IDE aufpassen !!!!!
Ich musste auch zurück auf esp32 1.0.2, weil sonst der EspAsyncWebServer den ganzen Speicher frisst.
Da ist noch irgendwo ein Bug drin (siehe GitHub).
Ich kenne keinen besseren Webserver für den ESP32. Das Teil ist voll der Hammer.
Danke für die vielen Rückmeldungen. Vor allem die letzten drei, die wirklich sehr geholfen haben.