Aktueller Stand ESP32-Arduino 2

Nee hab ich dann nicht mehr gemacht. Was auf jeden Fall zu Schwankungen führt, ist ein „Delay“ im Async-Webserver. Wir füllen den RingBuffer ja mit bis 1000ms delay (falls der RingBuffer nicht frei ist). Sobald dort zu lange gewartet wird, fangen die Schwankungen an, Der Async-Webserver fängt dann scheinbar an dem Sender mitzuteilen, dass er die Daten langsamer senden soll. Macht ja auch Sinn. Ich habe versucht einen Kompromiss zu finden um den Async-Webserver nicht zu blockieren. Das kann aber stark abweisen in anderen (WLAN-)Umgebungen.

Denke ich auch.

Also es scheint wohl durch Verkleinern der i2c-PullUps deutlich besser zu werden. Ich habe zu den beiden 4.7k direkt am PE zusätzlich hinten am externen i2c-Konnektor nochmal je 10k dazugelötet, was dann rechnerisch als Parallelschaltung 3.2k bedeutet. Dann habe ich ein File abgespielt, welches etwa 74min lang war. Da hatte ich zwischendrin mal ein Event nach 17min.

Passieren tut dann Folgendes:
Normalerweise ist Port 0 auf 255 und Port 1 auf 127. In diesem Falle springt Port 0 auf 70, was Folgendes bedeutet:

100: 0 => Prev-Button gedrückt
101: 1 => unverändert
102: 1 => unverändert
103: 0 => RE-Enc-Button gedrückt
104: 0 => Button_4 gedrückt
105: 0 => Button_5 gedrückt
106: 1 => unverändert (da hängt aber auch nix dran)
107: 0 => HP_DETECT Kopfhörer eingesteckt

Das führt dann dazu, dass Port 1 sich von 127 auf 126 ändert, da der Kopfhörer deaktiviert wird (108 geht von 1 auf 0).
Das passt dann insgesamt zu meiner Vermutung, dass mehrere Buttons gedrückt werden und zudem kurz der Kopfhörer „erkannt“ wird.

Ich werde es mal testen, in dem ich 4,7k dazulöte, so dass sich 2,35k insgesamt ergeben. Ansonsten mal schauen, ob man das vielleicht auch sinnvoll debouncen kann, so dass einzelne Ausreißer nichts „anrichten“.

Bei mir läuft es häufig mehrere 10 min ohne Event. Ist glaub wirklich nicht direkt Hardware sondern irgendwas anderes noch…

Ich habe als Workaround mal einen rudimentären Debounce eingefügt, der einzelne Events „übersieht“. Der greift nach 10s Uptime.

Zum Test muss der aktuelle Code von Port_ExpanderHandler() durch mein Code-Snippet ersetzt werden. Bei mir lokal funktioniert das. D.h. statt „Ghost-Events“ sieht man jetzt nur noch „Verify set!“ im Logging.

Vielleicht können das mal 2-3 Leute verifizieren, die vorher von dem Problem betroffen waren.

1 „Gefällt mir“

Ich habe seit Arduino >1.0.6 Probleme und leider bin ich wahrscheinlich der Einzige auf der Welt. Das liegt an dem auf meinen Boards verwendetem ON/OFF-Controller LTC2954-1. Trotzdem müßte es eigentlich bei allen Boards passieren nur merkt man es nicht.
Zur Erklärung:
Mit dem LTC2954-1 schalte ich den LDO Ein/Aus.

Das geschieht mittels ROTARYENCODER_Button auf Pin PB des LTC2954-1. Die Ansprechzeiten sind mittels Kondensatoren einstellbar.
Zum Einschalten muss man den Button ca. 0,5 Sek. festhalten, zum Ausschalten ca. 4,5 Sek. Das Ausschalten funktioniert normalerweise durch Software mit GPIO POWER auf Pin KILL des LTC2954-1. Sollte der ESP mal „hängen“ kann man dann trotzdem durch langes betätigen des ROTARYENCODER_Button das Board Zwangsausschalten. Das hat alles bis vor etwa einem Jahr perfekt funktioniert.
Mit irgendeiner SW-Version hat mein Board nicht mehr gebootet. Das lag daran weil auf GPIO POWER beim Einschalten nach ca. 2 Sekunden ein LOW-Impuls auftrat und damit den LTC2954-1 abgeschaltet hat. @biologist hat mir empfohlen die Power.cpp im Setup zu deaktivieren und den GPIO POWER wieder im Setup zu schalten. Das hat geklappt…bis zum Sommer 2022. Dann passierte es wieder. Ich habe dann das Aktivieren GPIO POWER direkt als erstes in der Main.cpp ausgeführt. Hat geholfen und sogar der Aufruf der Power.cpp ging damit wieder. Ja, und jetzt mit neuer Arduino ist der Fehler wieder da und ich habe keine Idee mehr.
Ich bitte euch mal zu prüfen ( mit den Boards von Torsten) ob die Spannung an der Peripherie, also RFID, SD-Karte, Audio usw. etwa 2 Sekunden nach Einschalten kurz für 1 Sekunde aus geht. Kann man am Flackern der LED auf dem RC-522 sehen.
Ich benutze zum Abschalten im Moment den Pin KILL nicht mehr, habe es anders gelöst. Ich bin aber trotzdem sehr interessiert ob das bei euch auch so auftritt.

VG und danke schonmal vorab.

Hallo,

ich hab das jetzt auch mal getestet und es sieht eigentlich alles besser aus als mit Arduino-1… Nur eine Kleinigkeit ist mir bisher aufgefallen: Ich nutze DONT_ACCEPT_SAME_RFID_TWICE und prinzipiell funktioniert es zwar, aber wenn ich ne Karte auf dem Reader liegen lasse, dann greift sie irgendwann doch und zwar mit dieser Log:

[ 147540 ]  RFID-Karte erkannt: (ISO-14443) ID: 04-c0-7f-c9
                                                           [ 147543 ]  RFID-Karte empfangen: 004192127201
[ 147545 ]  Aktuelle RFID-Karte erneut aufgelegt - abgelehnt! (004192127201)
[ 151891 ]  RFID-Karte erkannt: (ISO-14443) ID: 04-c0-7f-c9
                                                           [ 151894 ]  RFID-Karte empfangen: 004192127201
[ 151896 ]  Aktuelle RFID-Karte erneut aufgelegt - abgelehnt! (004192127201)
[ 157312 ]  RFID-Karte erkannt: (ISO-14443) ID: 04-c0-7f-c9
                                                           [ 157324 ]  RFID-Karte empfangen: 004192127201
[ 157326 ]  Aktuelle RFID-Karte erneut aufgelegt - abgelehnt! (004192127201)
[ 158854 ]  RFID-Karte erkannt: (ISO-14443) ID: 04-c0-7f-c9
                                                           [ 158867 ]  RFID-Karte empfangen: 004192127201
[ 158868 ]  Aktuelle RFID-Karte erneut aufgelegt - abgelehnt! (004192127201)
[ 163533 ]  RFID-Karte erkannt: (ISO-14443) ID: 04-c0-7f-93
                                                           [ 163542 ]  RFID-Karte empfangen: 004192127147
[E][Preferences.cpp:472] getString(): nvs_get_str len fail: 004192127147 NOT_FOUND
[ 163547 ]  RFID-Karte ist im NVS nicht hinterlegt.
[ 164360 ]  RFID-Karte erkannt: (ISO-14443) ID: 04-c0-7f-c9
                                                           [ 164366 ]  RFID-Karte empfangen: 004192127201

Also die ersten 4 mal hat er sie abgelehnt, aber dann kam dieser getString() fehler und ab da hat er sie dann wieder akzeptiert und das aktuelle Lied von vorne gestartet.

Er hat zwischendrin offenbar die Karte mal „anders“ erkannt. Das kann leider vorkommen.
Hast du meinen Fix mit dem Port-Expander eigentlich laufen gehabt? Weil das würde mich mal interessieren.

Ja, also mit Arduino-1 ist mir das nie aufgefallen. Erst seit dem Umstieg auf Arduino-2 ist das reproduzierbar nach 3 bis 5 Lesezyklen. Hatte das allerdings jetzt auch nicht wirklich lange mit Arduino-1 am Laufen, nur ein paar Tage.

Hmm, ich bin mir nicht sicher was Du mit Port-Expander Fix meinst, bin noch relativ neu hier… Zumindest hab ich da nicht explizit was eingespielt. Das hier ist der Code-Stand den ich aktuell laufen hab: GitHub - mzanetti/ESPuino at bbox

EDIT: Sehe erst jetzt, dass ja oben die ganze Zeit um besagten Port-Expander Fix ging :see_no_evil: . Ich dachte von dem Problem nicht betroffen zu sein, so hatte ich die entsprechenden Beiträge zum Thema nur überflogen. Ich habe den Patch jetzt eingespielt und tatsächlich wird dadurch auch dieses Problem behoben.

2 „Gefällt mir“

So, ich habe dazu jetzt mal einen Commit gemacht: Adding rudimentary port expander-debounce (Arduino2-fix) · biologist79/ESPuino@52f4109 · GitHub. Hätten wir dieses Problem hoffentlich gefixt.

Es scheinen sich ja nach und nach die Probleme mit der 2er Version lösen zu lassen, das ist schon mal fein!

Bzgl. schwankende Web-Uploadrate experimentiere ich hier weiter. Die 500 KB/s von @Christian konnte ich zwar noch nicht erreichen, aber der Gedanke das es an der Lastverteilung der Tasks liegt teile ich mittlerweile auch. Zuvor hatte ich die Probleme immer im Arduino 2.x Wifi-Durchsatz verortet…

Die Idee während des Web-Uploads (und evt. später auch FTP-Uplaod) den Audio/LED Task zu pausieren finde ich logisch. Ich benötige keine Audio/LED Ausgabe wenn ich ein Hörspiel möglichst schnell hochladen möchte. Feedback habe ich eh über den Fortschrittsbalken im Browser.

Wie steht Eure Meinung dazu diese Tasks während Web-Upload zu pausieren?

3 „Gefällt mir“

Für mich wäre das ok, brauche ich auch nicht.

Finde ich eine sehr gute Idee, da es so wie so kaum mehr nutzbar ist in diesem Zeitraum. Man kann ja trotzdem ein bestimmtes statisches Muster (z.B. das Pause -Muster) auf den LEDs anzeigen.
Ist die feste Zuweisung des Cores für IP jetzt schon mit drin oder nicht?

Alle weiteren Änderungen sollten ja möglichst keine (negativen) Auswirkungen auf die offizielle Version Arduino 1.0.6 haben

Ist die feste Zuweisung des Cores für IP jetzt schon mit drin oder nicht?

Nein, das ist noch nicht drin, könnte aber absolut nicht schaden. @biologist kannst Du das gelegentlich übernehmen in platform.ini, Danke dafür geht meines Wissens an @tuniii ?

build_flags = 
    -DCONFIG_ASYNC_TCP_RUNNING_CORE=1
    -DCONFIG_ASYNC_TCP_USE_WDT=1

D.h. meine Anpassungen helfen bei Dir nicht? Hast Du meinen Branch mal installiert? Wie hast Du den Upload gemacht? Über das Webinterface? Ich hatte zum Testen die Uploads irgendwann mit CURL gemacht, weil das einfacher ist.

Habs aufgenommen im letzten Commit eben. Kurz davor habe ich auch den Exception-Decoder per Default aktiviert.

2 „Gefällt mir“

Leider noch kein Durchbruch, 500 KB/s wäre ja mal mal eine Ansage! Ich teste hier mit Win11 & MS-Edge Browser, glaube aber nicht das dies der springende Punkt ist. Werde das weiter testen…

Ich habe das eben mal mit 1.0.6 getestet und kam auch dort auf 445 kB/s. Sehr geil!
Nachtrag: Mit Arduino2 allerdings erheblich langsamer (<300 kB/s).

Sind denn wenigstens die Schwankungen weg?

Dann bin ich so langsam echt raus - das verstehe ich nun gar nicht mehr.
Es scheint sich in jeder Umgebung anders zu verhalten.

Also ich habe jetzt nur den aktuellen Master genommen, die beiden Build-Flags integriert (Commit von gestern) und habe es dann mal mit Arduino 1 bzw. 2 getestet. Sonst habe ich keine Anpassungen vorgenommen. Also nix an Ringbuffer geändert, den Fileupload nicht verschoben und auch nix pausiert. Hätte ich vielleicht dazusagen sollen.

Ah okay - vielleicht magst Du das bei Dir dann bei Gelegenheit mal mit den Änderungen testen. Denn dann passt das jetzige Verhalten ja komplett ins Bild.