neulab/tldr huggingface dataset:
Drone automatically detects when a commit has been made and pushed to a repository that is using Drone, and each time this happens, it will try to build the project using cmd_ci command. This includes commits to all branches, not just to the master branch. Drone will also build and run pull requests. When that process has completed, it will notify a developer in the way it has been configured to do so — for example, by sending an email containing the build results (showing success or failure). It can be configured to build project on a range of different platforms.
Contents • Drone
Integration There are two possible ways of running PlatformIO in CI services:
Using cmd_run command This variant is default choice for native PlatformIO projects (Please fill all fields for your project in the Drone control panel):
pip install -U platformio platformio run /path/to/project/dir -e <ID_1> -e <ID_2> -e <ID_N>
Environment Variables:
PLATFORMIO_CI_SRC=path/to/source/file.c PLATFORMIO_CI_SRC=path/to/source/file.ino PLATFORMIO_CI_SRC=path/to/source/directory
pip install -U platformio platformio ci --board=<ID_1> --board=<ID_2> --board=<ID_N> [image]
Examples 1. Integration for USB_Host_Shield_2.0 project. The circle.yml configuration file:
PLATFORMIO_CI_SRC=examples/Bluetooth/PS3SPP/PS3SPP.ino PLATFORMIO_CI_SRC=examples/pl2303/pl2303_gps/pl2303_gps.ino
pip install -U platformio wget https://github.com/xxxajk/spi4teensy3/archive/master.zip -O /tmp/spi4teensy3.zip unzip /tmp/spi4teensy3.zip -d /tmp platformio ci --lib="." --lib="/tmp/spi4teensy3-master" --board=uno --board=teensy31 --board=due [image]
GitHub Actions GitHub Actions enables you to create custom software development life cycle (SDLC) workflows directly in your GitHub repository.
You need to configure GitHub Actions using YAML syntax, and save them as workflow files in your repository. Workflows are custom automated processes that you can set up in your repository to build, test, package, release, or deploy any code project on GitHub. You can write individual tasks, called actions, and combine them to create a custom workflow. Once you've successfully created aYAML workflow file and triggered the workflow, you will see the build logs, tests results, artifacts, and statuses for each step of your workflow. It can be configured to build project on a range of different platforms.
GitHub Actions help you automate your software development workflows in the same place you store code and collaborate on pull requests and issues and each time this happens, it will try to build the project using cmd_ci command.
Contents • GitHub Actions
Integration NOTE: Please make sure to read GitHub Actions Getting Started guide first.
name: PlatformIO CI
on: [push]
jobs: build:
runs-on: ubuntu-latest
steps: - uses: actions/checkout@v1 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies run: | python -m pip install --upgrade pip pip install platformio - name: Run PlatformIO run: platformio run /path/to/project/dir -e <ID_1> -e <ID_2> -e <ID_N>
runs-on: ubuntu-latest strategy: matrix: example: [path/to/test/file.c, examples/file.ino, path/to/test/directory]
steps: - uses: actions/checkout@v1 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies run: | python -m pip install --upgrade pip pip install platformio - name: Run PlatformIO run: platformio ci --board=<ID_1> --board=<ID_2> --board=<ID_N> env: PLATFORMIO_CI_SRC: ${{ matrix.example }}
Install dependent library using librarymanager - name: Install library dependencies run: platformio lib -g install 1
- name: Run PlatformIO run: platformio ci path/to/test/file.c --board=<ID_1> --board=<ID_2> --board=<ID_N>
Manually download dependent library and include in build process via --lib option - name: Install library dependencies run: | wget https://github.com/PaulStoffregen/OneWire/archive/master.zip -O /tmp/onewire_source.zip unzip /tmp/onewire_source.zip -d /tmp/
- name: Run PlatformIO run: platformio ci path/to/test/file.c --lib="/tmp/OneWire-master" --board=<ID_1> --board=<ID_2> --board=<ID_N>
- name: Run PlatformIO run: platformio ci path/to/test/file.c --lib="/tmp/OneWire-master" --board=<ID_1> --board=<ID_2> --board=<ID_N> env: PLATFORMIO_BUILD_FLAGS: -D SPECIFIC_MACROS -I/extra/inc
Examples Integration for USB_Host_Shield_2.0 project. The workflow.yml configuration file:
runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] example: [examples/Bluetooth/PS3SPP/PS3SPP.ino, examples/pl2303/pl2303_gps/pl2303_gps.ino]
steps: - uses: actions/checkout@v1 - name: Set up Python uses: actions/setup-python@v1
- name: Install dependencies run: | python -m pip install --upgrade pip pip install platformio wget https://github.com/xxxajk/spi4teensy3/archive/master.zip -O /tmp/spi4teensy3.zip unzip /tmp/spi4teensy3.zip -d /tmp
- name: Run PlatformIO run: platformio ci --lib="." --lib="/tmp/spi4teensy3-master" --board=uno --board=teensy31 --board=due env: PLATFORMIO_CI_SRC: ${{ matrix.example }}
GitLab GitLab is a hosted cloud platform that can help you build, test, deploy, and monitor your code from GitLab repositories.
GitLab CI is enabled by default on new projects, so you can start using its features right away. All you need is cmd_ci command, a file called .gitlab-ci.yml (where you describe how the build should run) placed in the root directory of your git project, and a configured Runner to perform the actual build (Gitlab has some pre-configured public runners so your CI script should work out of the box). Each project comes with a Builds page where you can follow the output of each build, see the commit that introduced it and other useful information such as the time the build started, how long it lasted and the commiter's name. The statuses for each build are exposed in the GitLab UI, and you can see whether a build succeeded, failed, got canceled or skipped.
Contents • GitLab
Integration Put .gitlab-ci.yml to the root directory of your repository. The contents of this file depends on the project you want to add. There are two possible ways of running PlatformIO in CI services:
image: python:2.7
stages: - test
before_script: - "pip install -U platformio"
job: stage: test script: "platformio run /path/to/project/dir -e <ID_1> -e <ID_2> -e <ID_N>"
job: stage: test script: "platformio ci --board=<ID_1> --board=<ID_2> --board=<ID_N>" variables: {PLATFORMIO_CI_SRC: "path/to/test/file.c"}
Examples 1. Integration for ArduinoJson library project. The .gitlab-ci.yml configuration file:
.job_template: &pio_run script: - "platformio ci --lib='.' --board=uno --board=teensy31 --board=nodemcuv2 $PLATFORMIO_CI_EXTRA_ARGS"
JsonGeneratorExample: <<: *pio_run variables: PLATFORMIO_CI_EXTRA_ARGS: "--board=due" PLATFORMIO_CI_SRC: examples/JsonGeneratorExample
JsonHttpClient: <<: *pio_run variables: PLATFORMIO_CI_SRC: examples/JsonHttpClient
JsonParserExample: <<: *pio_run variables: PLATFORMIO_CI_SRC: examples/JsonParserExample
JsonServer: <<: *pio_run variables: PLATFORMIO_CI_SRC: examples/JsonServer
JsonUdpBeacon: <<: *pio_run variables: PLATFORMIO_CI_SRC: examples/JsonUdpBeacon
ProgmemExample: stage: test <<: *pio_run variables: PLATFORMIO_CI_SRC: examples/ProgmemExample
StringExample: stage: test <<: *pio_run variables: PLATFORMIO_CI_SRC: examples/StringExample
Jenkins Jenkins is a self-contained, open source automation server which can be used to automate all sorts of tasks related to building, testing, and deploying software.
Jenkins can be installed through native system packages, Docker, or even run standalone by any machine with a Java Runtime Environment (JRE) installed.
It can be configured to build project on a range of different platforms.
Contents • Jenkins
Integration See step-by-step guide in ThingForward's blog post Setting up a Jenkins CI engine for embedded projects.
Shippable Shippable is a hosted cloud platform that provides hosted continuous integration, deployment, and testing to GitHub and BitBucket repositories.  Shippable's continuous integration service is built using Docker.
Shippable is configured by adding a file named shippable.yml, which is a YAML format text file, to the root directory of the GitHub repository or you can use your Travis CI configuration file .travis.yml.
Shippable automatically detects when a commit has been made and pushed to a repository that is using Shippable, and each time this happens, it will try to build the project using cmd_ci command. This includes commits to all branches, not just to the master branch. Shippable will also build and run pull requests. When that process has completed, it will notify a developer in the way it has been configured to do so — for example, by sending an email containing the build results (showing success or failure), or by posting a message on an IRC channel. It can be configured to build project on a range of different platforms.
Contents • Shippable
Integration Put shippable.yml or .travis.yml to the root directory of your repository. The contents of this file depends on the project you want to add. There are two possible ways of running PlatformIO in CI services:
language: python python: - "2.7"
install: - pip install -U platformio
script: - platformio run /path/to/project/dir -e <ID_1> -e <ID_2> -e <ID_N>
env: - PLATFORMIO_CI_SRC=path/to/source/file.c - PLATFORMIO_CI_SRC=path/to/source/file.ino - PLATFORMIO_CI_SRC=path/to/source/directory
script: - platformio ci --board=<ID_1> --board=<ID_2> --board=<ID_N>
Examples 1. Integration for USB_Host_Shield_2.0 project. The shippable.yml or .travis.yml configuration file:
env: - PLATFORMIO_CI_SRC=examples/Bluetooth/PS3SPP/PS3SPP.ino - PLATFORMIO_CI_SRC=examples/pl2303/pl2303_gps/pl2303_gps.ino
install: - pip install -U platformio - wget https://github.com/xxxajk/spi4teensy3/archive/master.zip -O /tmp/spi4teensy3.zip - unzip /tmp/spi4teensy3.zip -d /tmp
script: - platformio ci --lib="." --lib="/tmp/spi4teensy3-master" --board=uno --board=teensy31 --board=due
Travis CI officially supports PlatformIO for Embedded Builds.
Travis CI is an open-source hosted, distributed continuous integration service used to build and test projects hosted at GitHub.
Travis CI is configured by adding a file named .travis.yml, which is a YAML format text file, to the root directory of the GitHub repository.
Travis CI automatically detects when a commit has been made and pushed to a repository that is using Travis CI, and each time this happens, it will try to build the project using cmd_ci command. This includes commits to all branches, not just to the master branch. Travis CI will also build and run pull requests. When that process has completed, it will notify a developer in the way it has been configured to do so — for example, by sending an email containing the build results (showing success or failure), or by posting a message on an IRC channel. It can be configured to build project on a range of different platforms.
Contents • Travis CI
• Unit Testing
Integration Please make sure to read Travis CI Getting Started and general build configuration guides first.
NOTE: If you are going to use PlatformIO unit_testing or pioremote you will need to define PLATFORMIO_AUTH_TOKEN environment variable in project settings. See Defining Variables in Repository Settings guide.
PlatformIO is written in Python and is recommended to be run within Travis CI Python isolated environment. There are two possible ways of running PlatformIO in CI services:
# Cache PlatformIO packages using Travis CI container-based infrastructure sudo: false cache: directories: - "~/.platformio"
install: - pip install -U platformio - platformio update
env: - PLATFORMIO_CI_SRC=path/to/test/file.c - PLATFORMIO_CI_SRC=examples/file.ino - PLATFORMIO_CI_SRC=path/to/test/directory
Then perform steps 1, 2 and 4 from http://docs.travis-ci.com/user/getting-started/
Install dependent library using librarymanager install: - pip install -U platformio
# # Libraries from PlatformIO Library Registry: # # https://platformio.org/lib/show/1/OneWire - platformio lib -g install 1
Manually download dependent library and include in build process via --lib option install: - pip install -U platformio
script: - platformio ci --lib="/tmp/OneWire-master" --board=<ID_1> --board=<ID_2> --board=<ID_N>
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"
script: - platformio ci --project-conf=/path/to/platoformio.ini
Unit Testing See PlatformIO Remote Unit Testing Example.
env: - PLATFORMIO_CI_SRC=examples/acm/acm_terminal - PLATFORMIO_CI_SRC=examples/Bluetooth/WiiIRCamera PLATFORMIO_BUILD_FLAGS="-DWIICAMERA" - PLATFORMIO_CI_SRC=examples/ftdi/USBFTDILoopback - PLATFORMIO_CI_SRC=examples/Xbox/XBOXUSB # - ...
script: - platformio ci --board=uno --board=teensy31 --board=due --lib="."
• Configuration file: https://github.com/felis/USB_Host_Shield_2.0/blob/master/.travis.yml
• Build History: https://travis-ci.org/felis/USB_Host_Shield_2.0
env: - PLATFORMIO_CI_SRC=examples/backSoon/backSoon.ino - PLATFORMIO_CI_SRC=examples/etherNode/etherNode.ino # -
- wget https://github.com/jcw/jeelib/archive/master.zip -O /tmp/jeelib.zip - unzip /tmp/jeelib.zip -d /tmp
script: - platformio ci --lib="." --lib="/tmp/jeelib-master" --lib="/tmp/Gamebuino-master/libraries/tinyFAT" --board=uno --board=megaatmega2560
• Configuration file: https://github.com/jcw/ethercard/blob/master/.travis.yml
• Build History: https://travis-ci.org/jcw/ethercard
3. Dynamic testing of the boards
env: - PLATFORMIO_CI_SRC=examples/TimeArduinoDue PLATFORMIO_CI_EXTRA_ARGS="--board=due" - PLATFORMIO_CI_SRC=examples/TimeGPS - PLATFORMIO_CI_SRC=examples/TimeNTP - PLATFORMIO_CI_SRC=examples/TimeTeensy3 PLATFORMIO_CI_EXTRA_ARGS="--board=teensy31" # - ...
install: - pip install -U platformio - platformio update - rm -rf ./linux
# # Libraries from PlatformIO Library Registry: # # https://platformio.org/lib/show/416/TinyGPS - platformio lib -g install 416 421 422
script: - platformio ci --lib="." --board=uno --board=teensy20pp $PLATFORMIO_CI_EXTRA_ARGS
• Configuration file: https://github.com/ivankravets/Time/blob/master/.travis.yml
• Build History: https://travis-ci.org/ivankravets/Time
4. Advanced configuration with extra project options and libraries
env: - PLATFORMIO_CI_SRC=examples/Boards_Bluetooth/Adafruit_Bluefruit_LE - PLATFORMIO_CI_SRC=examples/Boards_Bluetooth/Arduino_101_BLE PLATFORMIO_CI_EXTRA_ARGS="--board=genuino101" - PLATFORMIO_CI_SRC=examples/Boards_USB_Serial/Blue_Pill_STM32F103C PLATFORMIO_CI_EXTRA_ARGS="--board=bluepill_f103c8 --project-option='framework=arduino'" - PLATFORMIO_CI_SRC=examples/Export_Demo/myPlant_ESP8266 PLATFORMIO_CI_EXTRA_ARGS="--board=nodemcuv2 --project-option='lib_ignore=WiFi101'" # - ...
# # Libraries from PlatformIO Library Registry: # # https://platformio.org/lib/show/44/Time # https://platformio.org/lib/show/419/SimpleTimer # # https://platformio.org/lib/show/17/Adafruit-CC3000 # https://platformio.org/lib/show/28/SPI4Teensy3 # https://platformio.org/lib/show/91/UIPEthernet # https://platformio.org/lib/show/418/WildFireCore # https://platformio.org/lib/show/420/WildFire-CC3000 # https://platformio.org/lib/show/65/WiFlyHQ # https://platformio.org/lib/show/19/Adafruit-DHT # https://platformio.org/lib/show/299/WiFi101 # https://platformio.org/lib/show/259/BLEPeripheral # https://platformio.org/lib/show/177/Adafruit_BluefruitLE_nRF51
- platformio lib -g install 17 28 91 418 419 420 65 44 19 299 259 177 https://github.com/vshymanskyy/BlynkESP8266.git https://github.com/cmaglie/FlashStorage.git https://github.com/michael71/Timer5.git
script: - make travis-build
• Configuration file: https://github.com/blynkkk/blynk-library/blob/master/.travis.yml
• Build History: https://travis-ci.org/blynkkk/blynk-library
Compilation database compile_commands.json New in version 4.2.
A compilation database is a JSON-formatted file named compile_commands.json that contains structured data about every compilation unit in your project.
piocore supports generating of compilation database using platformio run --target command and compiledb target. For example,
> platformio run -t compiledb
A default path for compile_commands.json is "projectconf_pio_build_dir/envname".  You can override this path with projectconf_advanced_scripting and COMPILATIONDB_PATH environment variable. For example, generate compile_commands.json in a root of project:
[env:myenv] platform = ... board = ... extra_scripts = post:extra_script.py
import os Import("env")
env.Replace(COMPILATIONDB_PATH=os.path.join("$PROJECT_DIR", "compile_commands.json"))
Articles about us NOTE: If you've written article about PlatformIO and would like it listed on this page, please edit this page.
Here are recent articles/reviews about PlatformIO:
2020 • Mar 28, 2020 - Brian Lough - Use the PlatformIO Debugger on the ESP32 Using an ESP-prog
• Mar 10, 2020 - James Harton - Augie the Hexapod Robot
• Mar 05, 2020 - Alex Govorov - PVS-Studio Integration in PlatformIO
• Feb 2, 2020 - Tommy Desrochers - VS Code et PlatformIO: Mieux que l'IDE Arduino?
• Jan 15, 2020 - Ivan Kravets, CEO of PlatformIO - Next-generation IDE for your RISC-V Product in 20 Minutes
2019 • Dec 29, 2019 - Andri Yadi - AI-Powered Magic Wand
• Oct 31, 2019 - Frank Leon Rose - Minimal FreeRTOS with PlatformIO
• Aug 18, 2019 - Manuel Bleichenbacher - Arduino In-circuit Debugging with PlatformIO
• Aug 13, 2019 - Tech Explorations - 6 reasons why PlatformIO is perhaps the best programming environment for the ESP32
• Jul 04, 2019 - Jean-Claude Wippler - The PlatformIO command line
• Mar 08, 2019 - Nathan Glover - Amazon Alexa controlled IoT Traffic Lights
2018 • Dec 27, 2018 - Xose Pérez - Automated unit testing in the metal
• Dec 20, 2018 - Jean-Claude Wippler - Getting started with the STM32F407VG and STM32Cube
• Nov 24, 2018 - Martin Fasani - PlatformIO: An alternative to Arduino IDE and a complete ecosystem for IoT
• Sep 27, 2018 - Lup Yuen Lee - Connect STM32 Blue Pill to Sigfox
• Aug 27, 2018 - Lup Yuen Lee - Juggling STM32 Blue Pill For Arduino Jugglers
• Jul 3, 2018 - Andreas Schmidt - IoT for web developers: From zero to firmware, Part II
• Jun 22, 2018 - Andreas Schmidt - IoT for web developers, Part I
• Jul 4, 2018 - ThingForward - Screen-cast: First steps with PlatformIO’s Unified Debugger
• Jun 6, 2018 - Andreas Schmidt - ESP32, WebThing API and PlatformIO-style projects
• May 21, 2018 - Dentella Luca - ESP32, PlatformIO
• Mar 27, 2018 - Andreas Schmidt - Building a Web Of Things REST-API on an Arduino MKR1000 with PlatformIO
• Mar 19, 2018 - ThingForward - Webinar: Unit Testing for Embedded with PlatformIO and Qt Creator
• Feb 16, 2018 - Alex Corvis - DIY Virtual alike NEST Thermostat with Node-RED
• Jan 24, 2018 - ThingForward - Embedded and Cloud - Continuous Integration
• Jan 14, 2018 - IT4nextgen - 5 Best Development Software(IDE) for Internet of Things (IOT) in 2018
• Jan 13, 2018 - Rui Marinho - Quick start guide to flashing ESP8266-based devices with PlatformIO
2017 • Dec 26, 2017 - Coyt Barringer - Programming STM32F103 Blue Pill using USB Bootloader and PlatformIO
• Dec 1, 2017 - ThingForward - Using Cloud IDEs for Embedded Development: CodeAnywhere
• Nov 13, 2017 - ThingForward - Automating Static and Dynamic Code Analysis with PlatformIO
• Oct 18, 2017 - ThingForward - Getting Started with SigFox and PlatformIO
• Sep 18, 2017 - ThingForward - Embedded Testing with PlatformIO – Part 4: Continuous Integration
• Sep 06, 2017 - ThingForward - Embedded Testing with PlatformIO – Part 3: Remoting
• Sep 04, 2017 - Dror Gluska - Looking To The IoT Future With PlatformIO And ESP32
• Aug 23, 2017 - 陳亮 - Develop ESP32 With PlatformIO IDE
• Aug 08, 2017 - ThingForward - Embedded Testing with PlatformIO - Part 2
• Jul 25, 2017 - ThingForward - Start Embedded Testing with PlatformIO
• Jun 23, 2017 - Naresh Krish - Home Automation Using Wiscore, OpenHab and PlatformIO
• Jun 05, 2017 - Projects DIY - Démarrer avec PlatformIO IDE alternatif pour Arduino, ESP8266, ESP32 et autres micro-contrôleurs (Start with PlatformIO alternative IDE for Arduino, ESP8266, ESP32 and other microcontrollers, French)
• Apr 12, 2017 - Jane Elizabeth - Let's talk IoT: PlatformIO puts developers back in the driver's seat
• Apr 07, 2017 - Al Williams - Hackaday: PlatformIO and Visual Studio take over the world
• Mar 13, 2017 - Ryan Mulligan - Continuous testing for Arduino libraries using PlatformIO and Travis CI
• Feb 23, 2017 - Bastiaan Visee - Using PlatformIO for your Arduino projects
• Jan 12, 2017 - Tiest van Gool - OTA: PlatformIO and ESP8266
2016 • Dec 13, 2016 - Dr. Patrick Mineault - Multi-Arduino projects with PlatformIO
• Dec 08, 2016 - Cuong Tran Viet - PlatformIO is a solution
• Oct 31, 2016 - Ricardo Quesada - Retro Challenge: announcing Commodore Home
• Oct 3, 2016 - Xose Pérez - Using the new Bean Loader CLI from PlatformIO
• Sep 20, 2016 - The Linux Foundation - 21 Open Source Projects for IoT
• Sep 19, 2016 - Doc Walker - How to automatically test build Arduino libraries
• Sep 18, 2016 - Kadda Sahnine - LoRaWAN network practice with Objenious, PlatformIO and Node-RED
• Sep 13, 2016 - Xose Pérez MQTT LED Matrix Display
• Sep 12, 2016 - Pedro Minatel - OTA – Como programar o ESP8266 pelo WiFi no platformIO (OTA programming for ESP8266 via Wi-Fi using PlatformIO, Portuguese)
• Sep 2, 2016 - Xose Pérez ESP8266: Optimizing files for SPIFFS with Gulp
• Aug 28, 2016 - Tom Parker Using the BBC micro:bit with PlatformIO
• Aug 24, 2016 - Primal Cortex Cloud based continuous integration and delivery for IOT using PlatformIO
• Aug 14, 2016 - Rodrigo Castro - PlataformIO o comó usar Arduino con ATOM (Spanish)
• Jul 27, 2016 - Francesco Azzola - Arduino Alternative IDE: PlatformIO IoT integrated platform
• Jul 15, 2016 - Jaime - ESP8266 Mobile Rick Roll Captive Portal
• Jul 5, 2016 - Ivan Kravets, Ph.D. - Explore the new development instruments for Arduino with PlatformIO ecosystem
• Jul 5, 2016 - Belinda - Monte Bianco Arduino Developer Summit
• Jul 1, 2016 - Tam Hanna - Mikrocontroller-Gipfel in den Alpen: Arduino Developer Summit, Tag eins (Microcontroller peaks in the Alps: Arduino Developer Summit, Day One, German)
• Jun 14, 2016 - Glyn Hudson - OpenEnergyMonitor Part 2/3: Firmware Continuous Test & Build
• Jun 13, 2016 - Daniel Eichhorn - New Weather Station Demo on Github
• Jun 12, 2016 - Glyn Hudson - OpenEnergyMonitor Part 1/3: PlatformIO open-source embedded development ecosystem
• Jun 12, 2016 - Uli Wolf - Nutzung von PlatformIO im Atom Editor zur Entwicklung von Arduino Code (Use PlatformIO and Atom Editor to develop Arduino code, German)
• Jun 3, 2016 - Daniel Eichhorn - ESP8266: Continuous Delivery Pipeline – Push To Production
• May 29, 2016 - Chris Synan - Reverse Engineer RF Remote Controller for IoT!
• May 26, 2016 - Charlie Key - 7 Best Developer Tools To Build Your NEXT Internet of Things Application
• May 22, 2016 - Pedro Minatel - Estação meteorológica com ESP8266 (Weather station with ESP8266, Portuguese)
• May 16, 2016 - Pedro Minatel - Controle remoto WiFi com ESP8266 (WiFi remote control using ESP8266, Portuguese)
• May 11, 2016 - Jo Vandeginste - Using PlatformIO to compile for Jeelabs' Jeenode Micro
• May 08, 2016 - Radoslaw Bob - Touch controlled buzzer (Nodemcu ESP8266)
• May 06, 2016 - Jean Roux - The IoT building blocks I use for my home-automation projects
• May 05, 2016 - Ivan Kravets, Ph.D. / Eclipse Virtual IoT Meetup - PlatformIO: a cross-platform IoT solution to build them all!
• Apr 15, 2016 - Daniel Eichhorn - ESP8266: Offline Debugging with the Platformio Environment
• Mar 29, 2016 - Pablo Peñalve - PlatformIO + Geany + Raspberry PI, Spanish
• Mar 24, 2016 - NAzT - PlatformIO และการปรับแต่ง เพื่อใช้สำหรับพัฒนา Arduino Library (PlatformIO and advanced development for Arduino Library, Thai)
• Mar 16, 2016 - Jakub Skořepa - Instalace PlatformIO (PlatformIO IDE Installation, Czech)
• Mar 12, 2016 - Richard Arthurs - Getting Started With PlatformIO
• Mar 07, 2016 - Joran Jessurun - Nieuwe wereld met PlatformIO (New world with PlatformIO, Dutch)
• Feb 23, 2016 - Ptarmigan Labs - ESP8266 Over The Air updating – what are the options?
• Feb 22, 2016 - Grzegorz Hołdys - How to Integrate PlatformIO with Netbeans
• Feb 19, 2016 - Embedds - Develop easier with PlatformIO ecosystem
• Feb 13, 2016 - Robert Cudmore - Programming an arduino with PlatformIO
• Jan 24, 2016 - Sergey Prilukin - How to use IntelliJ IDEA to develop and upload software for micro controllers like Arduino
• Jan 16, 2016 - Dani Eichhorn - ESP8266 Arduino IDE Alternative: PlatformIO
• Jan 11, 2016 - David Mills, Ph.D. - STM NUCLEOF401RE TIMER IO
• Jan 05, 2016 - Julien Rodrigues - Internet Of Things: The IDE scandal
2015 • Dec 22, 2015 - Jan Penninkhof - Over-the-Air ESP8266 programming using PlatformIO
• Dec 15, 2015 - stastaka - PlatformIOでカスタムボードを使う (Use a custom board for PlatformIO, Japanese)
• Dec 08, 2015 - Piotr Król - Using PlatformIO with TI MSP430 LunchPads
• Dec 01, 2015 - Michał Seroczyński - Push Notification from Arduino Yún with motion sensor
• Dec 01, 2015 - JetBrains CLion Blog - C++ Annotated: Fall 2015. Arduino Support in CLion using PlatformIO
• Dec 01, 2015 - Tateno Yuichi - ESP8266 を CUI で開発する (Develop a ESP8266 in CUI, Japanese)
• Nov 29, 2015 - Keith Hughes - Using PlatformIO for Embedded Projects
• Nov 22, 2015 - Michał Seroczyński - Using PlatformIO to get started with Arduino in CLion IDE
• Nov 09, 2015 - ÁLvaro García Gómez - Programar con Arduino "The good way" (Programming with Arduino "The good way", Spanish)
• Nov 06, 2015 - nocd5 - PlatformIOでmbedをオフラインビルドしSTM32 Nucleoボードでmrubyを使う (Use mruby in the offline build for STM32 Nucleo board with mbed and PlatformIO, Japanese)
• Oct 21, 2015 - Vittorio Zaccaria - Using a cheap STM32 Nucleo to teach remote sensor monitoring
• Oct 18, 2015 - Nico Coetzee - First Arduino I2C Experience with PlatformIO
• Oct 10, 2015 - Floyd Hilton - Programming Arduino with Atom
• Oct 01, 2015 - Mistan - Compile and Upload Arduino Sketch with PlatformIO for Raspberry Pi Running Arch Linux
• Sep 30, 2015 - Jay Wiggins - PlatformIO Investigation
• Aug 08, 2015 - Josh Glendenning - Armstrap Eagle and PlatformIO
• Aug 01, 2015 - Russell Davis - PlatformIO on the Raspberry Pi
• Jul 25, 2015 - DinoTools - Erste Schritte mit PlatformIO (Getting Started with PlatformIO, German)
• Jul 20, 2015 - Eli Fatsi - Arduino Development in Atom Editor
• Jul 14, 2015 - ElbinarIO - Programar para Arduino y otros microcontroladores desde la linea de comandos (Program Arguino and other microcontrollers from the command line, Spanish)
• Jul 07, 2015 - Sho Hashimoto - PlatformIOでArduino開発する(Arduino development in PlatformIO, Japanese)
• Jun 02, 2015 - Alejandro Guirao Rodríguez - Discovering PlatformIO: The RaspberryPi / Arduino combo kit is a winner option when prototyping an IoT-style project
• May 17, 2015 - S.S - コマンドラインでArduino開発 : vim + platformio (Arduino development at the command line: VIM + PlatformIO, Japanese)
• May 11, 2015 - IT Hare - From Web Developer to Embedded One: Interview with Ivan Kravets, The Guy Behind PlatformIO. Part II
• May 4, 2015 - IT Hare - From Web Developer to Embedded One: Interview with Ivan Kravets, The Guy Behind PlatformIO. Part I
• Apr 17, 2015 - Michael Ball - PlatformIO - A Cross-Platform Code Builder and Missing Library Manager
• Mar 23, 2015 - Atmel - Cross-board and cross-vendor embedded development with PlatformIO
• Mar 22, 2015 - Mark VandeWettering - Discovered a new tool for embedded development: PlatformIO
• Feb 25, 2015 - Hendrik Putzek - Use your favourite IDE together with Arduino
2014 • Oct 7, 2014 - Ivan Kravets, Ph.D. - Integration of PlatformIO library manager to Arduino and Energia IDEs
• Jun 20, 2014 - Ivan Kravets, Ph.D. - Building and debugging Atmel AVR (Arduino-based) project using Eclipse IDE+PlatformIO
• Jun 17, 2014 - Ivan Kravets, Ph.D. - How was PlatformIO born or why I love Python World
Frequently Asked Questions NOTE: We have a big database with Frequently Asked Questions in our Community Forums.  Please have a look at it.
• What is PlatformIO?
• What is .pio directory
• What is .pioenvs directory
• Command completion in Terminal
• Install Python Interpreter
• Program Memory Usage
• Advanced Serial Monitor with UI
• Multiple PIO Cores in a system
• 'platformio' is not recognized as an internal or external command
• 99-platformio-udev.rules
• ImportError: cannot import name _remove_dead_weakref
• Package Manager
• [Error 5] Access is denied
• Solution 1: Remove folder
• Solution 2: Antivirus
• Solution 3: Run from Terminal
• Solution 4: Manual
• UnicodeWarning: Unicode equal comparison failed
• UnicodeDecodeError: Non-ASCII characters found in build environment
• ARM toolchain: cc1plus: error while loading shared libraries
• Archlinux: libncurses.so.5: cannot open shared object file
• Monitoring a serial port breaks upload
General What is PlatformIO? Please refer to what_is_pio
What is .pio directory Please refer to projectconf_pio_workspace_dir.
What is .pioenvs directory Please refer to projectconf_pio_build_dir.
Command completion in Terminal Please refer to cmd_misc_completion.
Install Python Interpreter piocore is written in Python that is installed by default on the all popular OS except Windows.
Please navigate to official website and Download the latest Python and install it. Please READ NOTES BELOW.
macOS  Please read the "Important Information" displayed during installation for information about SSL/TLS certificate validation and the running the "Install Certificates.command".
If you do not install SSL/TLS certificates, PlatformIO will not be able to download dependent packages, libraries, and toolchains.
Windows Please select Add Python to Path (see below), otherwise, python command will not be available.  [image]
Convert Arduino file to C++ manually Some ide doesn't support Arduino files (*.ino and .pde) because they are not valid C/C++ based source files:
In this case, code completion and code linting do not work properly or are disabled. To avoid this issue you can manually convert your INO files to CPP.
For example, we have the next Demo.ino file:
void setup () { someFunction(13); }
void loop() { delay(1000); }
void someFunction(int num) { }
Let's convert it to  Demo.cpp:
1. Add #include <Arduino.h> at the top of the source file
2. Declare each custom function (excluding built-in, such as setup and loop) before it will be called.
The final Demo.cpp:
void someFunction(int num);
Program Memory Usage PlatformIO calculates firmware/program memory usage based on the next segments:
.text  The code segment, also known as a text segment or simply as text, is where a portion of an object file or the corresponding section of the program's virtual address space that contains executable instructions is stored and is generally read-only and fixed size.
.data  The .data segment contains any global or static variables which have a pre-defined value and can be modified. The values for these variables are initially stored within the read-only memory (typically within .text) and are copied into the .data segment during the start-up routine of the program. Example,
int val = 3; char string[] = "Hello World";
.bss   Uninitialized data is usually adjacent to the data segment. The BSS segment contains all global variables and static variables that are initialized to zero or do not have explicit initialization in the source code.  For instance, a variable defined as static int i; would be contained in the BSS segment.
The rough calculation could be done as:
• PROGRAM (Flash) = .text + .data
• DATA (RAM) = .bss + .data
If you need to print all memory sections and addresses, please use platformio run --verbose command.
Recommended for reading:
• https://en.wikipedia.org/wiki/Data_segment
• text, data and bss: Code and Data Size Explained
Advanced Serial Monitor with UI PlatformIO Core provides CLI version (cmd_device_monitor) of Serial Monitor.  If you need advanced instrument with a rich UI, we recommend free and multi-platform CoolTerm serial port terminal application.
WARNING: Please note that you need to manually disconnect (close serial port connection) in CoolTerm before doing uploading in PlatformIO. PlatformIO can not disconnect/connect to a target device automatically when CoolTerm is used.
Troubleshooting Installation Multiple PIO Cores in a system Multiple standalone piocore in a system could lead to the different issues. We highly recommend to keep one instance of PIO Core or use built-in PIO Core in pioide:
• ide_atom - Menu PlatformIO: Settings > PlatformIO IDE > Use built-in PlatformIO Core
• ide_vscode - ide_vscode_settings > Set platformio-ide.useBuiltinPIOCore to true.
Finally, if you have a standalone piocore in a system, please open system Terminal (not PlatformIO IDE Terminal) and uninstall obsolete PIO Core:
pip uninstall platformio
# if you used macOS "brew" brew uninstall platformio
If you need to have piocore globally in a system, please piocore_install_shell_commands.
'platformio' is not recognized as an internal or external command If you use pioide, please check in PlatformIO IDE Settings that "Use built-in PIO Core" is enabled.
If you modify system environment variable PATH in your Bash/Fish/ZSH profile, please do not override global PATH. This line export PATH="/my/custom/path" is incorrect. Use export PATH="/my/custom/path":$PATH instead.
99-platformio-udev.rules Linux users have to install udev rules for PlatformIO supported boards/devices. The latest version of rules may be found at https://raw.githubusercontent.com/platformio/platformio-core/master/scripts/99-platformio-udev.rules
NOTE: Please check that your board's PID and VID  are listed in the rules. You can list connected devices and their PID/VID using cmd_device_list command.
This file must be placed at /etc/udev/rules.d/99-platformio-udev.rules (preferred location) or /lib/udev/rules.d/99-platformio-udev.rules (required on some broken systems).
Please open system Terminal and type
# Recommended curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core/master/scripts/99-platformio-udev.rules | sudo tee /etc/udev/rules.d/99-platformio-udev.rules
# OR, manually download and copy this file to destination folder sudo cp 99-platformio-udev.rules /etc/udev/rules.d/99-platformio-udev.rules
Restart "udev" management tool:
sudo service udev restart
# or
sudo udevadm control --reload-rules sudo udevadm trigger
Ubuntu/Debian users may need to add own “username” to the “dialout” group if they are not “root”, doing this issuing
sudo usermod -a -G dialout $USER sudo usermod -a -G plugdev $USER
Similarly, Arch users may need to add their user to the “uucp” group
sudo usermod -a -G uucp $USER sudo usermod -a -G lock $USER
NOTE: You will need to log out and log back in again (or reboot) for the user group changes to take effect.
After this file is installed, physically unplug and reconnect your board.
ImportError: cannot import name _remove_dead_weakref Windows users can experience this issue when multiple Python interpreters are installed in a system and conflict each other. The easy way to fix this problem is uninstalling all Python interpreters using Windows Programs Manager and installing them manually again.
1. "Windows > Start Menu > Settings > System > Apps & Features", select Python interpreters and uninstall them.
2. Install the latest Python interpreter, see Install Python Interpreter guide
3. Remove C:\Users\YourUserName\.platformio and C:\.platformio folders if exist (do not forget to replace "YourUserName" with the real user name)
4. Restart pioide.
Package Manager [Error 5] Access is denied PlatformIO installs all packages to "projectconf_pio_core_dir/packages" directory. You MUST HAVE write access to this folder.  Please note that PlatformIO does not require "sudo"/administrative privileges.
Solution 1: Remove folder A quick solution is to remove "projectconf_pio_core_dir/packages" folder and repeat installation/building/uploading again.
Solution 2: Antivirus Some antivirus tools forbid programs to create files in the background. PlatformIO Package Manager does all work in the background: downloads package, unpacks archive in temporary folder and moves final files to "projectconf_pio_core_dir/packages" folder.
Antivirus tool can block PlatformIO, that is why you see "[Error 5] Access is denied".  Try to disable it for a while or add projectconf_pio_core_dir directory to exclusion/whitelist.
Solution 3: Run from Terminal As we mentioned in "Solution 2", antivirus tools can block background file system operations. Another solution is to run piocore from a system terminal.
1. Open System Terminal, on Windows cmd.exe (not pioide Terminal)
2. Build a project and upload firmware using piocore which will download and install all dependent packages:
# Change directory to PlatformIO Project where is located "platformio.ini" cd path/to/platformio/project
# Force PlatformIO to install PIO Home dependencies platformio home
# Force PlatformIO to install toolchains platformio run --target upload
If "platformio" command is not globally available in your environment and you use pioide, please use built-in piocore which is located in:
• Windows: C:\Users\{username}\.platformio\penv\Scripts\platformio Please replace {username} with a real user name
• Unix: ~/.platformio/penv/bin/platformio
NOTE: You can add platformio and pio commands to your system environment. See piocore_install_shell_commands.
Solution 4: Manual If none of the solutions above do work for you, you can download and unpack all packages manually to "projectconf_pio_core_dir/packages".
Please visit PlatformIO Package Storage and download a package for your platform.  A correct package path is "projectconf_pio_core_dir/packages/{package_name}/package.json".
Building UnicodeWarning: Unicode equal comparison failed Full warning message is "UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal".
KNOWN ISSUE. Please move your project to a folder which full path does not contain non-ASCII chars.
UnicodeDecodeError: Non-ASCII characters found in build environment KNOWN ISSUE. piocore currently does not support projects which contain non-ASCII characters (codes) in a full path or depend on the libraries which use non-ASCII characters in their names.
TEMPORARY SOLUTION
1. Use pioide, it will automatically install piocore in a root of system disk (%DISK%/.platformio) and avoid an issue when system User contains non-ASCII characters
2. Do not use non-ASCII characters in project folder name or its parent folders.
Also, if you want to place piocore in own location, see:
• Set PLATFORMIO_CORE_DIR environment variable with own path
• Configure custom location per project using projectconf_pio_core_dir option in projectconf.
ARM toolchain: cc1plus: error while loading shared libraries See related answers for error while loading shared libraries.
Archlinux: libncurses.so.5: cannot open shared object file Answered in issue #291.
Monitoring a serial port breaks upload Answered in issue #384.
Release Notes PlatformIO Core 4 4.3.4 (2020-05-23) • Added PlatformIO CLI Shell Completion for Fish, Zsh, Bash, and PowerShell (issue #3435)
• Automatically build contrib-pysite package on a target machine when pre-built package is not compatible (issue #3482)
• Fixed an issue on Windows when installing a library dependency from Git repository (issue #2844, issue #3328)
4.3.3 (2020-04-28) • Fixed "UnicodeDecodeError: 'utf-8' codec can't decode byte" when non-Latin chars are used in project path (issue #3481)
4.3.2 (2020-04-28) • New Account Management System (preview)
• Open source PIO Remote client
• Improved PIO Check with more accurate project processing
• Echo what is typed when send_on_enter device monitor filter is used (‐ issue #3452)
• Fixed PIO Unit Testing for Zephyr RTOS
• Fixed UnicodeDecodeError on Windows when network drive (NAS) is used (‐ issue #3417)
• Fixed an issue when saving libraries in new project results in error "No option 'lib_deps' in section" (issue #3442)
• Fixed an incorrect node path used for pattern matching when processing middleware nodes
• Fixed an issue with missing lib_extra_dirs option in SRC_LIST for CLion (issue #3460)
4.3.1 (2020-03-20) • Fixed a SyntaxError "'return' with argument inside generator" for PIO Unified Debugger when Python 2.7 is used
• Fixed an issue when lib_archive = no was not honored in "platformio.ini"
• Fixed a TypeError "super(type, obj): obj must be an instance or subtype of type" when device monitor is used with a custom dev-platform filter (issue #3431)
4.3.0 (2020-03-19) • Initial support for an official PlatformIO for CLion IDE plugin:
• Smart C and C++ editor
• Code refactoring
• On-the-fly code analysis
• "New PlatformIO Project" wizard
• Building, Uploading, Testing
• Integrated debugger (inline variable view, conditional breakpoints, expressions, watchpoints, peripheral registers, multi-thread support, etc.)
• Device Monitor 2.0
• Added PlatformIO Device Monitor Filter API (dev-platforms can extend base device monitor with a custom functionality, such as exception decoding) (pull #3383)
• Configure project device monitor with monitor_filters option
• Capture device monitor output to a file with log2file filter (issue #670)
• Show a timestamp for each new line with time filter (issue #981)
• Send a text to device on ENTER with send_on_enter filter (issue #926)
• Show a hexadecimal representation of the data (code point of each character) with hexlify filter
• New standalone (1-script) PlatformIO Core Installer
• Initial support for Renode simulation framework (issue #3401)
• Added support for Arm Mbed "module.json" dependencies field (issue #3400)
• Improved support for Arduino "library.properties" depends field
• Fixed an issue when quitting from PlatformIO IDE does not shutdown PIO Home server
• Fixed an issue "the JSON object must be str, not 'bytes'" when PIO Home is used with Python 3.5 (issue #3396)
• Fixed an issue when Python 2 does not keep encoding when converting ".ino" (issue #3393)
• Fixed an issue when "libArchive": false in "library.json" does not work (issue #3403)
• Fixed an issue when not all commands in compilation database "compile_commands.json" use absolute paths (pull #3415)
• Fixed an issue when unknown transport is used for PIO Unit Testing engine (issue #3422)
4.2.1 (2020-02-17) • Improved VSCode template with special forceInclude field for direct includes via -include flag (issue #3379)
• Improved support of PIO Home on card-sized PC (Raspberry Pi, etc.) (‐ issue #3313)
• Froze "marshmallow" dependency to 2.X for Python 2 (issue #3380)
• Fixed "TypeError: unsupported operand type(s)" when system environment variable is used by project configuration parser (issue #3377)
• Fixed an issue when Library Dependency Finder (LDF) ignores custom "libLDFMode" and "libCompatMode" options in library.json
• Fixed an issue when generating of compilation database "compile_commands.json" does not work with Python 2.7 (issue #3378)
4.2.0 (2020-02-12) • PlatformIO Home 3.1:
• Project Configuration UI for "platformio.ini"
• PIO Check – automated code analysis without hassle:
• Added support for PVS-Studio static code analyzer
• Initial support for Project Manager CLI:
• Show computed project configuration with a new platformio project config command or dump to JSON with platformio project config --json-output (issue #3335)
• Moved platformio init command to platformio project init
• Generate compilation database "compile_commands.json" (issue #2990)
• Control debug flags and optimization level with a new debug_build_flags option
• Install a dev-platform with ALL declared packages using a new --with-all-packages option for pio platform install command  (issue #3345)
• Added support for "pythonPackages" in platform.json manifest (PlatformIO Package Manager will install dependent Python packages from PyPi registry automatically when dev-platform is installed)
• Handle project configuration (monitor, test, and upload options) for PIO Remote commands (issue #2591)
• Added support for Arduino's library.properties depends field (issue #2781)
• Autodetect monitor port for boards with specified HWIDs (issue #3349)
• Updated SCons tool to 3.1.2
• Updated Unity tool to 2.5.0
• Made package ManifestSchema compatible with marshmallow >= 3 (issue #3296)
• Warn about broken library manifest when scanning dependencies (issue #3268)
• Do not overwrite custom items in VSCode's "extensions.json" (issue #3374)
• Fixed an issue when env.BoardConfig() does not work for custom boards in extra scripts of libraries (issue #3264)
• Fixed an issue with "start-group/end-group" linker flags on Native development platform (issue #3282)
• Fixed default PIO Unified Debugger configuration for J-Link probe
• Fixed an issue with LDF when header files not found if "libdeps_dir" is within a subdirectory of "lib_extra_dirs" (issue #3311)
• Fixed an issue "Import of non-existent variable 'projenv''" when development platform does not call "env.BuildProgram()" (issue #3315)
• Fixed an issue when invalid CLI command does not return non-zero exit code
• Fixed an issue when Project Inspector crashes when flash use > 100% (‐ issue #3368)
• Fixed a "UnicodeDecodeError" when listing built-in libraries on macOS with Python 2.7 (issue #3370)
• Fixed an issue with improperly handled compiler flags with space symbols in VSCode template (issue #3364)
• Fixed an issue when no error is raised if referred parameter (interpolation) is missing in a project configuration file (issue #3279)
4.1.0 (2019-11-07) • PIO Check – automated code analysis without hassle:
• Out of scope memory usage.
• PlatformIO Home 3.0:
• Added support for Build Middlewares: configure custom build flags per specific file, skip any build nodes from a framework, replace build file with another on-the-fly, etc.
• Extend project environment configuration in "platformio.ini" with other sections using a new extends option (issue #2953)
• Generate .ccls LSP file for Emacs cross references, hierarchies, completion and semantic highlighting
• Added --no-ansi flag for PIO Core to disable ANSI control characters
• Added --shutdown-timeout option to PIO Home Server
• Fixed an issue with project generator for CLion IDE when 2 environments were used (issue #2824)
• Fixed an issue when configuration file options partly ignored when using custom --project-conf (issue #3034)
• Fixed an issue when installing a package using custom Git tag and submodules were not updated correctly (issue #3060)
• Fixed an issue with linking process when $LDSCRIPT contains a space in path
• Fixed security issue when extracting items from TAR archive (issue #2995)
• Fixed an issue with project generator when src_build_flags were not respected (issue #3137)
• Fixed an issue when booleans in "platformio.ini" are not parsed properly (issue #3022)
• Fixed an issue with invalid encoding when generating project for Visual Studio (issue #3183)
• Fixed an issue when Project Config Parser does not remove in-line comments when Python 3 is used (issue #3213)
• Fixed an issue with a GCC Linter for PlatformIO IDE for Atom (issue #3218)
4.0.3 (2019-08-30) • Added support for multi-environment PlatformIO project for CLion IDE (‐ issue #2824)
• Generate .ccls LSP file for Vim cross references, hierarchies, completion and semantic highlighting (issue #2952)
• Added support for PLATFORMIO_DISABLE_COLOR system environment variable which disables color ANSI-codes in a terminal output (issue #2956)
• Updated SCons tool to 3.1.1
• Remove ProjectConfig cache when "platformio.ini" was modified outside
• Fixed an issue with PIO Unified Debugger on Windows OS when debug server is piped
• Fixed an issue when --upload-port CLI flag does not override declared upload_port option in "platformio.ini" (Project Configuration File)
4.0.2 (2019-08-23) • Fixed an issue with a broken LDF when checking for framework compatibility (issue #2940)
4.0.1 (2019-08-22) • Print debug tool name for the active debugging session
• Do not shutdown PIO Home Server for "upgrade" operations (issue #2784)
• Improved computing of project check sum (structure, configuration) and avoid unnecessary rebuilding
• Improved printing of tabulated results
• Automatically normalize file system paths to UNIX-style for Project Generator (issue #2857)
• Ability to set "databaseFilename" for VSCode and C/C++ extension (issue #2825)
• Renamed "enable_ssl" setting to strict_ssl
• Fixed an issue with incorrect escaping of Windows slashes when using PIO Unified Debugger and "piped" openOCD