Використовуємо PlatformIO без Visual Studio Code!
Опубліковано 07.08.2025, 09:58 в категорії Гайди
Зміст
Нещодавно я перейшов з Pop!_OS на Arch Linux, а отже мені довелось заново налаштовувати систему, встановлювати програми, і тд. Обдумуючи що слід встановити, а без чого можна обійтись - в число програм які я не хочу встановлювати потрапив редактор коду Visual Studio Code. Він мені був потрібен лише для проєктів пов'язаних з PlatformIO, але як виявляється, основним функціоналом PlatformIO можна користуватись і без VS Code!
Що таке той ваш PlatformIO
Насправді PlatformIO складається з двох частин:
- PlatformIO Core
- PlatformIO IDE
PlatformIO Core - це ядро всього проєкту, це CLI-застосунок, який займається підготовкою проєкта, компіляцією, завантаженням необхідних бібліотек, інструментів для прошивки мікроконтролера, тощо. Тобто всім тим, що нам як раз і треба.
PlatformIO IDE - це умовний "враппер", обгортка для PlatformIO Core, щоб не писати команди в термінал, а натискати кнопочки в Visual Studio Code, ну і при цьому користуватись іншими перевагами саме IDE.
Тож у підсумку PlatformIO IDE не є обов'язковим, і відповідно ми маємо змогу використовувати PlatformIO Core і без нього, а код при цьому писати де вам зручно - vim, nano, та хоч у звичайному блокноті.
Встановлюємо PlatformIO Core
Для почату треба встановити PlatformIO Core. На Arch Linux він присутній в офіційних репозиторіях дистрибутива, тому достатньо всього лише ввести наступну команду щоб встановити його:
sudo pacman -S platformio-core
На інших дистрибутивах, якщо в вашому пакетному менеджері він відсутній, то можна скористатись спеціальним скриптом для встановлення. Достатньо просто завантажити його наприклад через curl, wget, або навіть просто через браузер, та запустити через python:
curl -fsSL -o get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
python3 get-platformio.py
Тепер PlatformIO Core встановлений. Впевнитись в цьому можна виконавши наступну команду:
pio --version
Або:
platformio --version
pio
та platformio
це одне й те саме. В подальшому, в даній статі буде використовуватись саме pio
, але ви можете вводити і platformio
.
Встановлюємо udev правила
Пізніше, при спробі прошити мікроконтролер не від імені Root-а, ви скоріш за все зіштовхнетесь з якоюсь помилкою на кшталт "Permission Denied". Справа в тому, що за замовчуванням в Linux, користувач не має доступу до різного роду зовнішніх девайсів - наприклад мікросхема CH340, яка стоїть на багатьох девбордах Arduino, і використовується для їх прошивки - один з таких девайсів.
Тому щоб не використовувати для цих задач root доступ, нам треба "прокинути" ці девайси в user space. Для цього існують так звані udev правила (від user space /dev). На Arch Linux для цих задач знову таки існує окремий пакет, тому достатньо лише ввести:
sudo pacman -S platformio-core-udev
На інших дистрибутивах встановити його теж не складно, адже ці udev правила, це не що інше, як звичайний текстовий файлик. Тому можна використати tee
щоб помістити його куди треба за допомогою наступної команди:
curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core/develop/platformio/assets/system/99-platformio-udev.rules | sudo tee /etc/udev/rules.d/99-platformio-udev.rules
Тепер коли правила встановлені, нам треба перезавантажити і тригернути udev, щоб нові правила вступили в дію:
sudo udevadm control --reload && sudo udevadm trigger
Компілюємо готові проєкти
Тепер PlatformIO Core повністю готовий до роботи. Розпочати пропоную з роботи з вже готовими проєктами, наприклад коли ви знайшли якийсь цікавий проєкт і хочете його протестувати. Принцип тут такий самий як і в VS Code:
- клонуємо репозиторій проєкта
- відкриваємо його
- компілюємо
- прошиваємо
Компіляція проєкта (а також всі інші дрібниці, по типу завантаження бібліотек, інструментів, тощо) виконується за допомогою команди pio run
, в директорії в який лежить platformio.ini
файл. Ця команда робить те саме, що робить галочка "Build" в VS Code.
Прошивка/програмування мікроконтролера, те що в VS Code робилось за допомогою стрілочки "Upload", в CLI робиться за допомогою команди pio run --target upload
.
Для прикладу візьмемо годинник з однієї з попередніх статей, і зробимо все описане вище:
git clone https://github.com/so1der/GPS_Clock # клонуємо гіт репозиторій проєкта
cd GPS_Clock # відкриваємо директорію проєкта (в якій лежить platformio.ini)
pio run # компілюємо проєкт
pio run --targer upload # прошиваємо підключений мікроконтролер
Тобто ось настільки все просто. Хоча звісно бувають й більш комплексні проєкти, де може бути багато середовищ (env) під різні девборди/мікроконтролери/пристрої. В таких випадках можна піти одним з наступних шляхів:
- вказати необхідний
env
в файліplatformio.ini
- вказати необхідний
env
на етапі компіляції та прошивки
Давайте розглянемо на практичному прикладі - візьмемо Meshtastic. Початок такий самий - клонуємо репо та відкриваємо його:
git clone https://github.com/meshtastic/firmware
cd firmware
Переглянувши platformio.ini
, можемо побачити, що там вже заздалегідь вказано якийсь env
:
[platformio]
default_envs = tbeam
Уявімо що нам потрібно щось інше, нехай diy-v1
, який часто обирають для саморобних Meshtastic вузлів. Щоб дізнатись правильне ім'я середовища, можна пошукати його в файлі platformio.ini, але дуже часто в комплексних проєктів буває багато різних platformio.ini файлів, тому в даній ситуації можна також використати pio
. Для того щоб подивитись доступні середовища, можна виконати наступну команду:
pio project config
Вона покаже всі доступні середовища та їх налаштування. Але якщо середовищ дуже багато, знайти щось в такій стіні тексту буде дуже складно (хоча ніхто звісно не забороняє використати grep). На цей випадок є обхідний шлях - вказати заздалегідь неправильний env, щоб PlatformIO підказав нам лише список доступних середовищ:
pio run -e 123
З нього дізнаємось, що потрібне нам середовище має назву meshtastic-diy-v1
. Відповідно тепер ми можемо або замінити default_envs
в platformio.ini, та скомпілювати проєкт/прошити мікроконтролер:
[platformio]
default_envs = meshtastic-diy-v1
pio run
pio run --target upload
Або вказати цей env на етапі компіляції та прошивки:
pio run -e meshtastic-diy-v1
pio run -e meshtastic-diy-v1 --target upload
Створюємо новий проєкт
Тепер поговоримо про те, як за допомогою PlatformIO Core створити новий проєкт. Спочатку треба створити для нього директорію:
mkdir test_project
cd test_project
Тепер можна створити новий проєкт, використовуючи команду pio project init
, але для неї треба вказати правильний id необхідної плати. Уявімо що я хочу використати мікроконтролер STM32 на чипі STM32F030F4P6. Переглянути список плат можна за допомогою наступної команди (можна не вводити назву чипу повністю):
pio boards stm32f03
Вона виведе щось на кшталт цього:
================================================================================
ID MCU Frequency Flash RAM Name
------------- ------------- ----------- ------- ----- ----------------------
demo_f030f4 STM32F030F4P6 48MHz 16KB 4KB Demo F030F4
nucleo_f030r8 STM32F030R8T6 48MHz 64KB 8KB ST Nucleo F030R8
nucleo_f031k6 STM32F031K6T6 48MHz 32KB 4KB ST Nucleo F031K6
disco_f030r8 STM32F030R8T6 48MHz 64KB 8KB ST STM32F0308DISCOVERY
Якщо ж потрібно знайти плату ESP8266, то команда буде виглядати наступним чином:
pio boards esp8266
Також можна знайти необхідну плату на відповідній сторінці wiki PlatformIO. Тож тепер, коли ми знаємо id плати, достатньо просто ввести наступну команду:
pio project init --board demo_f030f4
Отримуємо наступний текст, який свідчить про те що все виконалось успішно, і дає нам декілька порад стосовно того що де і куди:
ctl@arch:~/test_project$ pio project init --board demo_f030f4
The following files/directories have been created in /home/ctl/test_project
include - Put project header files here
lib - Put project specific (private) libraries here
src - Put project source files here
platformio.ini - Project Configuration File
Resolving demo_f030f4 dependencies...
Already up-to-date.
Project has been successfully initialized!
Тож тепер проєкт створений, і залишилось лише написати код, відредагувати platformio.ini, тощо, тобто все як і було раніше в VS Code! Єдине що автоматично не створився файл main.cpp
, в директорії src
, тому його треба створити власноруч. За потреби також можна змінити фреймворк в файлі platformio.ini
Корисно знати
Директорія .platformio
PlatformIO Core створює директорію .platformio
в $HOME директорії користувача. В цю директорію йдуть різні інструменти, тулчейни, і тд, тому вона може важити доволі багато:
ctl@arch:~$ du -hs .platformio/
3.6G .platformio/
Якщо у вас такої директорії немає, виконайте команду pio system info
щоб дізнатись її місцезнаходження. З часом ця директорія буде тільки рости. Можна чистити її вручну, а можна виконати спеціальну команду для того щоб видалити кеш та непотрібні пакети:
pio system prune
Встановлення бібліотек
Щоб не клонувати/завантажувати бібліотеки вручну в директорію lib/
, їх можна додати в файл platformio.ini
. Наприклад так це виглядає в файлі вже раніше згаданого годинника:
lib_deps =
mikalhart/TinyGPSPlus@^1.0.3
arduino-libraries/LiquidCrystal@^1.0.7
jchristensen/Timezone@^1.2.5
stm32duino/STM32duino RTC@^1.7.0
При виконанні команди pio run
, PlatformIO Core автоматично завантажить ці бібліотеки для компіляції проєкта. Подивитись актуальну версію, а також правильний запис необхідної вам бібліотеки можна в Реєстрі PlatformIO. Вводимо там необхідну бібліотеку, знаходимо її, відкриваємо пункт "Installation", і бачимо яку строку необхідно додати в lib_deps
.
Документація PlatformIO Core
На сайті PlatformIO є дуже детальна документація стосовно PlatformIO Core. Там є і приклади, і інші команди які не було розглянуто в даній статті. Тож якщо у вас залишились питання, або ви хочете дослідити все це більш детально, раджу ознайомитись з документацією за посиланням.