Embedded Builds with PlatformIO

Overview

PlatformIO is a cross-platform code-builder and library manager for embedded development with no external dependencies. Using PlatformIO you can test your code on multiple platforms, frameworks and boards:

  • Platforms - pre-built different development platforms for the most popular host OS (Mac OS X, Windows, Linux 32/64bit, Linux ARMv6+). Each of them includes compiler, debugger, uploader, etc:

    + Atmel AVR
    + Espressif
    + Teensy
    + ST STM32
    + [Full list](http://platformio.org/#!/platforms) at PlatformIO
    
  • Frameworks - pre-configured build scripts for the popular embedded frameworks:

    • Arduino
    • libOpenCM3
    • mbed
    • Full list at PlatformIO
  • Embedded - pre-defined compilation profiles for a variety of embedded boards. + Full list at PlatformIO

.travis.yml Settings

Please read the official PlatformIO & Travis CI documentation before using PlatformIO.

PlatformIO is written in Python and is recommended to be run within a Travis CI Python isolated environment:

language: python
python:
    - "2.7"

# Cache PlatformIO packages using Travis CI container-based infrastructure
sudo: false
cache:
    directories:
        - "~/.platformio"

env:
    - PLATFORMIO_CI_SRC=path/to/test/file.c
    - PLATFORMIO_CI_SRC=examples/file.ino
    - PLATFORMIO_CI_SRC=path/to/test/directory

install:
    - pip install -U platformio

script:
    - platformio ci --board=TYPE_1 --board=TYPE_2 --board=TYPE_N

Testing Libraries

If the project you are testing is a library, please use the --lib="." option for the platformio ci command

script:
    - platformio ci --lib="." --board=TYPE_1 --board=TYPE_2 --board=TYPE_N

Managing dependencies

There are two options for testing projects with external dependencies:

  • using the PlatformIO Library Manager
  • installing dependencies manually

PlatformIO Library Manager

For the dependencies available in the PlatformIO Library Registry:

install:
    - pip install -U platformio

    #
    # Libraries from PlatformIO Library Registry:
    #
    # http://platformio.org/#!/lib/show/1/OneWire
    platformio lib install 1

Installing dependencies manually

For the dependencies not available in the PlatformIO Library Registry:

install:
    - pip install -U platformio

    # download library to the temporary directory
    wget https://github.com/PaulStoffregen/OneWire/archive/master.zip -O /tmp/onewire_source.zip
    unzip /tmp/onewire_source.zip -d /tmp/

script:
    - platformio ci --lib="/tmp/OneWire-master" --board=TYPE_1 --board=TYPE_2 --board=TYPE_N

Custom Build Flags

To specify custom build flags using the PLATFORMIO_BUILD_FLAGS environment:

env:
    - PLATFORMIO_CI_SRC=path/to/test/file.c PLATFORMIO_BUILD_FLAGS="-D SPECIFIC_MACROS_PER_TEST_ENV -I/extra/inc"
    - PLATFORMIO_CI_SRC=examples/file.ino
    - PLATFORMIO_CI_SRC=path/to/test/directory

install:
    - pip install -U platformio
    export PLATFORMIO_BUILD_FLAGS=-D GLOBAL_MACROS_FOR_ALL_TEST_ENV

More details available at build flags/options.

Advanced configuration

You can configure multiple build environments using a platformio.ini Project Configuration file, and specifying a –project-conf instead of --board.

script:
    - platformio ci --project-conf=/path/to/platformio.ini

Examples