Interaction Design WikiElectrical Engineering

PlatformIO

Das Arduino Framework und die dazugehörige IDE (Entwicklungsumgebung) helfen Programmieranfängern beim Einstieg in die Welt von Physical Computing. Dabei bietet die Umgebung einen einfache Editor, eine Möglichkeit den Code zu kompilieren und auf ein Arduino Gerät zu laden, sowie Entwicklungsbibliotheken in das Projekt einzubinden. Doch diese Hilfen, welche den Einstieg vereinfachen, können in einem grösseren Projekt hinderlich sein. Sobald man mehr als fünf Tabs in der Arduino IDE offen hat, wird es unübersichtlich und man sollte sich überlegen, auf eine professionellere Umgebung zu wechseln.

PlatformIO ist eine alternative zur Arduino Umgebung. Dabei ist wichtig zu wissen, dass PlatformIO nur die Umgebung von Arduino ersetzt. Das bedeutet, dass das Projekt management, entwickeln, hochladen und testen verändert wird, der Funktionsumfang vom Arduino Core Framework aber immer noch der gleiche ist.

Dabei liegen die Vorteile von PlatformIO vor allem in den folgenden Bereichen:

Dabei muss aber auch erwähnt werden, dass die Komplexität beim Aufsetzen eines Projektes leicht zu nimmt.

Installation

Um PlatformIO auf dem System zu installieren, muss man sich zuerst entscheiden, ob man nur die Kommandozeilen-Umgebung (CLI) installieren will, oder gleich eine Entwicklungsumgebung wie Visual Studio Code mit dem PlatformIO Plugin.

Grundsätzlich macht es Sinn, die Kommandozeilen-Umgebung zu installieren und zusätzlich dazu eine IDE mit Plugin. Dann kann man Projekt auch ohne ein grafisches Programm verwalten und ist frei, PlatformIO in Scripts einzubinden.

Eine Installationsanleitung für die CLI findet man unter folgendem Link:

https://docs.platformio.org/en/latest/installation.html

Entwicklungsumgebung

Wie schon erwähnt kann man mit PlatformIO verschiedene Entwicklungsumgebungen (en: Integrated Development Environment (IDE)) verwenden. PlatformIO selbst empfiehlt dabei Visual Studio Code, es ist aber auch möglich Jetbrains Clion zu verwenden oder einfach einen Atom Text Editor. Nachfolgend gibt es eine kurze Übersicht über mögliche Entwicklungsumgebungen.

Kommandozeilen Programm

Für einfachere Projekte, kann man auch nur das Kommandozeilen Tool und einen Texteditor wie z.B. Atom verwenden. Dabei werden die Befehle für das kompilieren und hochladen direkt im Terminal eingegeben.

https://atom.io/

https://docs.platformio.org/en/latest/ide/atom.html

Visual Studio Code

Microsofts Visual Studio Code ist ein Editor, welcher mit Plugins erweitert werden kann. PlatformIO hat ein Plugin dafür Entwickelt, welches alle Funktionen der Arduino IDE bietet und darüber hinaus auch die Möglichkeit, Code zu debuggen.

https://platformio.org/platformio-ide

JetBrains Clion

Im professionellen Bereich arbeiten viele Entwickler mit Clion von Jetbrains. Clion ist eine mächtige C/C++ IDE, welche den geschrieben Code analysiert und versucht Verbesserungsvorschläge zu machen. Das kann in grösseren Projekt sehr wichtig sein, um Security Bugs oder Memory Leaks zu verhindern. Die Integration von PlatformIO ist etwas komplizierter, als mit Visual Studio Code.

https://www.jetbrains.com/clion/

https://docs.platformio.org/en/latest/ide/clion.html

Entwickeln mit PlatformIO

Hier folgt nun eine kurze Einführung in die verschiedenen Komponenten von PlatformIO. Dabei wird das Kommandozeilen Programm von PlatformIO verwendet, da dies die Basis für alle Entwicklungsumgebungen bietet. Für weitere Informationen kann man die ausführliche Dokumentation von PlatformIO konsultieren.

https://docs.platformio.org/en/latest/

Initialisierung

Um ein neues Projekt zu erstellen, muss man einen neuen Ordner erstellen und darin ein PIO Projekt initialisieren. Dies bewerkstelligt man mit dem Befehl pio init gefolgt von den projektspezifischen Parametern. Um ein neues Projekt für ein Arduino UNO zu erstellen, verwenden wir folgenden Befehl:

pio init --board uno

Falls man auch gleich die Unterstützung für eine IDE initialisieren will, kann man den --ide Parameter hinzufügen und angeben, welche IDE initialisiert werden soll.

pio init --board uno --ide clion

PlatformIO erstellt dann eine Ordnerstruktur für das neue Projekt, sowie eine Konfigurationsdatei.

Hallo Welt

Im src Ordner kann man nun eine neue Datei erstellen mit dem Namen main.cpp, welche unseren Einstieg für das Arduino Framework beinhaltet:

#include "Arduino.h"

void setup() {
    Serial.begin(9600);
}

void loop() {
    Serial.println("Hello world");
    delay(100);
}

Grundsätzlich ist das die gleiche Struktur, wie in der Arduino IDE. Da wir uns aber nun in einem C++ Kontext befinden, müssen wir angeben, dass wir die Arduino spezifischen Befehle einbinden wollen. Um das Projekt nun zu kompilieren und auf ein Arduino zu laden können wir folgenden Befehl im Hauptordner unseres Projektes ausführen:

pio run --target upload

Konfiguration

Die Datei platform.ini ist die zentrale Konfigurationsdatei des Projektes. In dieser ist beschrieben, für welche Platform das Projekt entwickelt wird, welche Abhängigkeiten benötigt werden und wie der Code kompiliert werden muss. Hier besteht auch die Möglichkeit, Parameter zu definieren, welche beim kompilieren in den Code eingefügt werden. Das kann wichtig sein um z.B. ein WLAN Passwort zu setzen.

Bibliotheken

Einer der grössten Vorteile von PlatformIO ist der Bibliotheksmanager. Mit diesem ist es möglich, die Abhängigkeiten eines Projektes zu definieren und diese auch gleich herunterzuladen, falls sie nicht vorhanden sind. Damit kann man für jedes Projekt die jeweiligen Abhängigkeiten installieren und ist nicht an eine einzige Version gebunden, wie in der Arduino IDE. Alle Bibliotheken welche von PlatformIO angeboten werden, kann man auch durch ihre Webseite finden.

https://platformio.org/lib

Um nun eine Bibliothek zu installieren, benötigt man den eindeutigen Namen oder die ID der Bibliothek. Beides kann über die Webseite gefunden werden. Will man eine bestimmte Version der Bibliothek herunterladen, kann man die Versionsnummer nachfolgend mit einem @ angeben. Die Installation selbst erfolgt über die Kommandozeile oder kann direkt im platform.ini eingetragen werden.

pio lib install "Adafruit MSA301"

Um die Versionsnummer zu fixieren, installiert man die Bibliothek wie folgt:

pio lib install "Adafruit MSA301@1.0.1"

Wenn nun jemand das Projekt herunterlädt und mit PlatformIO kompiliert, werden die benötigten Abhängigkeiten automatisch heruntergeladen und im Projekt installiert.

Im Falle, dass eine Bibliothek nicht im PIO Bibliotheksmanager vorhanden ist, kann man diese einfach in den lib Ordner legen (das gleiche Prinzip wie der Arduino Library Ordner).