Die Firmware für den LPC4330-Mikrocontroller von NXP ist in C mit der Entwicklungsumgebung LPCXpresso erstellt worden. Dabei werden verschiedene Bibliotheken eingesetzt, z.B. Cortex Microcontroller Software Interface Standard Digital Signal Processing (CMSIS DSP) zur digitalen Signalverarbeitung für ARM-Cortex-Mikrocontroller. Neben den grundlegenden mathematischen Funktionen sind hiermit auch komplexere Funktionen, wie beispielsweise die für die Audiosignalverarbeitung notwendige Fast-Fourier-Transformationen, verfügbar. Die Bibliothek kann sowohl als Quellcode als auch als vorkompilierte Bibliothek in ein Programm eingebunden werden. Der entscheidende Vorteil bei der CMSIS-DSP-Bibliothek zeigt sich in der Optimierung für die verschiedenen Cortex-Mikrocontroller. Für den im Projekt verwendeten Cortex-M4 ergibt sich durch den Einsatz dieser Bibliothek, dass der Befehlssatz des M4-Kerns inklusive der SIMD-Befehle (Single Instruction Multiple Data) effektiv ausgenutzt werden kann, was zu einem großen Leistungsvorteil führt.
Die zweite wichtige Bibliothek ist LPCopen, die die wichtigsten Treiber für die Hardware-Kommunikation liefert sowie zusätzliche und optimierte Treiber für den LPC4330 bietet.
Für die Netzwerkkommunikation über die Powerline-Transceiver (Bild 9) wird der Lightweight TCP/IP Stack (LwIP [5]) eingesetzt, der im Vergleich mit einem üblichen TCP/IP-Stack nur relativ wenig Ressourcen benötigt, z.B. einen Arbeitsspeicher von lediglich 50 KB. Es werden unter anderem die Protokolle IPv4, TCP (Transmission Control Protocol) und UDP (User Datagram Protocol) sowie DHCP (Dynamic Host Configuration Protocol) unterstützt. LwIP ist unter der BSD-Lizenz (Berkeley Software Distribution) geführt, sodass es zulässig ist, den Code einzusetzen und auch zu modifizieren, solange die Lizenzbedingungen in jeder Datei als Kommentar in den ersten Zeilen stehen.
Für den Datenaustausch zwischen dem Mikrocontroller im Maschinenraum und dem Webserver, der vom Raspberry Pi im Basissystem auf dem Kabinendach realisiert wird, ist ein JSON-basiertes Format (JavaScript Object Notation) definiert worden. Die Daten werden im Klartext in einen String geschrieben, der anschließend über eine Kommunika-tionsschnittstelle versendet wird. Im String liegen die Daten als Liste von Name-Wert-Paaren vor.
In der Praxis zeigte sich jedoch, dass die Generierung eines JSON-Strings mit dem LPC4330-Mikrocontroller viel zu hohe Ausführungszeiten (20–35 ms) zur Folge hat, was im Wesentlichen in der Konvertierung vom Gleitkomma-Format in einen String begründet ist. Grundsätzlich sind derartige Konvertierungen mit einem Mikrocontroller relativ zeitaufwendig, weshalb ein neues, binäres Protokoll definiert wurde, bei dem die Daten nicht im Klartext, sondern als Byte-Parameter dargestellt werden, was zu akzeptablen Ausführungszeiten von 100 µs bis maximal 250 µs führt. Das neue Protokoll besteht aus einem Header mit fester und einer Nutzlast mit variabler Länge sowie drei verschiedenen Datenpaket-Typen: Client-Server, Server-Client, FFT-Paket.
Der Raspberry Pi im Basissystem auf dem Kabinendach stellt ein WLAN mit Verschlüsselung und Password-geschützter Benutzeranmeldung zur Verfügung (Bild 10). Weil ein Zugriff auf das Basissystem nur bei aktiver WLAN-Verbindung möglich ist, wurde keine separate Authentifizierung und auch keine Verschlüsselung der WebSocket-Verbindung implementiert.
Die Seite des Webservers, auf der die Parameter graphisch dargestellt werden, kann mit jedem beliebigen Internet-Browser über eine bestimmte URL erreicht werden, wofür sich das Endgerät, z.B. Smartphone, Tablet-PC, Laptop etc., natürlich im Funknetzwerk (WLAN) des Basissystems befinden muss.
Der finale Webserver basiert auf Netty [6], einem Java-Framework, das mit einer Hyper-SQL-Datenbank kommuniziert, um die Messwerte zu speichern. In der Webseite werden die letzten 120 Messwerte des ausgewählten Parameters grafisch dargestellt und fortlaufend aktualisiert. Über die Schaltknöpfe lässt sich der jeweils darzustellende Sensorwert selektieren (Bild 11).
Die Messdaten werden auf Client-Anforderung (http Pull Server) im JSON-Format übertragen und gleichzeitig in die lokale Datenbank sowie in einen Cache (120 Datensätze) geschrieben, um eine möglichst schnelle Weiterverarbeitung der Daten während der Datenerfassung zu ermöglichen. Mit Hilfe des TCP-Servers wird eine bidirektionale Verbindung zum NXP-Mikrocontroller im Maschinenraum über Powerline aufgebaut, der den Client bildet. Der TCP-Server besteht dabei aus zwei wesentlichen Teilen: Einem TCP-Server in der Klasse TcpServer und der Klasse Sensordaten für die JSON-Objekte. Einstiegspunkt in die Programmierung eines TCP-Servers in Java ist ein ServerSocket, der dabei den Endpunkt einer Verbindung repräsentiert. Ein Socket wird mit einem Port und einer IP-Adresse erstellt.
Die Datenbank (HSQLDB, [7]) im Basissystem enthält die einzelnen Sensordaten mit den Zeitstempeln und belegt lediglich 60 bis 70 MB im Arbeitsspeicher, womit der Raspberry Pi nicht überfordert ist. Die Verbindung zwischen der Datenbank und der Applikation wird über JDBC Connection realisiert. JDBC [8] ist ein Teil der Java-Standardbibliotheken und wird für den Zugriff auf Datenbanken genutzt, wodurch die Programmierung unabhängig von der verwendeten Datenbank ist.
Der Webserver bietet nicht nur die Darstellung der Sensordaten, sondern auch die Konfigurationsmöglichkeit für verschiedene Parameter, wie die Anzahl der Sektoren oder den Treibscheibendurchmesser mit Angaben für die Messintervalle der einzelnen Sensoren:
Zu den Betriebsparametern zählen:
Das Touch-Display ist in der finalen Version nicht mehr notwendig, weil sich sämtliche Einstellungen und Updates nunmehr über das per WLAN verbundene Endgerät vornehmen lassen, d.h. nach der Montage der Elektronik auf dem Dach der Aufzugskabine (Bild 10) kann dieser Teil quasi als erledigt betrachtet werden.
Das Basissystem mit dem Raspberry Pi arbeitet seit über einem Jahr ohne Probleme, inklusive der WLAN-Kommunikation zwischen dem Raspberry Pi und Endgeräten innerhalb wie außerhalb der Kabine. In der Praxis zeigte sich, dass die Funkkommunikation mit einem Notebook, das die Entwicklungsumgebung nebst den notwendigen Werkzeugen, z.B. PuTTY, enthält, vom Maschinenraum aus über sieben Stockwerke bis hinunter in den Keller (Kanalwirkung) zuverlässig funktioniert.
Literatur
[1] Wenn Aufzüge sprechen lernen. TÜV Nord Group, www.tuev-nord-group.com/de/innovation/wenn-aufzuege-sprechen-lernen
[2] LPC4300 Series: High Performance Microcontrollers (MCUs) based on Arm Cortex-M4/M0 Cores. NXP,
www.nxp.com/products/processors-and-microcontrollers/arm-based-processors-and-mcus/lpc-cortex-m-mcus/lpc4300-cortex-m4-m0:MC_1403790133078?&cof=0&am=0&tab=Products
[3] Präzisions-Barometer Sensormodul MS5611. Amsys, www.amsys.de/products/ms5611.htm
[4] Die Fourier-Transformation, TU Chemnitz, www.tu-chemnitz.de/informatik/ThIS/downloads/courses/ws02/datkom/Fouriertransformation.pdf
[5] LwIP - A Lightweight TCP/IP stack – Summary. Free Software Foundation Inc., http://savannah.nongnu.org/projects/lwip
[6] Netty Documentation. Netty project, http://netty.io/wiki/index.html
[7] HyperSQL. The HSQL Development Group, http://hsqldb.org
[8] The Java Tutorials, Establishing a Connection. Oracle, https://docs.oracle.com/javase/tutorial/jdbc/basics/connecting.html
Der Autor
Klaus Dembowski
ist Wissenschaftlicher Angestellter im Institut für Mikrosystemtechnik an der Technischen Universität Hamburg. Sein Zuständigkeitsbereich beinhaltet die Entwicklung von Hard- und Software für Mikrosysteme mit dem Schwerpunkt Anwendungen von Energy Harvesting. Er wurde 2011 und 2017 von der Redaktion der Elektronik für seine Fachaufsätze »Sensornetze mit energiesparender Funktechnik« und »Funkelektroden zur Messung bioelektrischer Signale: EKG ohne Kabel« als »Autor des Jahres« ausgezeichnet.
dembowski@tuhh.de