Hallo,
ich habe eine Frage bezüglich Kommunikation zwischen mehreren ESP32,
der Einfachheit halber nenne ich sie mal A als Hauptakteur, und b1-b8 als Nebendarsteller.
Zielsetzung (Beispielhaft): Jeder mit einem RFID-Tag bekommt einmal am Tag
an einer von mehreren Ausgabestelle an unterschiedlichen Standorten (b1-b8) einen Keks.
Um dieses sicherzustellen, wird der RFI-Tag dort gelesen, und wenn noch keine Keks ausgegeben wurde,
geht eine grüne Lampe an. Der Ausgebende gibt den Keks aus, und drückt eine Taste zur Bestätigung,
Damit weiß das System das and die Person Heute schon ein Keks ausgegeben wurde.
Und beim nächsten Versuch an einer der Ausgabestellen gibt's halt kein grünes Licht für nen Keks.
A und b1-b8 werden sich in einem isoliertem VLAN befinden.
Zum Verwalten der Berechtigungen dient eine CSV-Datei. ( laufende Nr.(3) ; UID(14) ; Status(1) )
mit 999 Zeilen
Was ich bisher habe;
A ist ein ESP32-P4 mit SD Kartenslot, einem GPS Empfänger und einer RTC. Er dient auch als NTP Server für alle.
Sowie einem 2004 LCD und 5 Wege Tastenmodul zur Konfiguration und Statusanzeige.
b1-b8 sind ebenfalls je ein ESP32-P4, mit PN532 RFID-Leser, eine Leuchte z.B.:WS2812, und einem Taster,
sowie ein 128x64 Oled-Display und ein 5 Wege Tastenmodul zur Konfiguration und Fehleranzeige.
Was bisher läuft:
A :
NTP-Server läuft, Web-Server läuft, die SD Karte und somit die CSV wird zum Download angeboten.
Das werde ich noch ändern, so das die SD Karte eingesteckt wird, und die Datei auf Knopfdruck in das Littlefs auf A kopiert wird,
und von dort aus bereit steht. Dürfte stabiler sein.
b1:
Wenn er eingeschaltet wird, überprüft er ob A erreichbar ist, holt sich die Zeit, und lädt die CSV in sein Littlefs.
(Ich wollte vor dem Download noch eine Versionsüberprüfung machen, ob der Download notwendig ist,
aber bei 22MB Littlefs und einer Dateigröße von wenigen zig kB ist das hinfällig.)
Dann parst er die CSV in ein Char-Array. (Die Datei im Littlefs stellt sicher das es auch bei fehlender Verbindung geht)
Wenn jetzt ein RFID-Tag gelesen wird, schaut er im Array nach ob die UID vorhanden ist.
Wenn ja schaut er nach dem Status, wenn der z.B.:1 ist, macht er die Grüne Lampe für 5sec. an
und wartet auf einen Tastendruck. Wird die Taste gedrückt, wird der Status im Array auf Null gesetzt,
und wenn nicht, halt Lampe wieder aus und warten. Das ConfigMenü ist fertig.
Das heißt für einzelne Standorte funktioniert es,
Viel Text, für eine Frage. Ich hoffe aber das es für das Verständnis Hilfreich ist.
Und jetzt meine Frage,
Ich möchte das die Überprüfung für alle Standorte funktioniert, soll heißen, wenn ich an b1 nen Keks geholt habe,
soll ich auch an b2-b8 keinen mehr bekommen.
Meine Idee, ich würde die CSV auf A auch in eine Array einlesen, und b1-b8 sagen sie sollen erst bei A Fragen
wie der Status für die UID im Array ist, wenn 1 dann Keks ausgeben und A sagen das der Status auf 0 Gesetz wird.
Und im eigenen Array auch auf 0 setzten. Das Array auf b1-b8 dient dann zur Absicherung bei Netzwerkproblemen,
und wird nur bei nicht Erreichbarkeit von A abgefragt.
Nur wie ? Http, Udp oder... und auch noch einfach ;-)
Meine bisherige Recherche (Viel Lesen, mäßiges Verstehen) brachte die Meinung, Udp einfacher.
Für Anregungen und Vorschläge wäre ich Dankbar.
Gruß
Achim