Ontwikkel voor Arduino, ESP32 en nog veel meer met PlatformIO

Als je embedded software wilt ontwikkelen, dan merk je al snel dat elke hardwareproducent zijn eigen ontwikkeltools naar voren schuift. Voor Arduino is dat de Arduino IDE, Nordic Semiconductor levert een eigen versie van SEGGER Embedded Studio en STMicroelectronics zweert bij STM32CubeIDE.

Elk van deze tools heeft natuurlijk zijn voordelen, maar als je vaak met verschillende hardware werkt, dan is het complex om je met meerdere ontwikkelomgevingen vertrouwd te maken. PlatformIO biedt een oplossing: het is een opensource, cross-platform, cross-architecture, multi-framework ontwikkelomgeving voor embedded software. Je kunt daardoor in één universele omgeving al je ontwikkelprojecten voor diverse hardware uitvoeren.

Platforms en frameworks

PlatformIO ondersteunt meer dan 1400 ontwikkelbordjes en microcontrollers, waaronder de Atmel AVR-serie en Arduino-bordjes, de Espressif ESP32 en ESP8266, de Microchip PIC32, de Nordic nRF5-chips, de RaspberryPi Pico en andere RP2040-gebaseerde bordjes, de STM32-familie van STMicroelectronics en de Teensy-bordjes. De ondersteuning voor al deze hardware is verzameld in 48 ontwikkelplatforms.

Daarnaast ondersteunt PlatformIO ook 25 frameworks, zoals Arduino, het Espressif IoT Development Framework (IDF), FreeRTOS, Mbed, STM32Cube en Zephyr. Op die manier kun je bijvoorbeeld Arduino- of Zephyr-code gewoon overnemen in PlatformIO, op verschillende directoryindelingen en configuratiebestanden na.

Grafisch of op de opdrachtregel

PlatformIO voorziet in integraties met allerlei editors en ontwikkelomgevingen, zoals Visual Studio Code, CLion, Atom, Eclipse, Siblime Text, maar ook Emacs en Vim. De makers raden zelf Visual Studio Code aan, de populaire cross-platform code-editor van Microsoft.

Je kunt ook volledig op de opdrachtregel met PlatformIO werken, zonder daarvoor een grafische interface zoals Visual Studio Code te gebruiken. Installeer daarvoor PlatformIO als Python-module met pip:

pip install platformio

Daarna initialiseer je een nieuw project in de huidige directory met:

pio project init

Projecten bouwen met PlatformIO

Ik ben de laatste jaren voor mijn projecten waardoor ik traditioneel de Arduino IDE of Arduino CLI gebruikte overgestapt naar PlatformIO. Je maakt er eenvoudig projecten mee die je op meerdere types ontwikkelbordjes bouwt, en PlatformIO installeert de benodigde toolchains, frameworks en software development kits. Je geeft ook eenvoudig afhankelijkheden aan voor externe bibliotheken, en ook debugging en unit tests zijn in je projecten te integreren.

/images/platformio-environments.png

Wil je met PlatformIO aan de slag? Voor Linux Magazine schreef ik een artikel waarin ik een eenvoudig voorbeeldproject met PlatformIO aanmaak. Dat werkt op het Seeeduino XIAO-bordje van het Atmel SAM-platform, op de Arduino Nano RP2040 Connect en op de Raspberry Pi Pico.