View Categories

VS Code + PlatformIO

VS Code #

Самым мощным, современным, удобным и универсальным редактором кода для продвинутого пользователя является Visual Studio Code (VS Code). Это максимально навороченный "блокнот":

  • Из коробки поддерживает почти все существующие языки программирования и имеет подсветку синтаксиса для них
  • Автоформатирование, которое гибко настраивается почти для любого языка
  • IntelliSence - очень удобное автодополнение кода со встроенной документацией
  • Разворачивание макросов и constexpr функций во всплывающем окошке без компиляции программы
  • Подсветка явных ошибок в коде без компиляции проекта
  • Большое количество горячих клавиш и инструментов для редактирования текста
  • Удобный визуальный навигатор по коду и дерево структуры проекта
  • Удобный файловый менеджер проекта и поиск по файлам
  • Удобные вкладки открытых файлов, возможность разделить экран
  • Умеет "переходить по клику" к определению функций и других сущностей даже в системных библиотеках
  • Система расширений (плагинов), которые расширяют его возможности почти до бесконечности
  • Очень лёгкий и быстрый сам по себе как программа, запускается за полсекунды
  • Отлично выглядит на стандартной теме "тёмная современная"
  • Работает с Git для совместной разработки
  • Отладка (для некоторых платформ)
  • Поддерживает работу с разными консолями и терминалами
  • Имеет неприлично огромное и пугающее количество настроек
  • В нём крайне приятно писать код, это нечто невероятное после Arduino IDE

В VS Code можно писать код почти на любом языке, сразу запускать и отлаживать его, использовать современные инструменты и фреймворки. Из личного опыта: C++, Arduino, Python, Node JS, HTML/CSS/JS, Flutter, PHP. Это буквально одна программа для всего, что может понадобиться разработчику. Качается с официального сайта, ставится "в три клика": согласен, далее, далее, завершить.

file

VS Code

При установке нужно поставить вот эти галочки. Как минимум - нижнюю:

file

PlatformIO IDE #

PlatformIO (PIO) - сам по себе это набор консольных утилит, скриптов и сценариев для автоматической установки всего необходимого для работы с различными микроконтроллерами (SDK, компиляторы, загружаторы и т.д.). А также это огромная база различных платформ и фреймворков (помимо Arduino), поддержка более 1500 отладочных плат и МК и более 13000 библиотек! Со всеми "Ардуинами" оно тоже конечно замечательно работает. PlatformIO может использоваться разными способами, но раз уж мы заговорили о VS Code - будем использовать в паре с ним. Вот преимущества такой связки перед Arduino IDE:

  • Быстрая компиляция проекта: PlatformIO собирает проект немного иначе, за счёт чего получается огромный прирост в скорости компиляции. Если на AVR Arduino это заметно не так сильно, то ESP32 например в Arduino IDE может компилироваться секунд 20 на мощном компьютере (на слабом может делать это несколько минут!), а в PlatformIO на этот же проект уходит 3-4 секунды! Жизнь слишком коротка, чтобы компилировать под ESP8266/ESP32 в Arduino IDE...
  • База платформ и фреймворков: больше не нужно искать какие-то "ссылки для менеджера плат", всё есть из коробки для всех плат
  • Личная папка библиотек у каждого проекта: в Arduino IDE есть одна общая папка с библиотеками, из-за чего иногда случаются конфликты. Здесь библиотеки устанавливаются в папку проекта, можно указать конкретную версию - они не будут пересекаться с другими проектами
  • Индивидуальная настройка проекта: проект можно полностью настроить под плату или несколько плат и фреймворков, указать конкретные версии платформ, указать список библиотек и их версий. Эти настройки хранятся в папке с проектом, а не являются общими, как в Arduino IDE. Можно просто открыть папку проекта на другом компьютере и среда автоматически всё скачает, настроит и подготовит: достаточно будет нажать одну кнопку для загрузки прошивки. Ещё раз - все библиотеки и пакеты для поддержки плат скачаются автоматически, не нужно вообще ничего дополнительно делать!
  • Библиотеки можно ставить как из базы библиотек, так и напрямую с GitHub разработчика
  • Настройки платы ничем не ограничиваются, можно менять любые фьюзы и низкоуровневые конфиги, включая флаги и параметры компилятора
  • Exception decoder прямо в консоли монитора порта для ESP8266 и ESP32

Недостатки:

  • Все настройки проекта задаются в текстовом конфиге, параметры и формат записи настроек нужно искать в документации. Она не очень дружелюбная, поэтому иногда приходится просто гуглить
  • Монитор порта очень бедный, корявый и иногда работает некорректно. Часто приходится пользоваться внешним, например из Arduino IDE
  • Нет встроенного плоттера для графиков, но есть плагин от сообщества
  • Очень мелкие кнопки загрузки/компиляции, но проблема решаемая
  • Другие требования к структуре программы - нужно писать по-взрослому с соблюдением норм и правил языка, а не как "скетчи" в Arduino IDE
  • Проект, который работал в Arduino IDE, может не собраться в PlatformIO - придётся переписывать и нормально разбивать его на файлы. Но это сложно считать минусом - нужно сразу учиться писать по-человечески
  • Случаются баги и тормоза у самой PlatformIO, благо на моём опыте все они лечатся перезапуском VS Code. Например, выбран для загрузки порт COM3, а IDE упрямо пытается загрузить через COM12 и удивляется, что устройство недоступно

Установка #

Достаточно открыть вкладку расширений, найти в поиске PlatformIO и нажать Install:

В процессе установки могут появляться всплывающие окна с предложением установить дополнительные расширения для работы - соглашаемся. В конце установки может попросить перезагрузиться - соглашаемся. Далее открываем вкладку PlatformIO и установка продолжится:

Готово! Можно установить поддержку русского языка - так же в виде расширения, и перезагружаемся:

Добро пожаловать на главную страницу PlatformIO IDE! Отсюда можно создать проект, посмотреть список платформ и библиотек. Я вообще ей не пользуюсь, поэтому снимаю галочку "показывать при запуске" и прощаюсь:

Git #

Для использования библиотек с GitHub нужно установить Git, установка проходит без каких-то особенностей.

Настройки #

Лично мне комфортнее работать с такими параметрами шрифта: размер 15, масштаб 1. Масштаб в данном случае увеличивает всю программу, делает кнопочки чуть больше:

Параметры автоформатирования кода предпочитаю такие: ищем в настройках C_Cpp.clang_format_fallbackStyle, вставляем туда { BasedOnStyle: Google, IndentWidth: 4, ColumnLimit: 0, AllowShortIfStatementsOnASingleLine: AllIfsAndElse, AllowShortCaseLabelsOnASingleLine: true }

Далее можно включить автосохранение файлов на afterDelay:

Последний опциональный штрих - установить расширение PlatformIO Big Buttons, оно позволит не целиться по микрокнопкам при загрузке проекта. Кнопки конечно великоваты, но тут либо совсем мелкие, либо вот такие =)

Ну вроде бы и всё!

PIO имеет отдельный блок настроек для VS Code, подробнее - в документации

Работа с PIO #

Создание проекта #

Я не использую встроенные менюшки PIO с менеджером проектов, библиотеками и платформами. Они есть, они работают, но у меня всё настроено и оно вообще не надо. Так то можно нажать New Project, выбрать плату и вам создадут папку проекта с 15 папками внутри.

Для меня проект - это папка в рабочей папке с проектами. Есть "шаблонная" папка проекта, я её дублирую, переношу в окно VS Code - и пошла жара. Если надо добавить новую плату - открываю список плат, там сразу даётся пример что нужно писать в конфиге. Так что создаём пустую папку и переносим её в окно VS Code:

Далее в этой папке нужно создать файл platformio.ini, папку src и в ней файл main.cpp. Этого достаточно:

platformio.ini #

В этом файле прописываются все настройки проекта: платформа, плата, фреймворк, настройки конкретной платы, список библиотек и так далее. Файл позволяет создать в одном проекте несколько "рабочих сред" - окружений (environment, env). Каждое окружение - это конкретная плата со своими настройками, таким образом можно одновременно разрабатывать проект под несколько разных плат и быстро переключаться между ними.

Настройки окружения прописываются после тега [env:имя_окружения], а просто [env] задаёт общие настройки для всех окружений. Например так - общая скорость монитора для всех, фреймворк - Ардуино, список библиотек. Далее идут конкретные платы со своими настройками:

[env]
framework = arduino
monitor_speed = 115200
lib_deps = ; список библиотек

[env:nano328new]
platform = atmelavr
board = nanoatmega328new

[env:nano328]
platform = atmelavr
board = nanoatmega328

Теперь кликаем по вкладке PlatformIO слева, чтобы оно запустилось, и получаем переключатель плат в нижнем меню:

Прикладываю конфиг для списка плат, которые использую (Arduino NANO, Wemos Mini, ESP32dev, ESP32 cam, ESP32-C3, ESP32-S2):

platformio.ini
[env]
framework = arduino
monitor_speed = 115200
lib_deps =
    ; lib
    ; lib
    ; lib

[env:nano328new]
platform = atmelavr
board = nanoatmega328new

[env:nano328]
platform = atmelavr
board = nanoatmega328

[env:d1_mini]
platform = espressif8266
board = d1_mini
upload_speed = 921600
monitor_filters = esp8266_exception_decoder, default
build_type = debug
board_build.filesystem = littlefs

[env:esp32dev]
platform = espressif32
board = esp32dev
monitor_filters = esp32_exception_decoder
board_build.filesystem = littlefs
board_build.f_cpu = 240000000L

[env:esp32cam]
platform = espressif32
board = esp32cam
upload_speed = 921600
board_build.mcu = esp32
board_build.f_cpu = 240000000L

[env:esp32-c3]
platform = espressif32
board = esp32dev
upload_speed = 921600
board_build.mcu = esp32c3
board_build.f_cpu = 80000000L

[env:esp32-s2]
platform = espressif32
board = lolin_s2_mini
upload_speed = 921600

В файле программы main.cpp пишем минимальный код:

#include <Arduino.h>

void setup() {
}

void loop() {
}

Всё! Теперь можно выбрать нужную плату и скомпилировать или загрузить проект. PIO сама скачает и установит все нужные утилиты и поддержку платы в систему:

Прикладываю свой шаблон проекта, его можно скачать, распаковать и перетащить в окно VS Code.

Шаблон проекта

Проекты #

При запуске VS Code выдаётся список последних открытых папок (проектов). Чтобы посмотреть все - нажимаем "Подробнее". Папки можно удалять из списка крестиком справа от названия:

Для того, чтобы открыть чужой проект из Интернета, достаточно перетащить в окно VS Code папку, содержащую platformio.ini - всё остальное IDE сделает сама!

Установка библиотек #

Библиотеки можно искать и устанавливать через встроенный менеджер библиотек, что с одной стороны удобно, а с другой - не очень: приходится вручную выбирать проект из списка, также библиотека будет добавлена во все окружения отдельно. "Установка" библиотеки заключается в том, что PIO модифицирует файл platformio.ini и добавляет туда строчку:

Я ставлю библиотеки "вручную" - сам указываю, что мне нужно и где. PIO поддерживает несколько вариантов установки библиотек, точнее - зависимостей (library dependency, lib dep):

lib_deps =
    fastled/FastLED             ; библиотека из реестра PIO
    GyverLibs/EncButton@^3.6.2  ; с версией
    https://github.com/GyverLibs/GyverSegment.git                       ; из репозитория
    https://github.com/GyverLibs/FastBot.git#2.22                       ; с версией
    https://github.com/GyverLibs/BitPack/archive/refs/heads/main.zip    ; из архива

99% библиотек хранятся на GitHub и поиск в гугле любой библиотеки обычно первым делом отправляет на её GitHub. Поэтому почти со 100% вероятностью они имеются в реестре библиотек PIO и можно добавлять библиотеку в список lib_deps по её расположению на гите:

Библиотеки автоматически загружаются в папку .pio/libdeps/<env> - отдельно для каждого окружения:

Таким образом всегда можно открыть библиотеку, её папку с примерами, описание или документацию - всё под рукой:

Если библиотека требует установки других библиотек для своей работы - они установятся автоматически. Например моя библиотека GyverLibs/Settings тянет за собой кучу зависимостей, они все сами скачиваются:

Папку .pio можно безопасно удалять - IDE скачает заново всё, что ей нужно. Также в этой папке находятся скомпилированные файлы проекта

Если нужно изменить что-то в файлах библиотеки, то не рекомендуется делать это в папке .pio: если IDE обновит библиотеку - все изменения пропадут! Скопируйте нужную библиотеку в папку lib и уберите из зависимостей.

Локальные библиотеки #

Непосредственно папки библиотек можно класть в папку lib - компилятор тоже там ищет файлы. Здесь же можно разрабатывать свои библиотеки:

Обновление библиотек #

Чтобы обновить автоматически установленные библиотеки, используется команда pio pkg update в консоли PIO, либо кнопка в меню:

Полезные сочетания клавиш #

  • Ctrl + Shift + N - новое окно VS Code
  • Alt + Shift + F - автоформатирование кода
  • Ctrl + / - закомментировать/раскомментировать строку
  • Ctrl + F - поиск по текущему файлу
  • Ctrl + H - поиск и замена по текущему файлу
  • Ctrl + Shift + F - поиск по файлам проекта
  • Ctrl + Shift + H - поиск и замена по файлам проекта
  • Ctrl + Alt + B - компиляция
  • Ctrl + Alt + U - загрузка прошивки
  • Ctrl + Лев. кн. мыши на имени в коде - перейти к определению

Вот отличная статья про возможности редактирования в VS Code, горячие клавиши и так далее.

5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest

2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Прокрутить вверх