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.
Установка
- Установите Visual Studio Code.
- Откройте в нём менеджер расширений, найдите официальное расширение PlatformIO IDE и установите его. При первом запуске расширение скачает PlatformIO Core.
- Если зависимости будут ставиться из 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.
| Плата | platform | board | Загрузка по умолчанию |
|---|---|---|---|
| Arduino Uno | atmelavr | uno | протокол arduino, 115 200 бит/с |
| Arduino Nano (старый загрузчик) | atmelavr | nanoatmega328 | arduino, 57 600 бит/с |
| Arduino Nano (новый загрузчик) | atmelavr | nanoatmega328new | arduino, 115 200 бит/с |
| ESP32 DevKit | espressif32 | esp32dev | esptool, 460 800 бит/с; фреймворки arduino и espidf |
| NodeMCU v2 (ESP8266) | espressif8266 | nodemcuv2 | esptool, 115 200 бит/с |
| Blue Pill (STM32F103C8) | ststm32 | bluepill_f103c8 | stlink; ещё jlink, cmsis-dap, blackmagic, mbed, dfu |
| Raspberry Pi Pico | raspberrypi | pico | picotool; ещё 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 проще для первого знакомства, но настройки платы в ней задаются в меню и в проекте не сохраняются.
Источники
- 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
- PlatformIO Labs. Описания плат в платформах atmelavr, espressif32, ststm32, raspberrypi (каталоги boards/*.json) — протокол и скорость загрузки для uno, nanoatmega328, nanoatmega328new, esp32dev; протоколы загрузки bluepill_f103c8 и pico
- PlatformIO Core 6.2.0, 5 сентября 2026 — текущая версия; лицензия Apache 2.0
Нашли ошибку?
Смотрите также
- AVRDUDEПрошивка AVR из командной строки: ключи, Arduino, USBasp, фьюзы, ошибки
- esptoolПрошивка ESP32 и ESP8266: команды, адреса загрузчика, режим загрузки, ошибки
- ПрограммыСАПР плат, симуляторы схем, среды и утилиты прошивки МК
- ESP32-DevKitC V438 контактов, АЦП, сенсоры, обвязка загрузки, питание, прошивка
- STM32 Blue PillSTM32F103C8T6: функции выводов, 5 В-выводы, питание, загрузка
- Raspberry Pi Pico40 контактов, функции GPIO, питание, АЦП, BOOTSEL и SWD