Перейти к содержанию

PlatformIO: среда для Arduino, ESP32 и STM32

PlatformIO собирает и прошивает программы для сотен плат — Arduino, ESP32, STM32, Raspberry Pi Pico — из одного проекта и одним набором команд. Разбираем, как его поставить, как устроен файл platformio.ini, какие настройки нужны популярным платам и как загрузить прошивку и открыть монитор порта.

Обновлено Редакция GAW

PlatformIO — открытая среда для разработки программ микроконтроллеров. Она скачивает нужные компиляторы, фреймворки (Arduino, ESP-IDF, STM32Cube, Zephyr и другие) и утилиты прошивки сама, по описанию проекта, и одинаково работает с платами на AVR, ESP32, STM32, RP2040 и сотнях других. PlatformIO состоит из PlatformIO Core — программы командной строки pio — и PlatformIO IDE, расширения для редактора Visual Studio Code, в которое Core уже встроен. Текущая версия Core — 6.2.0, лицензия Apache 2.0.

Установка

  1. Установите Visual Studio Code.
  2. Откройте в нём менеджер расширений, найдите официальное расширение PlatformIO IDE и установите его. При первом запуске расширение скачает PlatformIO Core.
  3. Если зависимости будут ставиться из Git-репозиториев, в системе нужен Git: команда git --version должна работать в терминале. В Linux дополнительно нужен пакет python3-venv.

Отдельно ставить PlatformIO Core не нужно: в терминале VS Code команда pio уже доступна. Чтобы вызывать её из обычного терминала Linux или macOS, документация советует создать ссылки на ~/.platformio/penv/bin/pio и ~/.platformio/penv/bin/platformio в каталоге ~/.local/bin.

Структура проекта

Проект создаётся кнопкой «New Project» на домашней странице PlatformIO или командой pio project init --board uno. В нём появляются:

ПутьЧто в нём
platformio.iniнастройки проекта
src/исходные файлы программы: .c, .cpp, .ino, .S
include/заголовочные файлы проекта
lib/собственные библиотеки проекта
test/модульные тесты
.pio/результаты сборки и скачанные библиотеки — в систему контроля версий не добавляют

Файл platformio.ini

platformio.ini — текстовый файл в формате INI в корне проекта. Он состоит из секций в квадратных скобках и строк «ключ = значение»; строки, начинающиеся с точки с запятой, — комментарии. Список значений пишут через запятую с пробелом или по одному на строке с отступом не меньше двух пробелов.

Каждая секция [env:ИМЯ] описывает окружение — сборку для одной платы с одними настройками. В проекте их может быть несколько, например для Uno и ESP32 или для отладочной и рабочей сборки. Общие для всех окружений настройки выносят в секцию [env] без имени, а в секции [platformio] опция default_envs выбирает, какие окружения собирать по умолчанию.

[env]
framework = arduino
monitor_speed = 115200
lib_deps =
    knolleary/PubSubClient

[env:uno]
platform = atmelavr
board = uno

[env:esp32]
platform = espressif32
board = esp32dev
build_flags = -D LED_PIN=2

Основные опции окружения:

ОпцияЧто задаёт
platformплатформа разработки: atmelavr, espressif32, espressif8266, ststm32, raspberrypi; можно с версией
boardидентификатор платы из реестра PlatformIO
frameworkфреймворк: arduino, espidf, stm32cube, cmsis, zephyr…
upload_portпорт для прошивки: COM3, /dev/ttyUSB*, IP-адрес для OTA; без него PlatformIO ищет порт сам
upload_protocolспособ прошивки, если у платы их несколько: stlink, dfu, jlink, cmsis-dap…
upload_speedскорость загрузки по последовательному порту
monitor_speedскорость монитора порта; по умолчанию 9600 бит/с
lib_depsбиблиотеки, которые PlatformIO скачает сам
build_flagsключи компилятора, например -D NAME=VALUE

Документация советует фиксировать версию платформы — platform = platformio/espressif32@^6.1.0: без версии разные компьютеры и разные дни дадут разную сборку. Знак ^ разрешает совместимые обновления, ~ — только исправления ошибок, версия без знака — ровно её.

Настройки популярных плат

Протокол и скорость загрузки PlatformIO берёт из описания платы, поэтому обычно достаточно указать platform, board и framework.

ПлатаplatformboardЗагрузка по умолчанию
Arduino Unoatmelavrunoпротокол arduino, 115 200 бит/с
Arduino Nano (старый загрузчик)atmelavrnanoatmega328arduino, 57 600 бит/с
Arduino Nano (новый загрузчик)atmelavrnanoatmega328newarduino, 115 200 бит/с
ESP32 DevKitespressif32esp32devesptool, 460 800 бит/с; фреймворки arduino и espidf
NodeMCU v2 (ESP8266)espressif8266nodemcuv2esptool, 115 200 бит/с
Blue Pill (STM32F103C8)ststm32bluepill_f103c8stlink; ещё jlink, cmsis-dap, blackmagic, mbed, dfu
Raspberry Pi Picoraspberrypipicopicotool; ещё cmsis-dap, jlink, raspberrypi-swd

Если Nano не прошивается с ошибкой синхронизации, чаще всего выбран не тот загрузчик: попробуйте nanoatmega328 вместо nanoatmega328new или наоборот. Что означают ошибки загрузки на AVR, разобрано в статье об AVRDUDE, на ESP32 и ESP8266 — в статье об esptool: PlatformIO вызывает именно эти программы: в платформу atmelavr входит пакет tool-avrdude, в espressif32 — tool-esptool.

Команды

В VS Code те же действия выполняются кнопками на нижней панели: сборка, загрузка, монитор порта, очистка.

pio run                     # собрать все окружения по умолчанию
pio run -e esp32            # собрать одно окружение
pio run -e uno -t upload    # собрать и прошить
pio run -t clean            # удалить результаты сборки
pio run -t upload -t monitor  # прошить и сразу открыть монитор порта
pio device list             # список последовательных портов
pio device monitor -b 115200  # монитор порта
pio pkg install             # скачать платформу и библиотеки проекта заранее

Монитор порта умеет преобразовывать вывод фильтрами: time добавляет к строкам метку времени, log2file пишет всё в файл, hexlify показывает коды символов, а esp32_exception_decoder и esp8266_exception_decoder переводят адреса из сообщения о падении программы ESP в имена функций и строки исходного кода. Фильтр включают в platformio.ini опцией monitor_filters = esp32_exception_decoder или ключом -f команды pio device monitor.

Библиотеки

Библиотеки перечисляют в lib_deps, каждую на своей строке: по имени владельца и библиотеки из реестра PlatformIO, при необходимости с требованием к версии (knolleary/PubSubClient, владелец/библиотека @ ^1.2.3), по адресу Git-репозитория (https://github.com/…/…git#v2.0) или просто по имени, если это встроенная библиотека фреймворка (SPI, Wire). Перед сборкой PlatformIO скачивает их в каталог .pio/libdeps проекта, поэтому у каждого проекта свои версии библиотек и обновление одной не ломает другой.

Частые вопросы

Где в PlatformIO задать скорость монитора порта?

В файле platformio.ini строкой monitor_speed = 115200 в секции своего окружения. Без неё монитор открывается на 9600 бит/с, и если скетч вызывает Serial.begin(115200), в мониторе будут нечитаемые символы. Из командной строки скорость задают ключом: pio device monitor -b 115200.

Как подключить библиотеку в PlatformIO?

Опцией lib_deps в platformio.ini: по одной библиотеке на строку, с именем владельца и, по желанию, требованием к версии — например knolleary/PubSubClient или владелец/библиотека @ ^1.2.3. При сборке PlatformIO сам скачает библиотеку в папку проекта .pio/libdeps. Можно указать и адрес Git-репозитория. Встроенные библиотеки фреймворка, такие как SPI или Wire, указываются просто по имени.

Как прошить Blue Pill через PlatformIO без ST-Link?

У описания платы bluepill_f103c8 по умолчанию указан протокол stlink, но в списке есть и другие: jlink, cmsis-dap, blackmagic, mbed и dfu. Протокол выбирают строкой upload_protocol в platformio.ini; для загрузки через USB по протоколу dfu на плате должен быть записан соответствующий загрузчик.

Чем PlatformIO отличается от Arduino IDE?

PlatformIO хранит все настройки проекта — плату, фреймворк, версии платформы и библиотек, флаги компилятора — в одном текстовом файле platformio.ini, поэтому проект собирается одинаково на любом компьютере. В одном проекте можно описать несколько окружений, например для Uno и ESP32. Редактором служит VS Code с автодополнением, есть отладка и тесты. Arduino IDE проще для первого знакомства, но настройки платы в ней задаются в меню и в проекте не сохраняются.

Источники

  1. PlatformIO Labs. PlatformIO documentation (репозиторий platformio/platformio-docs, коммит a6877ce) — установка PlatformIO IDE для VS Code и команд оболочки, файл platformio.ini: секции [platformio], [env] и [env:NAME], опции platform, board, framework, upload_port, upload_protocol, upload_speed, monitor_speed, lib_deps, build_flags; команды pio run, pio device monitor и его фильтры, pio pkg install, pio project init
  2. PlatformIO Labs. Описания плат в платформах atmelavr, espressif32, ststm32, raspberrypi (каталоги boards/*.json) — протокол и скорость загрузки для uno, nanoatmega328, nanoatmega328new, esp32dev; протоколы загрузки bluepill_f103c8 и pico
  3. PlatformIO Core 6.2.0, 5 сентября 2026 — текущая версия; лицензия Apache 2.0

Нашли ошибку?