Prof. J. Walter - Informationstechnik, Mikrocomputertechnik, Digitale Medien Stand der Technik
Hochschule Karlsruhe Logo EITM300 - Masterprojekt
Fischertechnik - Codypp-Net
Wintersemester 2018/2019
pafr1014@hs-karlsruhe.de
Matrikelnummer: 65641

Stand der Technik


FT32-Projektstand

Allgemein kann das FT32 Projekt in 3 Hauptteile unterteilt werden, auf diese hier kurz eingagangen wird, um den derzeitigen Stand des Projektes zusammen zu fassen. Neben dem Boardlayout, der C++ Software auf dem ESP32 ist auch die Codypp Weboberfläche in Betracht zu ziehen. Die Funktion dieser drei Bestandteile lässt sich folgendermaßen beschreiben:

1) Um die Sensoren sowie die Aktoren von Fischertechnik über den EP32 ansprechen zu können, ist für diesen Zweck eine selbst erstellte Leiterplatte entwickelt worden. In diesem Zusammenhang wurde auch ein 3D Druck Gehäuse gefertigt, damit die Leiterplatte in bestehende Fischertechnikprojekte integriert werden kann. Derzeit existieren zwei Leiterplattendesigns; eine große und eine kleine Version des Boards, auch in Anlehnung an den Fischertechnik TXT-Controller (vgl. Leiterplattendesign groß) und das Fischertechnik Discovery Set (vgl. Leiterplattendesign klein).

Fischertechnik TXT-Controller FT-Discovery Bot Mini
Leiterplatte_Gross Leiterplatte_Klein
Gegenüberstellung des TXT- und
des großen FT32-Controllers
Gegenüberstellung des FT-Dicovery Mini Bots und
des kleinen FT32-Controllers

2) Damit die Hardware angesprochen werden kann, sind auf Mikrocontrollerebene C++ Bibliotheken notwendig. Außerdem ist die Netzwerkkommunikation, die Ressourcenverwaltung sowie die Visualisierung und Steuerung durch graphische Blöcke durch den Benutzer umzusetzen. Hierfür wurden ein Networkhandler (stellt die Netzwerkfunktionalität bereit), ein Assethandler (übernimmt die Bereitstellung der Daten zum Anzeigen der Weboberfläche aus dem internen Speicher im Browser) sowie ein Websockethandler, welcher die Kommunikation zwischen ESP32 Controller und der Codypp-Webbrowseroberfläche übernimmt, implementiert (vgl. Implemetierungen in ft32.ino und Blockschaltbild des Gesamtsystems).

Blockschaltbild Gesamtsystem
Blockschaltbild des Gesamtsystems

3) Um die Programmierung und Steuerung der Hardware möglichst intuitiv und einfach für den Endanwender zu gestalten, wurde auf das Blockly-Framework von Google aufgesetzt. Dieses wurde im Design und in der Basisfuktionalität an die Anforderungen des FT32 Projektes angepasst. Die dadurch entstandene Webentwicklungsumgebung Codypp kann zum einen für die Programmierung des FT32-ESP32 Controllers verwendet werden, zum anderen bietet sie die Möglichkeit, C++ Arduino Quellcode zu erzeugen, um native Applikaionen basierend auf den Bibliotheken für die FT32-Hardware zu erstellen (vgl. Demoversion Stand WS2017/18; Stand WS2018/19).

Blockly Weboberfläche Codypp Weboberfläche
Blockly-Weboberfläche Codypp-Weboberfläche

Wie schon bereits in der Problemstellung erwähnt, gibt es zwei Boot-Möglichkeiten für den FT32-ESP32 Controller (Erstellung eines eigenen, "internen" Netzwerks mit lokaler Codypp Oberfläche aus dem Spiffsspeicher; Verbindungsaufbau mit einem bestehenden Netzwerk und Laden der Codypp Oberfläche aus dem internen Speicher (vgl. Abbildung unten)). Zu erkennen ist, dass in der zweiten Möglichkeit gleich mehrere Probleme liegen. Zum einen ist die Netzwerkkonfiguration nicht modular, d.h. nicht ohne weiteres durch den Benutzer anpassbar, und zum anderen wird die Weboberfläche immernoch aus dem internen Speicher des ESP32 Controllers geladen.

Codypp Network Ansicht lokal
ESP32-Controller mit lokalem Codypp im Spiffs in einem bestehenden Netzwerk

Bei der ersten Verbindungsmöglichkeit hingegen gibt es von Seiten des ESP32 verschiedene Restriktionen: Mit einem ESP32 können sich nach Erstellung eines WLAN Netzwerkes nur bis zu vier Endgeräte koppeln (vgl. Linkliste Quellen [7]-[9]), da weitere Verbindungsmöglichkeiten Hardwareseitig nichtmehr verabeitet werden können. Damit ist das Projekt, gerade wenn es um die Möglichkeit der erweiterten Kommunikation zwischen ESP32 Controllern oder weiteren Netzwerkresourcen begrenzt (mögliche Szenarien einer modularen Netzwerktopologie sind hier zu finden). Darüber hinaus ist der interne Speicher des ESP32 begrenzt. Dies hat für den Entwicklungsprozess der Codypp Weboberfläche gleiche mehrere Einschränkungen zur Folge. Neben der Gesamtgröße und damit einem begrentzen Funktionsumfang ist auch die Umsetzung von Neuerungen begrenzt, da für jede neue Version jeder Controller neu eingerichtet (vgl. Einrichtung des Spiffsspeichers) werden muss, um den Stand Controllerunabhängig aktuell zu halten.
Ein großen Einfluss auf die Usability und das Benutzererlebnis hat auch die Ladezeit der Codypp Oberfläche. Mit zunehmendem Funktionsumfang muss auf ESP32 Ebene mithilfe von optimierten Lesealgorithmen die notwendigen Inhalte gepackt an den Webbrowser des Endanwenders übermittelt werden. Dies ist ein sehr anfälliger Prozess und in nicht selten Fällen führt dies zu Problemen; entweder das Netzwerk des ESP32 "versagt" aufgrund von zu vielen Verbindungen oder die Weboberfläche wird nicht richtig dargestellt.

Linux Mint Virtual Machine (VM) Entwicklungsumgebung

Für die Weiterentwicklung an dem Projekt sind verschiedene Tools und deren richtige Konfiguration notwendig. Um diesen Prozess zu verinfachen, wurde in vorangegangenen Projekten unterschiedlichste Hilfsskripte und Tools erstellt (vgl. makeSpiffs.sh, Python-Spiffs-Tool, ft32-simple_install oder Spiffs-Batch-Skripte für Windows). Als Vorbereitung für dieses Projekt wurde eine Virtuelle Machine erstellt, in der alle Tools eingerichtet und getestet wurden. Da dies nicht umbedingt Teil der Aufgabenstellung war, wird dies nun im Stand der Technik behandelt.

Die Virtuelle Machine umfasst ein Linux Mint 19 Betriebssystem und darin enthalten die Atom IDE (mit npm) zur Weiterentwicklung von Codypp, die Arduino IDE die C++ Programmierung des ESP32 Controllers sowie das makeSpiffs.sh Skript zum Schreiben der notwnedigen Dateien für die Codypp-Version für den internen Speicher. Diese kann unter diesem Link heruntergeladen werden. Eine ausführliche Dokumentation der Einrichtung und Verwendung der VM findet sich im Unterordner /docs in der *.zip Datei. Zu beachten ist, dass die Setup.txt nicht den aktuellsten Stand repräsentiert:

Hinweis:


Die aktuelle Version der Setup.txt Datei findet sich hier!
Stand: 12-01-2019

Wichtig:




Für einen einfachen Einstieg in das Projekt ist es sinnvoll die VM mit den Tools zu verwenden, da hier die Entwicklungsumgebungen getestet und damit ein Weiterarbeiten am Projekt vereinfacht wurde. Es wird aber ein Rechner mit ausreichend Hardwareressourcen benötigt. Außerdem ist zu beachten, dass der Softwarestand in der VM unter Umständen veraltet ist, da keine GIt-Integration umgesetzt wurde. Eine Git-Integration ist in jedem Fall sinnvoll und wird dringend empfohlen.

Der TXT-Controller von Fischertechnik war sowohl von Seiten der Hardware als auch von der Software im Rahmen des ursprünglichen Projektes Vorbild. Dementsprechend ist es sinnvoll diesen hinsichtlich der Problem- und Aufgabenstellung (kurz: Eine modulare WLAN-Konfigurationsmöglichkeit) im Rahmen des "Stand der Technik" zu untersuchen. Außerdem sind andere Umsetzungsmöglichkeiten untersucht worden, die dann in die Lösungsfindung mit eingeflossen sind.  

WLAN Fischertechnik TXT-Controller

Fischertechnik selbst bietet mit dem TXT-Controller die Möglichkeit, diesen in ein bestehendes Netzwerk zu verbinden oder selbst eins zu erstellen (vgl. Linkliste Quelle [2]). In beiden Fällen dient die Netzwerkverbindung für die Remote-Programmierung und Steuerung, vergleichbar mit der Umsetzung des FT32 Projektes. Die unten angeführten Abbildungen verdeutlichen die in diesem Zusammenhang einzustellenden Konfigurationsmöglichkeiten des TXT-Controllers:

TXT-Controller-WLAN-1 TXT-Controller-WLAN-3
TXT-Controller-WLAN-2 TXT-Controller-WLAN-4

WLAN Lego Mindstorm

Ein vergleichbarer Controller zum TXT-Controller von Fischertechnik ist der von Lego. Auch dieser bietet die Möglichkeit einer einfachen Programmierung sowie die Kommunikation über ein bestehendes Netzwerk (vgl. Linkliste Quelle [15]). Der Mindstorm-Controller besitzt lediglich nur die Möglichkeit zur Verbindung in ein bestehendes Netzwerk und kann im Vergleich zum Txt- oder FT32-ESP32-Controller nicht ein Access-Point erstellen.

INI WiFiManager (ESP32)

Auch auf Seiten des ESP32 und der Community existieren schon erste Ansätze und Umsetzungen, um zur Laufzeit des Mikrocontrollers die WLAN Einstellungen modular konfigurieren zu können, ohne den ESP32 und dessen Speicher neu flashen zu müssen. In diesem Zusammenhang bin ich auf das "INI WiFIManager" Projekt gestoßen (vgl. Linkliste Quelle [14]). Hinsichtlich meiner geplanten Umsetzung bietet es schon enorm viele Lösungsansätze, genauso aber auch Differenzen und Probleme, die ich im folgenden Abschnitt ausarbeiten möchte.

INI WiFi Manager Demo
INI Wifi Manager Demo

Hinweis:

Der Quellcode des Projektes kann unter folgendem Link heruntergeladen werden. Alle Verweise in Bezug auf die Quelldateien sind auf die Sourcefiles unter dem angegebenen Link zu beziehen.

Das Funktionsprinzip des Projektes lässt sich leicht zusammenfassen: Nach Systemstart wird, falls noch keine Konfiguration hinterlegt ist und ein Verbindungsaufbau zu einem bestehenden Netzwerk nicht möglich ist, ein Access Point erstellt und der Benutzer kann sichdurch das Netzwerk auf den ESP32 einloggen und die Konfigurationswebsite im Browser über "http://192.168.4.1" aufrufen. Auf dieser wird die Möglichkeit geboten, in einem Textfeld eine neue Konfiguration zu hinterlegen oder eine vom Rechner hochzuladen. Hierbei können, neben den Basiseinstellungen zum Passwort oder der SSID, auch Einstellungen zu MQTT- oder NTP-Server vorgenommen werden. Die Funktionalität ist aber in diesem Projekt nicht umgesetzt worden. Nach dem Abspeichern kann der ESP32 über einen Button neugestarten werden und sollte sich nun mit dem neuen Netzwerk verbinden.

Vorteile Nachteile
-Speichern von Zugangsdaten und beliebigen Einstellungen in setup.ini in SPIFFS
-Editieren und einsehen über Webinterface Hochladen (Upload) über Setup Webseite vom Rechner
-Hochladen als SPIFFS – Daten mit Arduino IDE
-Bei Verwendung von FTP in Ihrem Projekt, Hochladen über FTP möglich
-INI-Datei lässt sich gut strukturieren durch Absätze und Kommentare
-INI-Datei lässt sich leicht um beliebige Parameter erweitern
-Fehleingaben des Benutzers werden nicht berücksichtigt (Benutzerfreundlichkeit muss beachtet werden!)
-Root-Zugangsdaten für den ESP32-Access Point sind im Programmcode hinterlegt und werden nicht generisch erzeugt und ggf. auf einem OLED Display angezeigt
-Zwei ESP32-Controller würden in dieser Konfiguration die gleichen Access-Points erstellen (in Verbindung mit Punkt 2 zu sehen)
-Konfigurationsdatei wird nicht verschlüsselt abgelegt: Bei Zugriff auf den SPIFFS können die WLAN-Einstellungen ausgelesen werden
-Designtechnisch entspricht es nicht dem Codypp-Design und wurde mit Standard HTML, CSS und Javascript erstellt
-Boot-Up Prozess müsste angepasst werden (GPIO Pins dürfen unter Umständen nicht verwendet werden

Das "INI WiFi Manager" Projekt bietet zwar schon fast den Funktionsumfang für die vorliegende Aufgabenstellung, jedoch umfasst die Integration und die Modifikation hinsichtlich der beschriebenen Nachteile in das bestehende FT32-Projekt noch einige Arbeitspakete Auf Grundlage dieses Projektes kann aber in jedem Fall aufgebaut werden und die Erkenntnisse in der Anlayse und der Umsetzungen können in die Konzeptentwicklung des "Codypp-Net" Projektes einfließen.

  Mit Unterstützung von Prof. J. Walter, Prof. Dr. M. Strohrmann Wintersemester 2018/2019