Für seine Entwicklungsumgebung ESP-IDF legte Espressif großen Wert darauf, die Anwendung für Entwickler so einfach wie möglich zu machen. Innerhalb des SDKs gibt es APIs (Application Programming Interface) und POSIX-Thread-kompatible APIs (POSIX – Portable Operating System Interface) zur Steuerung der Hardware, Treiber, und C++-Bibliotheken (stdlib), sogar glob, regex, tar und miniz werden unterstützt. All dies macht die Programmierung eines ESP32-Systems relativ einfach und auch die Portierung existierender Software wird damit deutlich erleichtert.
Das ESP-IDF hat auch ein paar hilfreiche Komponenten, die bei der Entwicklung robuster Anwendungen helfen, darunter ein SPI-Dateisystem (Serial Peripheral Interface) mit Unterstützung sowohl von FAT (File Allocation Table) als auch SPIFFS (Serial Peripheral Interface Flash File System). Mit dem Dateisystem lassen sich Log-Dateien und Datensätze speichern wobei das SPI-EEPROM einen Wear Leveling Layer beinhaltet, der dabei hilft, die Anzahl möglicher Schreiboperationen zu vergrößern. Parameter lassen sich dabei separat im nichtflüchtigen Speicher (NVM – Non-volatile Memory) sichern, wodurch sie durch Formatierung des Dateisystems nicht beeinträchtigt werden. Und sollte die Größe des SPI-Flash-Speichers nicht reichen, kann auch die SD-Card-Bibliothek genutzt werden, um externen Speicher einzubinden.
Eine Cloud-Anbindung ist z.B. wesentlich für Anwendungen zum Monitoring und zur Steuerung großer Anlagen. Die Entwicklungsumgebung ESP-IDF beinhaltet Funktionen zur Verbindung mit der Amazon-Cloud (AWS IoT – Amazon Web Services IoT) und mit der Microsoft-Cloud (Azure IoT), sowie eine API für Kurznachrichten (TelegramBot) und die essenziellen IoT-Protokolle CoAP (Constrained Application Protocol) und MQTT (Message Queuing Telemetry Transport).
Das leichtgewichtige Internetprotokoll (lwIP) ist ein IPv4/IPv6-TCP/IP-Protokollstapel mit einigen interessanten Eigenschaften, wie etwa Namensauflösung DNS/mDNS (Domain Name System/Multicast DNS), SNMP (Simple Network Management Protocol), DHCP (Dynamic Host Configuration Protocol), AutoIP zur selbständigen Konfiguration von Netzwerken, PPP (Point-to-Point Protocol) und L2TP (Layer 2 Tunneling Protocol) – die Basis für Netzwerke. Damit lassen sich z.B. DHCP-Server, SNTP-Client/Server (Simple Network Time Protocol), Ping-Werkzeuge, HTTP(S)-Client/Server (Hypertext Transfer Protocol Secure), CoAP-Client/Server und OpenSSL-Client/Server (SSL – Secure Sockets Layer), realisieren. Für HTTP/2-Client/Server ist im EDF-SDK die C-Bibliothek Nghttp2 integriert, diese Implementation wird beispielsweise auch für Alexa Voice Services (AVS) eingesetzt. Kryptographische Funktionen erlauben die beiden Bibliotheken mbedTLS und libsodium [3] – beide sind ähnlich, haben aber ihre jeweiligen Vor- und Nachteile.
Die FreeRTOS-APIs beinhalten das Task-Management, einschließlich Scheduler und Monitoring sowie Datenstrukturen wie beispielsweise Queues/Stacks, Ringbuffer und Locking-Mechanismen wie Semaphoren und Mutexe (von Mutual Exclusion).
Das Betriebssystem FreeRTOS ist kostenlos, kann aber nicht alle Wünsche erfüllen. Für manche Projekte sind Funktions- oder Wartungsgarantien erforderlich und technischer Support. Für solche Fälle eignet sich die kommerzielle Alternative OpenRTOS [5], das exakt gleiche Betriebssystem aber mit einem anderen Lizenzmodell. Eine weitere Alternative für sicherheitskritische Anwendungen ist SafeRTOS [6].
Espressif hat zum Debugging [7] OpenOCD (Open On-Chip-Debugger) [8] zusammen mit der Unterstützung von JTAG implementiert und das ESP-IDF bietet eine Unit-Testapplikation basierend auf Unity (Unit Testing for C, [9]. Auch Nutzer von PlatformIO können diese Debugging-Verfahren verwenden.
Die Entwicklungsumgebung für den ESP32 ist unter Apache [10] lizenziert, allerdings ist bei Entwicklung kommerziell verwendeter Implementierungen bei jeder Software-Komponente das Lizenzierungsmodell unbedingt zu prüfen. FreeRTOS hat ein anderes Lizenzierungsmodell, einige LCD-Treiber haben wiederum andere etc. Der beste Rat an dieser Stelle ist es, einen spezialisierten Rechtsanwalt zu konsultieren, bevor eine kommerzielle Anwendung auf den Markt gebracht wird.
Die Einarbeitung in eine neue Software-Entwicklungsumgebung (SDK) mit all seinen Spezialitäten und Limitierungen folgt einer Lernkurve, die sehr steil ist. Es kann viele Stunden dauern, bis ein erstes, einfaches Programmbeispiel fehlerfrei läuft. Der Wechsel zu einem anderen Echtzeit-Betriebssystem (RTOS) kann daher großen Aufwand bedeuten – und häufig stellt sich später heraus, dass dort die gleichen Strukturen und APIs verwendet werden.
Aber warum sollte ein Entwickler überhaupt ein populäres RTOS einsetzen? Zum einen beschleunigt dies ganz erheblich die Einarbeitung in ein komplexes SoC mit seiner technischen Dokumentation von mehreren Hundert Seiten. Auf der anderen Seite beschleunigt es aber auch die Entwicklung eigener Anwendungen und erhöht die Sicherheit, weil vielfach getestete Bibliotheken zum Einsatz kommen. Dies ist einer der großen Vorteile als Mitglied der inzwischen doch recht großen Espressif-Entwicklergemeinde: Viele Entwickler haben sich schon in die technische Dokumentation eingelesen, Treiber und Beispielcode entwickelt, Probleme identifiziert, gelöst und in der Community veröffentlicht. Wenn auch nicht alle Beiträge von bester Qualität sind, so gibt es doch meist zu jeder Aufgabenstellung wertvolle Hinweise und hilfreiche Lösungsansätze.
Der ESP32 kann zusätzlichen mit zwei alternativen Echtzeit-Betriebssystemen genutzt werden: Simba [11] und NuttX [12].
Obwohl das SoC ESP32 von Espressif kein Ersatz für kommerziell erhältliche Speicherprogrammierbare Steuerungen und SCADA-Geräte (Supervisory Control and Data Akquisition) ist, kann es diese Zielsetzungen doch recht elegant unterstützen, als Sensor- oder Aktor-Modul beispielsweise (Bild 5). Kommunikations- und Steuerungsaufgaben sind eine recht einfache Übung für das SoC und falls ein paar Ein-/Ausgänge fehlen sollten, so kann ein simpler externer Multiplexer helfen, solange die Zeitvorgaben dabei nicht verletzt werden.
Wie aber steht es um die Software? Derzeit gilt Node-RED [13] als populärste IoT-Entwicklungs- und Steuerungssoftware (Bild 6). Sie ist einfach zu bedienen und es existieren viele Tutorials dazu – sowohl als Fachaufsätze als auch als Videos. Weitere Optionen sind Eclipse Kura [14] und Project Flogo [15].
Geht es hingegen mehr um industrielle Anwendungen, werden andere Frameworks oder Entwicklungsumgebungen bevorzugt, hier eine kleine Auswahl aus der Open-Source-Gemeinde:
Software-Entwicklungsumgebungen bieten eine hervorragende Möglichkeit, die Eigenschaften eines Prozessors zu verstehen. Obwohl C++ eine einfach zu erlernende Sprache ist, gibt es mitunter Anforderungen, die Möglichkeiten des ESP32 in einer anderen Programmiersprache zu beschreiben – beispielsweise wenn Quereinsteiger aus anderen Bereichen, wie z.B. Physik oder Biologie, Machbarkeitsstudien (PoC – Proof of Concept) realisieren wollen.
Als Alternativen zu C++ und FreeRTOS können genutzt werden:
[1] Industry 4.0: the fourth industrial revolution – guide to Industrie 4.0. i-SCOOP, www.i-scoop.eu/industry-4-0
[2] Industry 4.0 Market by Technology, Vertical, Region - Global Forecast to 2022. Markets and Markets, Report SE 5279, Mai 2017, https://www.marketsandmarkets.com/Market-Reports/industry-4-market-102536746.html
[3] The Sodium crypto library (libsodium). www.gitbook.com/book/jedisct1/libsodium/details
[4] PlatformIO is an open source ecosystem for IoT development. https://platformio.org
[5] OpenRTOS – A New Approach To Embedded Software. Wittenstein high integrity systems, www.highintegritysystems.com/openrtos
[6] SafeRTOS – Safety Certified RTOS. Wittenstein high integrity systems, www.highintegritysystems.com/safertos
[7] JTAG Debugging. Espressif Systems, ESP-IDF Programming Guide, https://dl.espressif.com/doc/esp-idf/latest/api-guides/jtag-debugging/index.html
[8] Open Source On-Chip Debugger OpenOCD. Hochschule Augsburg, http://www.openocd.net
[9] VanderVoord, M.; Karlesky M. und Williams, G.: UNITY – Unit Testing for C (especially Embedded Software). http://www.throwtheswitch.org/unity
[10] Licensing of Distributions. The Apache Software Foundation, www.apache.org/licenses
[11] Moqvist, E.: Welcome to Simba’s documentation. http://simba-os.readthedocs.io
[12] NuttX Real-Time Operating System. www.nuttx.org
[13] Node-RED – Flow-based programming for the Internet of Things. JS Foundation, https://nodered.org
[14] Eclipse Kura. www.eclipse.org/kura.
[15] Project Flogo – Ultralight Edge Microservices Framework. www.flogo.io
[16] Rapid SCADA. http://rapidscada.org.
[17] Eclipse NeoSCADA. www.eclipse.org/eclipsescada
[18] IndigoSCADA Section. Enscada s.r.l., www.enscada.com/a7khg9/IndigoSCADA.html
[19] ScadaBR. Sensorweb, www.scadabr.com.br
[20] SZARP - Open Source SCADA Software. https://szarp.org/en
[21] Lua RTOS for ESP32. https://github.com/whitecatboard/Lua-RTOS-ESP32
[22] MicroPython – a lean and efficient Python implementation for microcontrollers and constrained systems. https://github.com/micropython/micropython
Dror Gluska
ist ein erfahrener Software-Entwickler und ein »Maker«, lange bevor der Begriff »Maker« populär wurde.
Er ist stets auf der Suche nach Dingen, die es zu entwickeln und verbessern gibt, sieht sich aber auch als Mentor und Unterstützer für junge Software-Entwickler. Sein Leitsatz ist: »Wenn es nicht kaputt ist, mach‘ es kaputt und finde so heraus, wie es funktioniert«.
Kontakt per E-Mail-Formular seines Blogs: http://drorgluska.com
Stefan Tauschek
studierte Nachrichtentechnik an der Fachhochschule München und arbeitete nach seinem Abschluss über mehrere Jahre in der Entwicklung von Multimediakomponenten, Videoverarbeitung und Streaming-Media-Verfahren.
Heute ist er Applikationsingenieur und technischer Berater bei Macnica und unterstützt Kunden bei der Realisierung von Projekten aus dem Bereich Bildverarbeitung, Netzwerke und Industrieautomatisierung.
stefan.tauschek@macnica.com