IoT für Webentwickler

IoT für Webentwickler: Tipps und Tricks für den Einstieg
Keine Kommentare

Der ein oder andere hat vielleicht schon die ersten Schritte mit Maker Boards wie einem Arduino gemacht und erfolgreich erste Projekte umgesetzt. Für die ersten Schritte im Internet der Dinge reichen Maker-Hardware und -Software ebenfalls aus. Dann kommt aber schnell die Frage auf, wie es weitergehen kann. Wo und wie wird eigentlich Code für Mikroprozessoren kompiliert? Kann man dann Unit-Tests erstellen oder die eigene Firmware auf einem CI-Server bauen lassen? Ist der Code auf andere Embedded Boards oder Frameworks transportierbar, braucht man ein Embedded-Betriebssystem? Diesen und anderen Fragen wollen wir in der Artikelserie nachgehen und fangen hier mit den Grundlagen rund um den Technologiestack an.

Arduino genießt in der Maker-Community ein hohes Ansehen, u. a. wegen der guten und leicht einsetzbaren Kombination aus Entwickler-Boards und den dazu passenden Werkzeugen. Dabei muss man sich als Entwickler fast keine Details zur verwendeten Elektronik anschauen – sowohl das Framework als auch der Beispielcode lassen sich mit den Werkzeugen wie der Arduino IDE direkt einsetzen. Was aber geschieht in der Werkzeugkette „hinter den Kulissen“?

Die Embedded-Hardware ist fast immer über sogenannte Developer-Boards zugänglich. Diese bestehen aus einem Mikrocontroller (MCU) mit integriertem oder zusätzlichem externen Speicher auf dem Board, Ein-/Ausgabe-Pin für den Anschluss von Sensorik bzw. Aktorik und einer Schnittstelle zum Anschluss an und zur Kommunikation mit dem PC, in aller Regel USB. Hierüber wird das Board direkt mit Strom versorgt (5 V über USB) und je nach Board auf eine niedrigere Spannung heruntergeregelt. Damit man die Mikrocontroller über eine serielle Schnittstelle ansprechen kann, bekommen die Boards einen Interfacechip mit, z. B. von FTDI oder Silicon Labs.

Wo liegen die großen Unterschiede zwischen den verfügbaren Optionen? Da sind erst einmal die verwendeten MCUs zu nennen. Sie reichen von 8-Bit-MCUs beispielsweise beim Arduino Uno über 16-Bit-MCUs, wie einem MSP430 von Texas Instruments bis zu 32-Bit-MCUs, z. B. aus der Reihe ARM Cortex-M. Das Ganze ist mit einer Taktfrequenz gepaart, die vom einstelligen MHz-Bereich bis zu mehreren hundert MHz reichen kann. Ein Mehr an Geschwindigkeit und Rechenleistung der MCU erlaubt schnellere oder leistungsintensivere Anwendungen (wie moderne Verschlüsselung), bedingt aber auch einen höheren Energiebedarf.

Ein weiteres Unterscheidungsmerkmal liegt in Funkverfahren, die entweder im Chip oder auf dem Board integriert sind. Für erste Projekte im Heimnetz ist es hilfreich, wenn das Entwickler-Board von Haus aus WiFi mitbringt. Andere mögliche Funkausstattungen sind beispielsweise BLE, LoRa oder SigFox.

Um für diese MCUs bzw. Boards programmieren zu können, braucht es Firmware, also Software, die im Chip eingebettet wird. An dieser Stelle gibt es für Entwickler im Prinzip viel Auswahl. Während „kleine“ MCUs in C oder C++ programmiert werden, stehen für die leistungsstärkeren 32-Bit-Varianten zusätzlich Skriptsprachen zur Verfügung, z. B. Embedded Lua oder Untermengen von Python (MicroPython) und JavaScript (Espruino).

Durch die verwendete Sprache wird häufig das Firmwareframework vorgegeben, das Standardfunktionalitäten wie Pin-Input/-Output oder Kommunikation mitbringt. So ist zum Beispiel das Arduino-Framework in C++ realisiert, womit auch die Sprache für die eigene Firmware festgelegt ist. Auch wenn Webentwickler andere Sprachen gewöhnt sind: Für die allermeisten „Sketches“, also Arduino-Programme, sind keine tiefgreifenden C++-Kenntnisse notwendig.

Shopping for Embedded

Wie kann man nun herausfinden, welche Kombination aus Hardware, Framework und Software für den eigenen Einstieg in das Thema sinnvoll ist? Diese Frage lässt sich aus mehreren Perspektiven beantworten: Wenn man an Entwicklung in einer bestimmten Programmiersprache interessiert ist, benötigt man ein Board mit ausreichend Leistung, für das eine passenden Firmware mit Interpreter vorliegt. Das gilt vor allem bei Skriptsprachen. Als ein Beispiel seien Boards von Pycom  genannt, die in MicroPython programmiert werden. Für C oder C++ sind praktisch alle Boards geeignet.

Falls neben der Geräteentwicklung auch eine Plattformintegration wichtig ist, fällt die Wahl eher auf Hersteller, die beides bedienen. Ein Beispiel hierfür ist Particle, deren Boards über den gleichnamigen Cloud-Service fernsteuerbar sind.

Sobald man einen bestimmten Anwendungsfall im Hinterkopf hat, der besondere Sensorik, Aktorik oder auch Netzwerkfähigkeiten voraussetzt, ist ein Board hilfreich, das diese Anforderungen technisch bedienen kann und wofür passende Bibliotheken vorliegen. Als Beispiele für Netzwerkfähigkeiten lassen sich ESP8266/ESP32 und die MKR Boards von Arduino nennen, ersteres integriert WiFi und BLE, letztere neben WiFi auch SigFox oder GSM.

Wenn neben Prototyping auch der Pfad in Richtung professionellerProduktentwicklung möglich sein soll, sind die Wahlmöglichkeiten etwas eingeschränkt. Hier stehen Aspekte wie Stromsparen und Preis, aber auch die langfristigen Lieferfähigkeiten im Vordergrund. In den allermeisten Fällen wird hier C/C++ mit herstellerangepassten Embedded-Betriebssystemen programmiert.

Werkzeugkette

Nachdem die Wahl auf ein Board oder ein Entwicklungsframework gefallen ist, stellt sich die Frage, wie das Ganze konkret programmiert und bestückt wird. Im Fall von Boards, die Arduino-kompatibel sind, gelingt der Einstieg z. B. über die Arduino IDE. Wenn das Board unterstützt wird, kann es im Menü bzw. dem Board-Verwalter ausgewählt werden. Ähnliches gilt für die Werkzeugketten anderer Hersteller wie Particle oder Arm Mbed OS. In der Regel benötigt man folgende Teile, wenn in C oder C++ entwickelt werden soll:

Einen Crosscompiler, der in der Lage ist, C-/C++ Code für den Prozessor der Zielhardware zu übersetzen. Im Open-Source-Bereich ist dies häufig der GCC in einer Variante für das Target, zum Beispiel arm-none-eabi-gcc für ARM-Cortex-Prozessoren/MCUs oder xtensa-lx106-elf-gcc für die ESP-Reihe von Espressif.

Zum Compiler gehören weitere Tools wie Linker, Preprocessor, Archiver und andere, die zusammenarbeiten, um ein ausführbares Binary für die Zielhardware zu erstellen.

In den allermeisten Fällen wird ein Werkzeug zum Flashen benötigt, um das Firmware-Binary auf das Board zu bekommen – häufig über USB, in Kombination mit einem seriellen Port oder über einen Programmer. Manchmal lassen die USB-Schnittstellen der Boards es zu, das Board wie ein Laufwerk anzusprechen und das Binary (oder das Skript bei Boards, die Skriptsprachen unterstützen) direkt in ein Dateisystem zu kopieren.

Diese ganzen Werkzeuge kann man problemlos herunterladen und manuell installieren. Das ist allerdings viel Aufwand und durchaus fehlerträchtig, wenn z. B. Versionen verschiedener Werkzeuge nicht gut zusammen arbeiten. Toolchain-Managementlösungen, beispielsweise von Particle oder Arm Mbed yotta, meistern die Aufgabe, häufig aber nur für die eigene Embedded-Plattform.

Plattformübergreifend mit PlatformIO

Einen anderen Weg beschreitet PlatformIO. Dabei handelt es sich um ein „Open Source Ecosystem“, dessen Ziel die Vereinfachung von IoT-Entwicklung ist. Dabei soll eine Cross-Plattform-Entwicklungsumgebung geboten werden, keine Lösung für einen einzelnen Hersteller.

Im Kern managt PlatformIO die Embedded Toolchain, die man braucht, um für sein Board zu entwickeln. Dazu gehören neben den oben aufgeführten Werkzeugen auch die Firmware-Frameworks und Embedded-Betriebssysteme, mit denen der eigene Code zusammengelinkt werden muss. PlatformIO ist Open Source und steht unter der Apache-2.0-Lizenz.

Die Software ist in der „Core“-Variante als reine Kommandozeilenapplikation für Windows, OS X und Linux verfügbar, läuft aber in den meisten Fällen über die Integration in eine Entwicklungsumgebung. Hier werden zahlreiche bekannte und beliebte IDEs unterstützt: Von Haus aus werden Atom und VS Code empfohlen, möglich sind aber auch JetBrains CLion, Eclipse, Qt Creator und Cloud-basierte IDEs wie Cloud9, Codeanywhere oder Eclipse Che. So muss der Entwickler in vielen Fällen seine geliebte IDE nicht verlassen, sondern kann Embedded-Entwicklung über ein Plug-in nachinstallieren.

Woraus besteht PlatformIO nun genau? Im Kern ist die Software in Python implementiert und fußt auf dem programmierbaren Build-System SCons. Sie ist in der Lage, Werkzeugketten für eine Vielzahl an Hardware-Targets bei Bedarf automatisch herunterzuladen und in ein privates Verzeichnis zu installieren. Das gleiche gilt für Embedded-Frameworks, die passend zum Hardware-Target automatisch lokalisiert, heruntergeladen und dem Build-System zur Verfügung gestellt werden.

Wer sich an eigene C-/C++-Projekte und die etwas mühsame Arbeit mit Makefiles, Include- und Library-Pfaden erinnert, kann hier aufatmen: Dank SCons werden Source-Files innerhalb des eigenen Projekts automatisch gefunden und mit den Sources der Embedded-Frameworks verlinkt. PlatformIO integriert außerdem ein Library-Management, sodass man externe Bibliotheken (wie z. B. für bestimmte Sensoren, Displays oder Netzwerkprotokolle) einfach finden und dazu installieren kann.

Fazit

Embedded-Entwicklung kann äußert vielfältig sein. Glücklicherweise ist Development-Hardware günstig zu bekommen; eigenen Projekten steht dank zahlreicher Dokumentation und Tutorials aus dem Netz nicht viel im Weg. Welche Aspekte sind bei der Softwareentwicklung wichtig? Aus meiner Sicht gehört neben der Verfügbarkeit von Hardware auch die Verfügbarkeit von Software, Tutorials und einer Community dazu. Hier ist es hilfreich, wenn der/die Hersteller auf Open Source setzen. Außerdem freuen sich Webentwickler über funktionierende Tools, die sich leicht und für alle Entwicklungsplattformen installieren lassen, am besten über Paketmanager, und die integriert in bestehende IDEs sind. PlatformIO erfüllt viele dieser Aspekte.

In den kommenden Artikel werden wir sehen, wie man mithilfe von Open-Source-Werkzeugen wie PlatformIO mit der IoT-Entwicklung beginnt und Projekte von Prototypen zu professionellen Targets ausbauen kann.

Entwickler Magazin

Entwickler Magazin abonnierenDieser Artikel ist im Entwickler Magazin erschienen.

Natürlich können Sie das Entwickler Magazin über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. In unserem Shop ist das Entwickler Magazin ferner im Abonnement oder als Einzelheft erhältlich.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu:
X
- Gib Deinen Standort ein -
- or -