Zum Hauptinhalt springen

Mikrocontroller: Softwareentwicklung

·1343 Wörter·7 min
Mikrocontroller Programmieren VSCode MicroPython PlatformIO Arduino
Inhaltsverzeichnis
Mikrocontroller: Softwareentwicklung

Die Entwicklung von Software für Mikrocontrollern war in der Vergangenheit viel Komplizierter und aufwändiger als das heutzutage ist. Zum Glück wurde eifrig an der Benutzbarkeit entwickelt und der Einstieg in die Materie deutlich vereinfacht. Arduino hat es möglich gemacht mit einfachen und erschwinglichen Mikrocontrollerboards (z.B.: Arduino Uno) und ihrer Entwicklungsumgebung “Arduino IDE” und zahlreichen vorgefertigten Softwarebibliotheken, dass jeder mit minimalen Programmierkenntnissen (C++) schnell und einfach erste Erfolge mit Mikrocontrollern erzielen kann. Was Arduino hierbei so einzigartig macht, ist das reibungslose Zusammenspiel von Hardware und Software.

Es gibt unzählige Möglichkeiten Software für Mikrocontroller zu entwickeln, ich möchte in diesem Beitrag jedoch nur über ein paar wenige etwas genauer eingehen und deren Vor- und Nachteile aufzeigen. Dabei werden Themen wie: Modularität, Komplexität, Skalierbarkeit, Debugging, Performance und für wen diese Option sich eignet.

Arduino
#

Arduino ist eine Mikrocontroller-Plattform, die Software und Hardware unter einen Hut bring und für jedermann erschwinglich und nutzbar ist. Die Hardware ist dabei immer open Source, das heißt, dass die Schaltpläne und Layouts von Arduino Boards frei zugänglich ist, diese modifizierbar und einfachen Überblick über ihre Funktionalität geben. Die Idee bzw. Absicht von Arduino ist, dass Schüler, Designer, Künstler, Hobby-Bastler … mit minimaler Einarbeitung ihre Bastel-Projekte mit modernen Mikrocontrollern verwirklichen können.

Die einfache Benutzung, eine simple Programmierentwicklung sowie günstige Mikrocontrollerboards haben Arduino zum Erfolg verholfen. Arduino Boards brauchen auch keine speziellen Programmiergeräte, sie haben meist einen USB-Anschluss über dem man direkt die Hardware programmieren kann. Bootloader sei Dank 😜

Um mit Arduino loszulegen muss man lediglich die Arduino IDE downloaden, installieren, starten, paar Zeilen Code hinzufügen und los geht es.

Installiert man die Arduino IDE wird man mit folgendem Interface empfangen:

Arduinio IDE

In der Dropdown-Liste wählt man den gewünschten Mikrocontroller aus. Mit den Haken Symbol wird der Code kompiliert und das hex File generiert und der Rechtspfeil lädt den generierten Code auf den Mikrocontroller. Der Code auf dem Screenshot ist noch leer, jedoch enthält er schon die Grundstruktur eines Standard Arduino Programms. Einstiegspunkt ist hierbei die Setup Funktion, diese wird zu Beginn einmalig ausgeführt. Danach wird die loop Funktion periodisch aufgerufen.

Man kann mit sehr wenig Aufwand und Basiswissen in C bzw. C++ schnell mithilfe von Arduino Hard- und Software sein eigenes Projekt in die Wirklichkeit umsetzen.

Stärken:

  • Einsteigerfreundlich
  • einfache Bedienung
  • viele Beispiele und online Hilfe verfügbar
  • Unterstützung von Arduino Soft- und Hardware
  • integrierter Library Manager
  • Performance (kompilierter Code)

Schwächen:

  • kein klassisches Debugging möglich
  • IDE zu wenig Features für komplexere Projekte
  • IDE nicht erweiterbar (Plugins)
  • Arbeiten und Navigieren mit mehreren Dateien / Ordnern

Ich persönlich verwende die Arduino IDE nicht, denn sie bietet mir zu wenig Features, die verfügbaren Softwarebibliotheken sind auch sehr hilfreich und werden sogar oftmals von Hardwareherstellern direkt angeboten. Arduino Hardware hingegen verwende ich öfters. Ich besitze einige Arduino Boards und bin sehr zufrieden damit. Für Anfänger ist diese Entwicklungsumgebung jedoch wärmstens zu empfehlen, da ein Start in die Welt der Mikrocontroller nicht einfacher sein kann als mit der Arduino Plattform.

PlatformIO
#

PlatformIO ist ein Plugin für Visual Studio Code (VSCode), und bietet eine plattformübergreifende Entwicklungsumgebung für unterschiedlichste Mikrocontroller. Dabei spielt es keine Rolle ob man für spezielle Mikrocontroller bzw. Mikrocontrollerboards von Arduino, Raspberry Pi, Microchip, ESP32, … entwickeln will, denn man kann mit PlatformIO “unabhängig” von der Plattform entwickeln (über 1500 unterschiedliche Mikrocontrollerboards werden “out of the box” unterstützt). “Unabhängig” weil es oftmals spezifische Eigenheiten gibt die auf anderen Controllern nicht verfügbar sind. Das Arduino Framework und Arduino

Bibliotheken können mit dem integrierten Libraries Manager eingebunden werden, Profis können dies manuell und mit Versionskontrolle einbetten. PlatformIO setzt dabei auf eine zentrale Konfigurationsdatei (sie kann für jedes Projekt definiert werden), in der Boards, Frameworks, Com Ports,… definiert werden können. Will man seinen Code auf einen anderen Mikrocontroller portieren, muss man oftmals nur kleine Änderungen in diesem File vornehmen. Zu diesem Thema wir des in Zukunft definitiv noch weitere Beiträge geben.

PlatformIO setze dabei wie Arduino auf C bzw. C++ als Programmiersprache. Die passenden Compiler werden abhängig von den definierten Mikrocontrollerboards im Hintergrund ganz automatisch geladen und konfiguriert.

Will man mit PlattformIO entwickeln, muss man lediglich Visual Studio Code installieren und über den integrierten Extension Manager “PlatformIO” installieren. Danach kann man sofort mit der Entwicklung loslegen und wird mit den bekannten VSCode Besonderheiten belohnt. Dateimanager, Git Integration, Terminals, …. sollte es noch offene Wünsche geben kann man sich zusätzliche Erweiterungen installieren.

Erstellt man mit PlatformIO ein neues Projekt muss man lediglich einen Projektnamen, das zu verwendende Board und ein Framework angeben. Die Software erstellt automatisch einen Ordner mit allen nötigen Dateien, um direkt loslegen zu können. Das Projekt kann direkt kompiliert werden, denn es enthält bereits die nötige Konfigurationsdatei und Code für den Mikrocontroller steht auch bereit. Das Beispiel sieht vom Aufbau gleich aus wie in der Arduino IDE, kein Wunder, haben wir auch das Arduino Framework ausgewählt 😜

PlatformIO

PlatformIO beinhaltet nahezu die gesamte Hard- und Software, die Arduino auch bereitstellt, es kann lediglich zu einer zeitlichen Verzögerung kommen, denn die Arduino Bibliotheken bzw. Arduino Core muss für PlatformIO adaptiert werden. Meiner Meinung bietet PlatformIO alle Vorteile von Arduino und unterstützt zusätzlich noch unzählige andere Mikrocontrollerboards.

Stärken:

  • Unterstützung von Arduino Soft- und Hardware
  • integrierter Library Manager
  • integrierter Board Manager
  • Performance (kompilierter Code)
  • Debugging möglich
  • Unterstützung unterschiedlichster Hardware
  • Arbeiten und Navigieren mit mehreren Dateien / Ordnern
  • Erweiterbar durch Plug-Ins
  • Versionierung von Code und Bibliotheken

Schwächen:

  • etwas komplexer als Arduino IDE (Einsteiger)

Für die Entwicklung von Mikrocontrollersoftware verwende ich persönlich sehr gerne PlatformIO. Es bietet sehr viel Flexibilität, Unterstützung für eine Vielzahl an Mikrocontrollern und beinhaltet alles, was eine professionelle IDE für embedded Software beinhalten muss. Ich kann jedem nur empfehlen PlatformIo zu verwenden. Mein persönlicher Favorit, wenn es um die Entwicklung von embedded Software geht. Der Einstieg mag evtl. etwas schwieriger sein als mit Arduino, jedoch wird man auf Dauer bessere Erfolge erzielen!

MicroPython
#

Eine weitere Möglichkeit zur Entwicklung von Mikrocontroller Software bietet MicroPython. Es geht dabei einen anderen Weg als Arduino und PlatformIO, denn es wird kein Code kompiliert, Python wird direkt vom Mikrocontroller interpretiert. Es ist möglich Python Programme zu schreiben, diese auf den Mikrocontroller zu spielen oder Python Instruktionen direkt über eine Konsole/Terminal ausführen zu lassen. Diese Interaktion via REPL (Read Evaluate Print Loop) bietet eine Flexibilität der Entwicklung, die in C nicht möglich ist.

Python ist aktuell eine der am meist verbreiteten Programmiersprachen, und diese high-level Sprache kann mittlerweile sogar verwendet werden um Software für Mikrocontroller zu entwickeln. Dazu muss nur ein Python Interpreter auf dem Mikrocontroller installiert werden, danach erhält dieser die Befehle über ein Terminal (REPL) oder über ein main.py File, das direkt auf den Mikrocontroller geladen wird. Zur Entwicklung von Code benötigt man keine Entwicklungsumgebung mehr, die “blanken” Python Dateien liegen direkt auf dem Mikrocontroller und können jederzeit mit einem einfachen Texteditor bearbeitet werden.

Für das Flashen des Interpreters und die einfachere Entwicklung gibt es natürlich auch schon fertige IDEs. Eine zu erwähnende Option ist Thonny.

Stärken:

  • High Level Programmiersprache
  • Unterstützung unterschiedlichster Hardware
  • Arbeiten und Navigieren mit mehreren Dateien / Ordnern
  • Keine dedizierte IDE benötigt zur Entwicklung (nur Texteditor)
  • Code muss nicht kompiliert werden

Schwächen:

  • Performance (interpretierter Code) - sehr viel langsamer
  • kein klassisches Debugging möglich
  • limitierte Unterstützung von Mikrocontrollerboards (es werden aber immer mehr)

MicroPython ist besonders für Personen geeignet, die mit Python bereits vertraut sind. MicroPython bietet auch eine Vielzahl an Bibliotheken, jedoch ist das leider nicht vergleichbar mit der Anzahl von Arduino Bibliotheken. Ein simples Programm kann sehr einfach entwickelt werden, daher eignet es sich auch für erste Prototypen. Die Leistung ist leider weit entfernt von der von Arduino oder PlatformIO, jedoch werden moderne Mikrocontroller immer performanter und für zeitlich nicht kritische Anwendungen kann MicroPython eine sehr interessant Alternative sein!

Zusammenfassung
#

Ich persönlich bevorzuge PlatformIO als Entwicklungsumgebung, denn es bietet die beste Performance und die meiste Flexibilität (Boards, Mikrocontroller). MicroPython ist eine sehr interessante Alternative, denn es können sehr einfach sehr komplexe Probleme damit gelöst werden, leider ist der laufende Code nicht so performant wie die anderen Alternativen, jedoch muss man bedenken, dass man nicht immer solch eine Performance benötigt und eine schnelle Implementierung oftmals wichtiger ist als Code der schneller rennt. Nicht immer ist Performance das Wichtigste!