За что я не люблю PlatformIO?


У меня на сайте уже давно есть статья о платформио, а также о менеджере библиотек. Если кто не заметил – автором этих статей являюсь не я, автор там указан отдельно. Лично мне платформио категорически не нравится, и здесь я хочу объяснить, почему. Это моё личное мнение, основанное на моём опыте работы и моих привычках. Моё мнение основано на том, что я работаю в основном с Arduino Nano, на её примере снимаю уроки и делаю проекты. Работа с другими платформами на данный момент для меня просто не имеет смысла.

Я хотел снять видео на эту тему, но понимаю, что все возможности платформио я изучать не хочу и видео как минимум получится необъективным. А статью можно будет подправить, если в комментариях найдутся контраргументы к моим аргументам.

Установить платформио под VS Code очень просто: качаем и устанавливаем саму VS Code с официального сайта. Запускаем, нажимаем слева ~посередине вкладку Extensions (иконка в виде квадратиков), в строке поиска вбиваем и жмём Install по следующим запросам:

  • platformio (ставим PlatformIO IDE)
  • russian (ставим Russian Language Pack for Visual Studio Code) – если нужен русский язык
  • C++ Intellisense – инструмент для более удобной работы с кодом

Создаём проект. Чтобы загрузить прошивку, нужно открыть Platformio.ini и ручками дописать туда (для каждого проекта)

upload_speed = 57600
upload_port = COM23

Где upload_speed это скорость загрузки прошивки (изучайте документацию на ваш МК и загрузчик), а upload_port это номер порта, к которому подключена плата (сами ищите где об этом узнать).

Для поддержки ардуиновских библиотек пишем туда же

lib_extra_dirs = C:\Program Files (x86)\Arduino\libraries

Всё! Можно работать. Подробнее читайте в статьях, ссылки выше.

Плюсы


PlatformIO является “взрослой” средой разработки под разные платформы и имеет следующие преимущества перед “детской” Arduino IDE:

  • Дичайше удобная работа с кодом: автодополнение слов и подстановка методов класса (напомню, что автоматическая табуляция и подсветка синтаксиса имеется в Arduino IDE)
  • “Живая” обработка ошибок при написании: пропущенные скобки-запятые, неправильные имена и т.д.
  • Удобный навигатор по коду, с которым не заблудишься даже в километре строк. Отдельный блок структуры кода со “ссылками” на функции, объекты и дефайны
  • Файловый менеджер проекта, в котором есть навигация по файлам и библиотекам проекта
  • Очень быстрая компиляция кода (за исключением первой, когда происходит полная сборка проекта)

Преимущества, которыми лично я не пользуюсь

  • Куча плагинов с сомнительным функционалом
  • Поддержка работы напрямую с git (даже библиотеки можно тянуть напрямую)
  • Полноценный дебаг (для микроконтроллеров, которые его поддерживают. Я с такими не работаю)
  • Юнит-тестирование (читать на хабре и официальную доку)

Минусы


  • Все настройки платы осуществляются текстовыми конфигами, что приводит к трате времени на изучение документации и лишние проверки “а туда ли сегодня подключена моя плата?”. Да, это расширяет возможности по настройке. Но это неудобно и тратит кучу времени.
    • В детской Ардуино ИДЕ всё это делается двумя кликами мышкой через меню.
  • Отсутствие штатного монитора порта. Условно он есть, на работает через пень-колоду, его номер и скорость нужно прописывать вручную (можно указать в платформио.ини). Порт работает только на чтение (в порт можно что-то отправить через отдельную консоль, +100500 лишних действий для однократной отправки) не всегда корректно закрывается и приходится вручную перезагружать МК. Разработчики обещают добавить нормальный порт с 2018 года, с тех же пор рекомендуют использовать внешний монитор.
    • Встроенный в Ардуино ИДЕ порт критически удобен, ничем не перегружен, сам закрывается при перепрошивке.
  • Отсутствие плоттера графиков, даже в виде плагинов. Если вы не знаете, зачем нужен плоттер графиков – видимо с реальными железками и обработкой сигнала никогда не работали.
    • Ардуиновский божественен, лучше любых “внешних”.
  • Отдельная персональная возня с конфигурацией для загрузки через программатор. Просто ад.
    • В ИДЕ всё делается двумя кликами
  • Мелкие кнопки для загрузки/билда и отсутствие хоткеев на это дело
  • Некоторые настройки и действия выполняются через “консоль”,  бородатые линуксоиды оценят, а привыкшие к мышке и менюшкам не будут в восторге.
  • Высокие требования к коду: Arduino IDE позволяет писать упрощённо, вообще не соблюдая “сишную” структуру проекта: компилятор настроен на всеядность и прощает кучу ошибок. Буквально открываешь и просто начинаешь писать код, в этом состоит основная фишка Arduino как платформы. Во взрослой среде разработки (VS Code) нужно соблюдать некоторые правила, о которых не рассказывают в уроках Ардуино. Для не программиста переезд на взрослую среду приведёт к куче проблем в стиле “почему не работает?! В Ардуино ИДЕ ведь работало!”. Подробнее можно почитать у нас на форуме.
    • Сюда также можно добавить сложность переноса крупных Ардуино-проектов на VS Code: придётся переписать всю структуру проекта (отдельный кайф, если в проекте была куча вкладок) и дописать ещё кучу кода, чтобы он хотя бы компилировался.
  • С учётом взрослости кода, его приходится писать больше, чтобы он работал: делать заголовочники с описанием функций, или просто предописания функций, иначе проект может и не собраться! Да, это минус, потому что Ардуино изначально задумана как инструмент для быстрого проектирования. В VS Code придётся сидеть и кодить как индус. Кодить там очень приятно, но это не повод =)
  • Плохая поддержка Arduino-библиотек: во многих старых библиотеках встречается проверка версии Arduino IDE через константу ARDUINO. В платформио она не обозначена, что приводит к подключению файла WProgram.h и ошибке компиляции. Библиотеки приходится править вручную.

Резюмируя


Я всеми руками за автодополнение и подстановку методов, это БОЖЕСТВЕННО, как и навигация по коду и прочие плюшки, которые касаются непосредственно программирования, то есть набора кода. Но по работе с платой лично для меня платформио является невыносимо неудобной программой: все эти конфиги, из за которых постоянный перенос проекта на разные платы становится работой индуса, отсутствие нормального монитора/плоттера (лично для меня – основной инструмент). Ни в коем случае не унижаю данную среду разработки, у неё огромное количество пользователей и им явно виднее. Но и не берусь рекомендовать данный софт тем, кто привык к Arduino IDE. Вы будете сначала очень приятно удивлены, а потом очень неприятно огорчены возможностями “взрослого” софта по сравнению с “детским”, где на каждый пук есть своя менюшка и всё готовенькое.

Также в VS Code придётся соблюдать некоторые правила языка, которые в Arduino IDE за вас соблюдает компилятор. Кода для выполнения тех же задач придётся писать больше, и для работы с VS Code всё таки рекомендуется изучить любой учебник по C++. Я в первую очередь не программист, и делюсь своим опытом для не программистов, не забывайте об этом.

Ну, как-то так.