In Absprache mit den Gruppen G6 und G8 wurde eine einheitliche Datenstruktur für den RFID-Chip festgelegt. So ist das richtige Lesen bzw. Schreiben der Chips unter den Gruppen garantiert. In der unteren Grafik ist die Datenstruktur schematisch dargestellt:
(Grafik von G6 übernommen)
RFID-Übertragung
Für den (MF)RC-522 RFID-Schreiber gibt es
bereits eine Bibliothek von miguelbalboa (https://github.com/miguelbalboa/rfid).
Diese wurde für eine SPI-Übertragung programmiert. Der für dieses
Projekt vorgegebene RFID-Schreiber ist auf den I²C-Bus ausgelegt.
Für die Arduino IDE gibt es die Klasse Wire.h, mit Hilfe dessen
relativ einfach ein I²C-Port geöffnet werden kann. Damit galt es nur
noch die entsprechenden Programmzeilen der RFID-Bibliothek mit den
neuen I²C-Befehlen zu ersetzen. Diese
modifizierte Bibliothek wurde während der initialen
Entwicklungsphase genutzt. Auf der Webseite
http://makecourse.weebly.com/week10segment1.html gibt es
reichlich Informationen und Beispiele für das Schreiben/Lesen mit
dem RC522. Für die finale Entwicklungsphase wird der RFID-Treiber
der Gruppe 6 genutzt, welches unter
https://github.com/Shep-pard/MixHit zu finden ist.
Web-Server
Für die Entwicklung des MixHits WS18/19
sollte ein neuer Webserver zum Einsatz kommen, der schneller und
stabiler als der Initiale ist. Dieser existiert bereits, wurde
jedoch unter der Eclipse IDE und IDF-Toolchain von espressif
entwickelt. Aufgrund von (In-)Kompatibilitätsproblemen, hier wurde
mit Visual Studio/Arduino programmiert, wird für die finale Version
auf den Webserver aus dem vorherigen Semester zurückgegriffen. Für
die anfängliche Entwicklungsphase wird auf einen Webserver von der
Arduino.cc Seite zurück gegriffen.
Softwarestand und Bestellung
Für den Softwarestand der RFID-Bezahlstation
gibt es eine Headerdatei sowie die dazugehörige Quellcodedatei.
Diese sind mit Kommentaren versehen. Wie oben beschrieben, besteht
die RFID-Komponenten aus zwei Teilen. Der erste Teil stellt die
Display-Ansteuerung dar. Dazu gibt es drei Funktionen. Es gibt eine
Init-Funktion und zwei Schreibefunktionen für je, um eine einzelne
Nachricht zu schreiben sowie die Bestellung auf dem Display
darzustellen. Für die zweite Teilkomponente gibt es zwei Funktionen.
Eine Init-Funktion, um das RFID-Modul zu initialisieren sowie eine
Schreibefunktion, um Informationen einer Bestellung auf das
RFID-Chip zu schreiben.
Der Bestellvorgang läuft in etwa
folgendermaßen ab:
Kunde verbindet sich mit Webserver und ruft
Bestellseite (192.168.4.1) auf. Kunde bestellt Getränk. Webseite
aktualisiert sich und meldet erfolgreiche Bestellung. Bestellung
wird im Hintergrund in Warteschlange gelegt. RFID-Modul holt
Bestellung aus Warteschlange und Display zeigt Bestellnummer an.
Kunde stellt Glas mit RFID-Chip auf markierte Fläche. Chip wird
erkannt und mit Informationen aus Bestellung beschrieben. Bei
Miss/Erfolg erhält der Kunde eine Rückmeldung auf dem Display. Aus
Schutzgründen wird nach 30 Sekunden und einer erfolglosen
Beschreibung des RFID-Chips die Bestellung verworfen. In diesem Fall
wird der Kunde gebeten sich an das Personal zu wenden.
Im Folgenden sind zwei Flussdiagramme
gegeben, die den Bestell- sowie Schreibevorgang im Groben
schematisch darstellen. Anzumerken gilt, dass nach einem
gescheitertem Schreibe-/Lesevorgang ein erneuter Versuch nach einer
Sekunde vorgenommen wird. Schlägt dieser fehl, so wird die
Bestellung verworfen und der Kunde darüber informiert. Außerdem sind die Anweisungsblöcke für das
Display nicht dargestellt.
Hinweis: Falls der Status beim ersten
Versuch nicht ausgelesen werden kann, so wird versucht mit Hilfe des
Standardschlüssels 0xFFFFFFFFFFFF der neue geheime Schlüssel in den
entsprechenden Block zu schreiben. (Überschreiben des alten
Schlüssels)
Test des Systems
Die Stabilität und Sicherheit des Systems
wurden ausgiebig getestet. Dazu haben Probanden sich mit insgesamt
fünf Endgeräten mit dem Server verbunden. In variierenden
Zeitabständen wurde eine Bestellung ausgelöst. Diese wurde sicher
abgearbeitet. Auch nach über drei Stunden hat das System
funktioniert. Voraussetzung einer erfolgreichen Bestellung ist
jedoch das „korrekte“ Hinstellen des Glases auf die markierte
Position.