Prof. J. Walter - Informationstechnik, Mikrocomputertechnik, Digitale Medien Softwaredoku
Hochschule Karlsruhe Logo Informationstechnik 
     Wählen bezahlen RFID-ESP32+Platine CM-Iot
Wintersemester 2018/2019
Louis Willems
Steven Duong

Software Dokumentation

Vorbemerkung
Für die Programmierung wird die Entwicklungsumgebung Microsoft Visual Studio benutzt. Mit der Erweiterung vMicro wird eine Verbindung zur Arduino IDE hergestellt, mithilfe dessen der ESP32 programmiert und geflasht wird. Die Programmiersprache wird aus dem vorherigen Projekt übernommen, C++ objektorientiert. Sobald eine objektorientierte Abstraktion nicht mehr sinnvoll ist, wird im klassischen Stil weiter programmiert.

Aufgabenstellung

Siehe Konzeptentwicklung

Hardware
Die grundlegende Hardware in diesem Projekt ist der ESP32 NodeMCU. Dabei handelt es sich um einen Microcontroller mit zwei CPU-Kernen (Taktrate 160-240MHz). Für das Projekt sind die SPI/I²C – und Wlan-Schnittstellen von Bedeutung. Weiterhin kommen ein OLED-Display sowie ein (MF)RC-522-Chip mit I²C-Anbindung zum Einsatz.

Software-Architektur
Die Software besteht grundlegend aus zwei Komponenten. Die erstere ist ein Webserver, mit dem sich ein Kunde verbinden kann, um über das User Interface Cocktails zu bestellen. Die zweite Komponente verarbeitet die Bestellung, berechnet beispielsweise alle Zutaten des bestellten Cocktails und schreibt diese Information auf ein RFID-Chip, welcher sich unter einem Glas befindet. Ein Teilprozess der zweiten Komponente ist die Darstellung von Informationen auf einem OLED-Display. Die Komponenten werden in Prozesse aufgeteilt werden und darüber hinaus auf je einem eigenen CPU-Kern laufen.

RFID-Datenstruktur

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.

 


  Mit Unterstützung von Prof. J. Walter Wintersemester 2018/2019