Prof. J. Walter - Informationstechnik, Mikrocomputertechnik, Digitale Medien Softwaredoku
Hochschule Karlsruhe Logo Informationstechnik
CM-IoT-RFID
Sommersemester 2019
Daniel Monteiro Borges
Till Gostner

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.

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 1,3 Zoll OLED-Display sowie ein (MF)RC-522-Chip mit I²C-Anbindung zum Einsatz. Diese wurden durch einen NeoPixel Ring von Adafruit ergänzt.

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 und dessen grafische Verdeutlichung auf dem LED-Ring. Die Komponenten werden in Prozesse unterteilt, um den Programmablauf auf beiden Kernnen parallel genau zu steuern.

RFID-Datenstruktur

Im Rahmen des Projekts soll die bestehende Datenstruktur um 2 Punkte erweitert werden. Es soll zum einen ein Zähler eingeführt werden, welcher auf jedem Glas die Anzahl der Cocktails speichert, welches auf dieses geschrieben wurden. Des Weiteren soll in einem Sektor der Eigentümer (HIT-Labor) permanent gekenzeichnet sein. Die aus vorherigen Semestern bestehende Datenstruktur soll ansonsten unverändert beibehalten werden. So ist das richtige Lesen bzw. Schreiben der Chips unter den Gruppen garantiert. In der unteren Grafik ist die Datenstruktur schematisch dargestellt:

(Selbst erstellt auf Basis Gruppe CM-IoT_WaehlESP32)

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.

Web-Server

Für die Entwicklung des Cocktail-Mixer kommt ein Webserver zum Einsatz, der relativ schnell und stabil bereits vorhanden ist. Es wurd jedoch ein automatischer Rücksprung zur Bestellkarte hinzugefügt, der nach 5 Sekunden nach der Bestellung erfolgt. Zu verzeichnen ist das dieser wesentlich stabiler läuft, wenn über einen Router verbunden und kein Netz vom Microcontroller selbst aufgebaut wird.


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 drei Schreibefunktionen für je, um eine einzelne Nachricht zu schreiben sowie die Bestellung auf dem Display darzustellen. Des weiteren wird ein NeoPixel Ring angesteuert, um die Nachricht auf dem Display zu untermalen. 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 auf. Diese ist 192.168.4.1 falls der Microcontroller sein eigenes WLAN aufbaut, ansonsten kann die IP-Adresse über den Seriellen Monitor der Arduino IDE ausgelesen werden. Danach bestellt der Kunde das Getränk. Webseite aktualisiert sich und meldet erfolgreiche Bestellung und kehrt nach 5 Sekunden zur Karte zurück. Bestellung wird im Hintergrund in Warteschlange gelegt. RFID-Modul holt Bestellung aus Warteschlange und Kunde wird gebeten das Glas auf die vom LED-Ring umrandete Fläche zu stellen. 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 stellt das Flussdiagramm den Bestell- sowie Schreibevorgang im Groben schematisch dar. 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/LED-Ring 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 konnte bereits am Campus Fest getestet werden. Dazu wurden mehrere hundert Cocktails während mehreren Stunden auf Gläser "geschrieben". Dies wurde sicher abgearbeitet.

 


  Mit Unterstützung von Prof. J. Walter Sommersemester 2019