Einleitung #
PlatformIO ist ein Plugin für Visual Studio Code (VSCode), und bietet eine plattformübergreifende Entwicklungsumgebung für unterschiedlichste Mikrocontroller (es werden über 1500 unterschiedliche Mikrocontrollerboards unterstützt). Mit PlatformIO können unterschiedlichste Frameworks und Echtzeitbetriebssysteme verwendet werden. Eine zentrale Konfigurationsdatei hilft die verwendete Hardware und dessen Softwareumgebung zu definieren und anzupassen. Will man ein anderes Mikrocontrollerboard verwenden, muss man lediglich die Konfiguration ändern, im Hintergrund wird der passende Compiler geladen und das Programm kann auf den Mikrocontroller geflasht werden.
Um PlatformIO zu verwenden, muss lediglich Visual Studio Code installiert werden, anschließend kann PlatformIO über die Erweiterungen (Extensions) installiert werden. Grundliegende C/C++ Programmierkennsnisse sind devenitiv von Vorteil, aber keinesfalls.
Some minor knowledge with the programming language C/C++ is definitely a help but not necessarily required.
Verwendete Software Versionen #
Visual Studio Code 1.96.4 PlatformIO Extension 3.3.4 PlatformIO Core 6.1.16 PlatformIO Home 3.4.4
Das erste Projekt erstellen #
Um ein Projekt zu erstellen, muss man nur auf das PlatformIO Icon der Extension klicken, und “+New Project” auswählen. Ist das PlatformIO Home screen nicht zu sehen einfach unter “Quick Access” - “PIO Home” - Open klicken.
Im Project Wizard muss lediglich ein Projektname, Mikrocontrollerboard und Framework ausgewählt werden. Als Name vergeben wir “blinky” und wählen Arduino Uno Board aus. Als Framework wird Arduino dienen. Keine Sorge, der Mikrocontroller oder Framework kann später in der platformio.ini jederzeit geändert werden, es können sogar mehrere Umgebungen parallel konfiguriert werden, dazu aber in Zukunft mehr.
Das erste Projekt ist erstellt und man erhält folgende vorgefertigte Struktur:
Ordner: .pio temporärer Ordner für PlatformIO, es werden auch die Hex Files hier abgelegt. Wichtig: bei Verwendung von git - “.pio” Ordner zu gitignore hinzufügen.
Ordner .vscode Ordner für Informationen für das Setup in VSCode, es können Erweiterungen hinterlegt werden, Pfade, … Kann für den Anfang ignoriert werden.
Ordner: include Ordner für Deklarationen, Makros, … vor allem wenn man diese Projektübergreifend teilen will.
Ordner: lib Eigene bzw. Projektspezifische Bibliotheken (Source & Header Dateien). Das vorgeschlagene Layout kann der README entnommen werden.
Ordner src Projekt-Sourcecode der in der main.cpp Datei implementiert wird.
Ordner test Ordner für Unit Testing bzw. PlatformIO Testrunner.
platformio.ini die Konfigurationsdatei für PlatformIO, in ihr konfiguriert man das gesamte Setup: Hardware (Mikrocontroller, Clock Speed, COM Port,….) und Software (Framework, externe Bibliotheken und deren Versionierung, …. )
platformio.ini - Übersicht #
Wie schon erwähnt wird in der platformio.ini Datei das gesamte Entwicklungssystem konfiguriert, Hardware wie auch Software. In der generierten Konfigurationsdatei sind die zu Projekterstellung ausgewählten Parameter hinterlegt:
1platform = atmelavr
2board = uno
3framework = arduinoIn der eckigen Klammer wird das aktuelle Environment definiert: env:“name” ist dabei die Norm. Ist lediglich eines definiert, ist dessen Definition gültig. Die restlichen Parameter sind selbsterklärend. Die offizielle Dokumentation hilft bei Fragen weiter.
Code: blinky #
Der vorhandene Code in main.cpp (src Ordner), ist bereits ausführbar und kompilierbar, tut aber jedoch nichts Sichtbares. Das wird nun geändert. Als erstes Programmierbeispiel wird oft “Hello World” erklärt, da der Mikrocontroller jedoch keine Konsole hat, um das direkt auszugeben, ist das äquivalente Programm auf Mikrocontroller Ebene; “blinky”.
Was macht “blinky”?
- Input/Output Pins werden konfiguriert (Output, da wir ja eine LED blinken lassen wollen )
- Endlosschleife , in der man den Output ein- bzw. ausschaltet und dazwischen 500ms wartet - das ergibt 1Hz Blinkfrequenz.
Wie sieht die Implementierung aus ?
1#include <Arduino.h>
2
3void setup() {
4 pinMode(LED_BUILTIN, OUTPUT);
5 digitalWrite(LED_BUILTIN, LOW);
6}
7
8void loop() {
9 while (1){
10 digitalWrite(LED_BUILTIN, LOW);
11 delay(500);
12 digitalWrite(LED_BUILTIN, HIGH);
13 delay(500);
14 }
15}Nun muss der Code nur noch kompiliert werden, und auf den Mikrocontroller gespielt werden. Es gibt mehrere Möglichkeiten die Software zu kompilieren und auf den Mikrocontroller zu spielen.
rot: Kompilieren: PlatformIO Extension - Project Tasks - uno - “Build” Upload: PlatformIO Extension - Project Tasks - uno - “Upload”
gelb: StatusLeiste Kompilieren: Haken Upload: Rechtspfeil
Kann der Mikrocontroller nicht gefunden werden, muss in der Systemsteuerung nachgesehen werden, welcher Com Port von dem Controller verwendet wird, dieser ist in die ini einzutragen. Alternativ kann man in der Leiste das Stecker Symbol klicken und eine Schnittstelle auswählen, danach den Upload erneut starten.
Zusammenfassung #
Das Ergebnis ist ziemlich unspektakulär, die LED blinkt und blinkt und blinkt … und wird es so lange weiter machen, bis die Stromversorgung unterbrochen wird. Wird der Arduino Uno nach einer Unterbrechung wieder versorgt, wird das Programm vom integrierten Flash Speicher geladen und das zuletzt geflashte Programm wird ausgeführt: in diesem Fall “blinky”.
Den Code bzw. das Projekt gibt es auch als download.