PlatformIO: Arduino без Arduino IDE
PlatformIO — это не другая среда, а другой способ работы: проект живёт в обычной папке с текстовым файлом настроек, собирается из командной строки или из Visual Studio Code, а библиотеки и версии плат записаны в проекте и ставятся сами. Скетчи при этом те же самые, на том же C++ с теми же setup и loop.
Новичку она не нужна. Она нужна в тот момент, когда проект перерос один файл, когда плат стало две, когда захотелось нормального автодополнения или когда проект надо отдать другому человеку так, чтобы у него собралось с первого раза.
Чем отличается от Arduino IDE
| Arduino IDE | PlatformIO |
|---|---|
| Библиотеки ставятся в общую папку, версия одна на все проекты | Библиотеки записаны в проекте с версией, у каждого проекта свои |
| Плата выбирается в меню перед каждой загрузкой | Плата записана в platformio.ini, можно несколько сразу |
| Редактор простой, автодополнение в 2.x есть, но слабое | Полноценный VS Code: переход к определению, подсказки, отладчик |
| Один файл .ino, остальные подключаются неявно | Обычный проект C++: src, include, lib, каждый файл явно |
| Ставится за пять минут, работает сразу | Первая установка качает гигабайт инструментов |
| Всё в одном окне, кнопка загрузки | Кнопки те же, но внизу окна, плюс терминал |
Установка
PlatformIO ставится как расширение в Visual Studio Code. Отдельного «PlatformIO IDE» для скачивания нет — то, что называется этим словом, и есть VS Code с расширением.
- 1
Поставьте Visual Studio Code
Бесплатный редактор от Microsoft, скачивается с code.visualstudio.com. Не путать с Visual Studio без слова Code — это другая, тяжёлая программа.
- 2
Поставьте расширение PlatformIO IDE
Слева панель расширений, в поиске
PlatformIO IDE, кнопка Install. Дальше ждите: расширение скачает Python и свои инструменты, это занимает от пяти до пятнадцати минут. В левой панели появится значок муравья. - 3
Создайте проект
Значок муравья → PIO Home → New Project. Имя, плата из списка (Arduino Uno, ESP32 Dev Module и так далее), фреймворк Arduino. PlatformIO скачает компилятор для этой платы — тоже не быстро, но только в первый раз.
- 4
Напишите код в src/main.cpp
Единственное отличие от скетча — строка
#include <Arduino.h>в начале. Arduino IDE добавляла её сама, здесь это делаете вы. - 5
Соберите и залейте
Внизу окна: галочка — собрать, стрелка — залить, вилка — монитор порта. Порт находится сам; если их несколько, укажите
upload_portв настройках.
// src/main.cpp — тот же скетч, только с одной строкой сверху
#include <Arduino.h>
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
}platformio.ini — сердце проекта
Всё, что в Arduino IDE выбиралось через меню, здесь записано в одном текстовом файле в корне проекта. Минимум для UNO — пять строк:
; platformio.ini — вся настройка проекта в одном файле
[env:uno]
platform = atmelavr
board = uno
framework = arduino
monitor_speed = 9600Для ESP32 добавляются скорость загрузки и библиотеки. Строка lib_deps — главная причина переходить: библиотеки с версиями скачаются сами на любом компьютере, куда попадёт проект.
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
upload_speed = 921600
; библиотеки скачаются сами при первой сборке
lib_deps =
adafruit/DHT sensor library@^1.4.6
adafruit/Adafruit SSD1306@^2.5.9Секций [env:…] может быть несколько: один проект собирается и для UNO, и для ESP32, а выбирается нужная внизу окна. Имена библиотек для lib_deps берутся из реестра registry.platformio.org — там же, где их ищет кнопка Libraries в PIO Home.
Когда переходить, а когда нет
Оставайтесь в Arduino IDE, если проект — один файл, плата одна, а уроки, по которым вы идёте, показывают скриншоты этой среды. Переход добавит настройки, но не добавит результата.
Переходите, когда код перевалил за несколько сотен строк и хочется разбить его по файлам; когда одна библиотека нужна в старой версии, а другая в новой; когда проект в git и его собирают на разных компьютерах; когда надоело искать, какой из пяти открытых скетчей сейчас настоящий.
Обратно вернуться можно всегда: код тот же. Переименуйте main.cpp в .ino, уберите строку с Arduino.h — и Arduino IDE его откроет.
На чём попадаются
Установка висит на «Installing PlatformIO Core»
Чаще всего антивирус или брандмауэр режут скачивание, либо путь к профилю пользователя содержит кириллицу — PlatformIO ставит свои инструменты в папку.platformio в домашней директории, и русские буквы в пути ломают Python. Помогает переменная PLATFORMIO_CORE_DIR с путём без кириллицы.
Функция не объявлена, хотя в Arduino IDE работало
Arduino IDE незаметно генерировала объявления функций, чтобы их можно было вызывать раньше, чем они написаны. PlatformIO этого не делает: либо объявите функцию сверху, либо перенесите её выше места вызова.
Не видит библиотеку из Arduino IDE
И не должен: у PlatformIO свои библиотеки внутри проекта. Добавьте нужную в lib_deps или положите папкой в lib/. Как устроены библиотеки вообще — отдельная страница.
Монитор порта показывает мусор
monitor_speed в ini не совпадает со скоростью в Serial.begin. По умолчанию монитор открывается на 9600, а ESP32 обычно работают на 115200.