Hilfestellung bei Arduino mit Datenbank bzw. Datenaustausch

Hallo zusammen,

Ich hoffe ich habe für den Betrag die richtige Überschrift gewählt und korrekt eingeordnet...

Ich habe vor ein Projekt umzusetzen, Sinn des Projektes soll sozusagen ein Prüfsystem für RFID Chip's sein, die die Gültigkeit prüfen.
Die Gültigkeit soll über RFID Terminal's vergeben werden und auch wieder entzogen werden können oder auch nur geprüft werden können.
Da ich absolut keine Ahnung von dieser Materie habe und bisher nur "einfachere" Projekte umgesetzt habe, mich aber dieses Thema "Datenbank und Austausch von Daten aus externen Quellen" wirklich interessiert, wollte ich mich mal an das Thema wagen.

Braucht man für sowas eine Datenbank oder sowas und muss das online sein oder geht das auch lokal?

Ich habe natürlich schon versucht mich in die Materie einzuarbeiten, aber ich blicke einfach überhaupt nicht durch, es scheint zwick Möglichkeiten zu geben.
Vielleicht kann mir da jemand ein bisschen weiterhelfen und mir eine passende Möglichkeit zeigen.
Ich habe auch glaube ich grob verstanden wie man Daten in die Datenbank einträgt (Also Theroretisch...), aber nicht wie man diese wiederum aus der Datenbank abfrägt verstehe ich nicht.

Was brauche ich für dieses Projekt außer den Basics (Arduino (UNO R3), RFID Modul (RC522), Display (I2C)...)?
Habe viel von ESP32 oder ESP8266 gelesen die für solch etwas eingesetzt werden.

Zum besseren Verständnis habe ich den Ablauf mal so groß "skizziert":

Abfrage auf Gültigkeit:
--> RFID Chip wird vom RFID Modul gescannt --> ARDUINO frägt Gültigkeit in Datenbank ab
--> gibt gültigkeitsstatus an Arduino zurück --> Am Adruino angeschlossenes Display zeigt Gültigkeitsstatus an.

RFID Chip Gültigkeit vergeben oder entziehen:
--> RFID Chip wird vom RFID Modul gescannt --> ARDUINO frägt Gültigkeit in Datenbank ab
--> Am Adruino angeschlossenes Display zeigt Gültigkeitsstatus an
--> Über Knopf/Taster an Arduino wird vergabe oder entzug des Chips bewilligt (nur bei passenden Status) --> Arduino gibt Information weiter...
--> Datenbank vermerkt neuen Gültigkeitsstatus und gibt den neuen Status über Display am Arduino bekannt.

RFID Chip entwerten und einziehen:
RFID Chip wird vom RFID Modul gescannt
--> ARDUINO frägt Gültigkeit in Datenbank ab --> Am Adruino angeschlossenes Display zeigt Gültigkeitsstatus an
--> Datenbank vermerkt Chip als entwertet (nur Chips die Tatsächlich vor Entwertung gültig waren) ...

(--> über einen Servo Motor wird der Chip in ein Fach geleitet und sozusagen eingezogen und bei ungültigkeit wieder ausgeworfen.) } Optional, dies ist eher eine Sache abseits der ganzen Thematik, dieses Modul hab ich bereits mal gebaut.

Ich würde mich sehr über ein Feedback zu den Möglichkeiten und der Umsetzung freuen.

PS: Ich weiß, das ist kein einfaches Projekt (also für mich), aber es geht mir erstmal nur um das Prinzip der Kommunikation zwischen Arduino und Datenbanken.

Falls ich irgendwelche Informationen vergessen habe bitte einfach melden.

Mit freundlichen Grüßen

Moritz :grinning:

was willst du hören: Ja das ist möglich.
Es ist SEHR UMFANGREICH und Bedarf Wissen auf vielen unterschiedlichen Teilbereichen.

Aus meiner Sicht brauchst du mehrer Zwischenschritte:
a) zunächst mal das reine Lesen eines RFID Chips
b) prüfen des RFID Chips gegen eine Lokale Datenstruktur am Microcontroller - Gültig/Ungültig
c) eine GUI (am Microcontroller) um die lokale Datenstruktur zu verändern (also das Gültigkeitsdatum eines RFID zu verändern/enablen/revoken)
d) Eine Kommunikation zwischen dem Microcontroller und einem zentralen Server um die Gültigkeit eines RFID Chips zu erfragen
e) die Entgegennahme von Daten am zentralen Server und deren Verarbeitung
f) das Speichern von Daten am Server in einen Datengrab (z.B. eine Datenbank)
g) das Verändern von Daten am Server - also wieder eine GUI um die Daten (in der Datenbank) zu verändern - (z.B. RFID Chips revoken oder enablen).

Kann man stufenweise angehen. Ich würde mit a) anfangen. Als Microcontroller würde ich in Hinblick auf die anstehende Kommunikation mit einem Makerboard auf Basis eines ESP8266 oder ESP32 beginnen (NodeMCU, Wemos D1, Lolin D32...)

Es gibt im Prinzip 2 Möglichkeiten.

Variante 1 : Für die Arduino-Serie (Uno // Nano // Mega) weil die haben kein Netzwerk (ohne viel Aufwand)

Man speichere die Daten (Zugang-Nr) als FILE-Name auf eine SD-Karte oder für 2 Euro mehr auf einer externen Speichermodul.

Beim Lesen der Karte/Modul liest man die Nr und UFID und prüft ob das File auf der SD-Karte /im Modul vorhanden ist. Das liest man die UID-Nr aus den Text-Datei und vergleicht sie mit der Nr. der Karte. Wenn alles gleich ist , TÜR AUF :wink:

Variante 2: Für die ESP-Serie
Da liest man UFID + Zugangs-Nr. (Kunden-NR z.b.) schickt beides zu einen Server mit einer passenden Datenbank. Vergleicht auf den Server und schickt den Antwort zurück.

Gruß

Pucki

Kommt drauf an.
Soll alles(1) auf dem selben Arduino laufen, kannst Du die ID's lokal speichern.
Sobald ein weiterer dazu kommt, musst Du einen Datenaustausch(2) hinbekommen.

(1)
In Deinem Fall Abfrage
-> Anzeige Gültigkeit
-> mögliche Änderung der Gültigkeit
-> Freigabe / Versperren des Zutritt

(2)
Kommt auf die Entfernung an. Das geht Kabelgebunden als 2 oder 3-Drahtleitung, mit Netzwerkkabel oder auch Wifi, BT, schnöden "Wetterstationfunk"

Es gibt RFID-Chips, auf denen können Userdatabytes gespeichert werden.
Die entfernte Zutrittskontrolle könnte darüber ermöglicht werden; hat aber den nachteil, dass jeder der eine passende Karte beschreiben kann das für sich auch freigebn könnte.

Ist Relativ leicht mit einer Comando-Karte.

Wenn die UFID gelesen wird , schaltet das Teil in eine andere Sub_routine. Dort zeigt ein Display (muss nicht ist aber sehr zu empfehlen) in den "Lern-Modus". Man legt nun die neue Karte auf, und das System liest sie ein, und speichert sie (SD-Karte o. Externe Speicher).

Ich empfehle aber in diesen Fall ein 2. Nano am USB-Port des PC mit ein RFID-Reader. Da schickt man dann per Software die "Kunden-NR" z.b. an den Reader. Der schreibt die in den RFID-Chip.

Hinweis: So ein Teil braucht man eh IMMER. Egal ob Netzwerk o. Intern. Immerhin muss man die Karte ja erst mal "Füttern".

Gruß

Pucki

Das erklär mir mal.
Auf einem Terminal speichere ich zu den ID's die Berechtigungen und Du rennst zum anderen Terminal und machst dann was?
Nochmal speichern?
Sinnbefreit?

... nur wenn man es so machen will.
Ansonsten geht es auch mit c) von Beitrag 1.

Weiters wird mit so einer "Commandokarte" das "löschen" einer Karte schwierig wenn die zu löschende Karte nicht mehr verfügbar ist (weil verloren oder man die Person aussperren will). Dann brauchst du definitiv eine GUI um eine angelernte Karte wieder zu revoken.

Also !!!

Mit so ein Teil braucht man IMMER. Damit meine ich ein Karten-Beschreibe-Gerät.
Man nehme :

  1. LEERE Karte
    Starte die Software die den Reader am USB-Port anspricht. Dann tippe man in der Software die neue "Kunden-Nr" und halte die LEERE Karte an den Reader.
    Klicke auf "Karte beschreiben" und gibt sie den neuen Besitzer.

Oder er erstellt eine Lösch-Karte. Kunden-Nr und Lösch-Code drauf.

Was die Comando-Karte angeht.
Das meine ich so.

Der ADMIN hält die neu Beschriebene Karte (so. Oben) an ein Terminal.
Der Arduino schaltet in den LERN-Modus. Der Admin hält die neue Karte an das Terminal und der Arduino liest die ein.

Dabei prüft er vorher ob die Karte ein Löschcode hat. Hat sie einen wird sie gelöscht. Ansonsten wird sie eingelesen.

Ich gebe aber offen zu, das das nur für die NETZ LOSE Variante effektiv und Sinnvoll ist.

Und auch nur wenn kein Touch-Display / oder Display + Tastatur vorhanden ist.

Wenn ein Touch-Display z.b. vorhanden ist, reicht es mit der Commando-Karte das Teil in den Admin-Modus zu schalten und den Rest am Gerät zu machen.

Gruß

Pucki

Hallo zusammen,

erst einmal vielen Dank für eure zahlreichen Antworten und Vorschläge.

Ich habe mir alle eure Vorschläge durchgelesen und verstehe es so, dass es grob zwei Möglichkeiten gibt, einmal eine Möglichkeit ohne Netzwerk (nur ein "Terminal") und eine Lösung, die über einen zentralen Datenspeicher bzw. eine Datenbank geht.

Ich würde gerne zwei oder drei "Terminals" verwenden, komme also um eine Datenbank nicht herum...

Könnt ihr mir etwas empfehlen? Was ist für diesen Zweck am besten geeignet und am benutzerfreundlichsten bzw. für mich als Anfänger in diesem Bereich leicht zu verwalten und einzurichten/einzubinden?

Zu meinen Komponenten und RFID-Chips.

Als Mikrocontroller würde ich pro Terminal einen ESP8266 verwenden, als RFID Reader/Writer das RFID Modul (RC522), als Display ein I2C Display (Größe und Modell noch unbekannt).

RFID CHIPS: Ich verwende 25mm ISO 14443-3A Chips mit NfcA, MifrareUltralight, Ndef Technologie, 504 Bytes : 135 Seiten (je 4 Bytes), mit Datenformat NFC Forum Type 2, Frequenz 13,56mhz.

Den Code für den RFID Reader habe ich bereits bzw. kann ich aus einem früheren Projekt übernehmen. und für den Zweck anpassen.

Mir fehlt sozusagen das ganze Thema wie verbinde ich Arduino mit Server oder Zentralspeicher und wie sende und empfange ich Daten darüber und verarbeite diese.

Ich habe einiges über MySQL gelesen, aber das erscheint mir doch etwas komplex.
Gibt es außer MySQL noch andere Möglichkeiten, eine Datenbank auf meinem PC zu hosten oder ist das zu kompliziert und umständlich?
Ich wäre sehr dankbar, wenn ihr mir unter die Arme greifen könntet.

LG Moritz

Zum Einstieg kannst Du Dir ja mal XAMPP installieren. Da hast Du zusätzlich noch einen Webserver und PHP mit dabei, wenn Du den Zugriff z.B. über HTTPS und ein PHP-Script realisieren willst, oder Du nimmst den Direktzugriff über die Lib von Chuck Bell für den Direktzugriff (unjverschlüsselt).

Ohne weiterführende Kenntnisse wird das aber, egal womit, nichts werden.

Gruß Tommy

1 Like

dann hast du gerade mal den Punkt a) aus meinem Post.
An deiner Stelle würde ich da schrittweise vorangehen.
Der nächste Schritt wäre b).

MySQL ist eigentlich sehr leicht.

SQLite ist eine abgespeckte Version die aber meiner Meinung nach bei Einzelplatzanwendungen völlig ausreicht. Und sie ist kostenlos.

Schlimmster Nachteil ist in meinen Augen das man die Daten nicht verschlüsseln kann ohne kostenpflichtige Tools.

ABER, an den Befehlssatz solltest du dich gewöhnen. Viele DB's arbeiten damit.

Man kann sich das Leben aber einfacher machen. Google nach " SQLiteStudio ".
Damit kannst du Datenbanken anlegen und auch etwas verwalten.

Dann brauchst du eigentlich nur nach 2 Befehle lernen.

SELECT (wenn man was von der DB wissen will
und
UPDATE (Wenn man was in die DB schreiben will)

Für deine Anwendung sollten die 2 Befehle dann schon reichen.

Jajaja. SQL ist komplex kann viel, SQLite etwas weniger. Aber der TO will eine einfach Datenbank machen.

Kleiner Tipp zum Stromsparen. Statte die Terminals mit Speichertechnik aus (SD-Karte etc). Dann brauchst du den "Server" nicht immer an zu lassen. Einfach eine Kommunikation via Wlan zum Datenabgleich einbauen. Und die Terminals regelmäßig Abfragen / Updaten.

Alternativ : Nehme eine Beere als Server.

Gruß

Pucki

Geht das mit Deinen falschen Aussagen jetzt auch hier weiter, wegen der Du nebenan schon unter Aufsicht gestellt wurdest?

SQLite hat nichts mit MySQL zu tun, ist also auch keine abgespeckte Version davon.

UPDATE kann keine neuen Datensätze anlegen, also genügen ihm die beiden Befehle SELECT und UPDATE nicht, er braucht mindestens noch INSERT.

Gruß Tommy

1 Like

Stimmt. Den habe ich glatt vergessen. :wink:

Das kann man nach z.b. dieser Tabelle aber auch anders sehen.

Aber da will ich mich nicht mit dir streiten.

Mir persönlich reicht völlig aus, das ich SQLite auf den PC und den Handy nutzen kann einfach in den ich die DB drauf kopiere.

Gruß

Pucki

Es wehre gut ein Gegenteil vom Herz hier im Forum, danach wurde einer hier alle Rekorde brechen.

Du willst gerade Einen was lebenslang sich beruflich mit Datenbanken beschäftigt hat als Dummen verkaufen.
Nur leider der ganz dummer ohne jegliches wissen bist DU.

Nur wenn man es nicht verstanden hat.
Das ist ein Vergleich von 2 unabhängig voneinander existierenden DBMS.

Gruß Tommy

Hallo Frank(ibear),

vielen Dank für den Codevorschlag...

Ich werde mal versuchen diesen Schritt für Schritt zu verstehen.
Ich werde mich nochmals melden wenn ich weiter bin.

Liebe Grüße Moritz

Beide haben immerhin die drei Buchstaben SQL im Namen und reagieren auf eine Variante der Structured Query Language ( SELECT und so weiter )
Dass SQLite "schlanker" als manch andere SQL Datenbank ist, kann man auch so stehen lassen.

"Variante von" ist strenggenommen nicht richtig, aber Pucki für diese Formulierung zu verhauen, halte ich für völlig daneben.

MariaDB ist eine Variante von MySQL, richtig ?
Die Frage ist, ob man für die Anwendung eine Datenbank braucht oder ob ein Dateisystem ( oder gar eine einzelne Datei reicht?

Damit diese den gleichen Stand haben, ist es vermutlich am besten, die Liste der bekannten und erlaubten RFID zentral zu halten und sie dort jedesmal abzufragen.
Ob per webserver-client und einer Datenbank-Anwendung auf dem Server oder anders (einfacher?), ist davon aber unabhängig.
Wenn die Änderungen selten sind, und die Verbindung von der Zentrale zu den Terminals langsam/unzuverlässig, dann wäre es besser, bei jeder Änderung würden alle Terminals informiert und diese arbeiten danach unabhängig. Immerhin gibt es dabei auch eine Zentrale, die den verbindlichen Zustand der RFID-Liste kennt.
Ob an jedem Terminal Änderungen vorgenommen werden können, ist nochmal eine andere Entscheidung.

Genau genommen ein Fork. Videnius hat MySQL an Sun verkauft und als ORACLE die Firma aufgekauft hat, geforkt und seinen eigenen Zweig als MariaDB auf gemacht.

Pucki ist schon nebenan mit völlig falschen Aussagen aufgefallen, das muss man korrigieren. Es könnte sonst einer glauben.

Gruß Tommy