nachdem ich bei meinem ESPuino nun endlich LPCD zum laufen bekommen habe (IRQ direkt an den ESP32, nicht über den PE), ist mir aufgefallen, dass mein PN5180 viele Interrupts wirft, die dann in den meisten Fällen auch korrekt verworfen werden (Keine Karte erkannt, zurück in den deep sleep). Allerdings kommt es alle paar Stunden doch vor, dass scheinbar eine Karte erkannt wird, der ESPuino aufgeweckt wird, einmal rot blinkt (weil ja keine Karte vorhanden ist) und dann erst nach der Leerlaufzeit wieder in den deep sleep wechselt.
Vielleicht ist mein Hardware-Setup nicht besonders optimal oder mein PN5180 einfach sehr empfindlich - um dieses Problem zu beheben habe ich jedenfalls den Code dergestalt umgeschrieben, dass bereits im LPCD-Abschnitt die UID mit dem NVS abgeglichen wird und nur bei einem Match der vollständige Start des ESPuino erfolgt. Funktioniert soweit einwandfrei, die Änderungen sind in diesem Commit ersichtlich. Spricht etwas dagegen, diese Funktionalität in den Hauptzweig einfließen zu lassen? Oder bin ich tatsächlich der einzige mit diesem Problem?
Ich finde deinen Code sehr gut umgesetzt & die zusätzliche Prüfung macht bei dir Sinn.
Die Frage ist, warum hier ab und zu eine Karte erkannt wird, obwohl keine aufliegt? Hast Du eine UID z.B. 00 00 00 00 oder FF FF FF FF? Habe ich so noch nicht gesehen, aber auch nicht stundenlang auf die schlafende Box geschaut
Man könnte es so übernehmen, aber dann kann man ESPuino nicht mehr mit einer neuen unbekannten Karte aufwecken. Wollen wir das? Für mich wäre es OK zugunsten der Akkulaufzeit…
Man muss vorher den RFID-NVS initiieren, sonst kann man es nicht auslesen Und das vollständige System_Init macht noch etwas mehr und dauert länger…
@tueddy: Woher das kommt frage ich mich auch. Da der Fehler aber nur selten auftritt, war es ohnehin schon schwer genug, die Ursache herauszufinden (und zu loggen)… Bei Gelegenheit werde ich mir hier mal die „falsche“ UID rausziehen.
Du mußt also einen kleinen Teil der System_Init nach vorne ziehen um dann bei dem Rfid_Init() darauf zugreifen zu können, richtig?
Damit du dann im Fall das die Karte nicht bekannt ist gleich wieder schlafen gehen kannst (bzw der ESP) ohne die ganze System_Init zu machen, richtig?
So welche doppelten und dreifachen Prüfungen triggern einfach den Monk in mir
Und wenn das alles mal in eine dynamische Konfig überführt wird, ist das halt nichts mehr was rausoptimiert wird…
Schon richtig. Da habe ich mich aber einfach an den Code-Stil des Projekts gehalten, wo das an vielen Stellen ähnlich gehandhabt wird. Bin kein nativer C-/C++ -Programmierer und war schon froh, dass ich diese ganzen Typ-Umwandlungen der UID in eine einzige Typ-Umwandlung überführen konnte…
Auf die Gefahr hin, dass ich es mir mit dem Projekt „Reduzierung der #defines“ verscherze - da meine Problematik ja schon ein Sonderfall zu sein scheint, könnte man das zumindest theoretisch hinter ein optionales #define legen. Macht die ganze Konfiguration natürlich wieder ein Stück komplexer.
Ich würde es nicht noch zus. konfigurierbar machen. Entweder wir prüfen beim Aufwachen immer auf hinterlegte Karte oder eben nicht - Ich finde die zus.Prüfung sinnvoll.
Auf jeden Fall werde ich es erst mal testen.