Добрый день, уважаемый читатель! Прежде чем начать программирование микроконтроллеров, необходимо установить и настроить соответствующие инструменты. Начинал я, как наверное и большинство, с Arduino IDE, но со временем стало понятно, что это “слишком короткие штанишки”. В настоящее время использую связку VSCode + PlatformIO на Windows 10. В их установке нет нечего особо сложного, но есть некоторые тонкие моменты, которые не упоминаются в “официальных” инструкциях. Вот их сейчас и обсудим.
Достоинства и недостатки
Кратенько пробегусь по достоинствам и недостаткам VSCode + PlatformIO, на мой взгляд (я не претендую на абсолютную истинность моих выводов, можете обсудить ваш опыт в комментариях). Итак.
Преимущества
- Возможность работы с самыми разными платформами и framework-ами, не ограниченными рамками Arduino. Но можно работать, как и прежде, используя Arduino платформу, что в принципе, многие и делают. Просто многие меняют не очень удобную ArduinoIDE на более удобный продукт.
- Visual Studio Code – гораздо более продвинутая бесплатная среда программирования. Гораздо более удобный интерфейс. Есть возможность русификации интерфейса Visual Studio Code с помощью плагинов. Кроме собственно Arduino и C++, VSCode позволяет работать со множеством других языков программирования – Python, PHP, Java и т.д. Не нужно ставить кучу разных IDE, достаточно поставить соответствующий плагин.
- ESP-IDF MenuConfig – при работе с ESP32 + ESP-IDF Вы получите возможность конфигурировать проект, как Вам необходимо. Из-под Arduino IDE у Вас нет такой возможности.
- Более удобная работа с большими проектами. Когда проект становится сложнее, приходится разбивать код на более мелкие файлы. На Adruino IDE после 5-7 файлов работа с ними превращается в муку. VSCode предоставляет более удобный функционал. Это не заслуга PIO, это заслуга VSCode.
- IntelliSence – подсветка синтаксиса и подсказки на лету – “вообще пестня”. Детектирование явных ошибок еще до компиляции – на Adruino IDE ошибки детектируются только во время сборки проекта. Это так же можно отнести к достоинствам VSCode.
- Гораздо более быстрая компиляция проекта за счет того, что не измененные библиотеки компилируются один раз. То есть в первый раз компиляция происходит довольно долго. Компилятор пересоберет все найденные библиотеки и файлы проекта и сохранит их в подкаталоге “.pio” проекта. Затем будут перекомпилироваться только измененные файлы, что очень существенно экономит время.
- Нормальная работа с локальными библиотеками. Наконец-то! На Arduino IDE я так и не смог придумать, как разделить библиотеки ESP32 от библиотек ESP8266 – при компиляции Arduino тащит их все, что разумеется приводит к ошибкам. Приходилось постоянно “перекидывать” файлы библиотек по папкам проектов, с которыми в данный момент работаю, что не удобно. В PIO компилируются только конкретно подключенные библиотеки (это не относится к framework-у – там в первый раз компилируется всё подряд). Подключать же библиотеки к проекту можно самыми разными способами – от указания на локальный каталог до автоматического скачивания из публичного репозитория или GitHub.
- Поддержка GitHub – встроенная поддержка GitHub позволяет легко работать с проектом с нескольких разных компьютеров, используя GitHub в качестве “облака”. Конечно, GitHub это далеко не только облако, а система управления версиями, но пользоваться им как облаком тоже весьма удобно. Лично для меня это жирный плюс. Ну и разумеется, теперь возможна совместная работа над проектом или проектами.
- Синхронизация параметров – ещё одна удобная опция для тех, кто работает за несколькими компьютерами. И бесполезная для тех, кто работает только на одном ?
- Привязка к конкретному контроллеру и платформе для проекта. На Arduino IDE при переходе от ESP8266 к Arduino UNO или ESP32 приходилось заново настраивать параметры платы – выбирать порты, скорость и т.д. На PIO все эти параметры хранятся в файле конфигурации проекта, поэтому нужно настроить нужные параметры только один раз. А параметров проекта стало гораздо больше.
- Монитор COM-порта более удобен, чем в Arduino IDE (хотя и не без недостатков). Например: цветной вывод (например: ошибки выделены красным цветом, предупреждения – желтым, обычные сообщения – синим или зеленым; это позволяет визуально выделять ошибки в сплошном потоке отладочного вывода от микроконтроллера), запись сообщений в файле (также очень полезная функция – позволяет отлавливать причину внезапной перезагрузки устройства), встроенный декодер исключений для ESP.
- Навигатор по файлам. Теперь навигация по папкам и файлам проекта и библиотек не доставляет никаких особых проблем. Для удобства в рабочую область я иногда добавляю framework, чтобы быстро найти нужную мне стандартную функцию.
- Навигатор по коду. Не знаю, как правильно это называется. В правой части окна редактора имеется уменьшенная копия Вашего файла целиком, на котором выделена та часть файла, которая в данный момент отображена в окне редактора кода. Используя этот элемент можно мгновенно перемещаться в нужную часть файла без излишнего насилия над колёсиком мыши.
Недостатки, куда уж без них
- Более высокий порог вхождения. Среда Visual Studio Code – это профессиональный инструмент. Первое время теряешься от обилия всех этих менюшечек, панелей и команд. Список команд чего стоит. Поэтому поначалу нарываешься на просто оооогромное количество проблем и глюков, которые впоследствии оказываются следствием незнания особенностей среды. На мой взгляд, достаточно большое количество негативных отзывов от PIO на форумах происходит именно по этой причине. Сам я неоднократно приходил к мысли, что “вот все брошу и вернуть на Arduino”, но природное упрямство не давало.
- Более сложный менеджер библиотек. Встроенный менеджер библиотек не так нативен, как в Arduino IDE. Но способов подключить публичную библиотеку гораздо больше.
- Некоторая тормознутость PlatformIO. Даже на достаточно быстром SSD диске и процессоре. Phyton в качестве “ядра” – на мой взгляд слишком медленное решение. При запуске VSCode или смене целевой платформы в файле конфигурации проекта pio перестраивает свои команды, и в этот момент легко нарваться на ошибку “такая команда не существует”. Нужно ждать и еще раз ждать пока IntelliSense перестроит индексы и (или) PIO свой список задач.
- Монитор COM-порта в PlatformIO в чем-то ущербнее ардуиновского. Например, нет возможности отправить строку с компьютера в COM-порт на устройство. Но лично я этим никогда не пользовался, так что мне без надобности.
- Сложность настройки PlatformIO по сравнению с Arduino IDE. У PIO в некоторых случаях просто нет графического интерфейса для настроек – только командная строка и ini, только хардкор.
- Некоторые особенности ESP-IDF на PlatformIO вызывают по крайней мере недоумение. Например необходимость прописывать PEM-файлы (сертификаты SSL/TLS) аж в двух местах одновременно.
- Не совсем корректная процедура установки PlatformIO. Во-первых, “из коробки” PIO на Windows как ни странно полноценно работать не будет! Необходимо доработать напильником! Во-вторых, при установке PlatformIO даже не спрашивает – а куда, собственно будем устанавливать? На мой взгляд, это недопустимо (особенно если системный диск – это маленький старенький SSD, на котором мало свободного места), но я смирился.
- Маленькая и неудобная панель PlatformIO. Кнопочки мааахонькие. Легко промахнуться и вместо компиляции ткнуть в очистку проекта. Не советую работать с похмелья ?.
- Только для ESP32 под ESP-IDF – нет библиотек для сенсоров. Если Вы твердо решили отказаться от Arduino и программировать ESP32 только под родным ESP-IDF, то Вы наверняка столкнетесь с практически полным отсутствуем библиотек для сенсоров и иных внешних устройств, LCD например. Нет, есть конечно некоторые библиотеки, но все-таки подавляющее большинство заточены под framework ArduinoEspressif32. Увы. Пришлось написать свои (о чем будут еще статьи, надеюсь).
Испугались? Не так всё плохо. Ну что ж, переходим к собственно установке…
Установка
1. Первым делом необходимо установить Visual Studio Code, если он ещё не установлен. Это бесплатный инструмент с множеством плагинов, что дает возможность работы с многими и многими языками. Скачиваем инсталлятор отсюда: code.visualstudio.com. Есть два варианта: пользовательский и системный. Я предпочитаю system installer, но он требует администраторских прав при установке. Если у Вас нет таких полномочий, то подойдет User installer, который установит VSCode в ваш профиль. Устанавливаем…
2. Устанавливаем GitHub, PlatformIO потребует его при своей установке, так как он может быть использован при подключении библиотек. Даже если Вы не собираетесь его использовать. Скачиваем отсюда: gitforwindows.org. Инструкция здесь (на английском): github.com/git-guides/install-git.
3. Устанавливаем плагин русификации интерфейса VSCode (только VSCode). Не обязательно, по вкусу. Нажимаем на панели слева “квадратики”, в строке поиска вбиваем “Russian” и на элементе “Russian Language Pack for Visual Studio Code” нажимаем кнопочку “Install”, далее следуем инструкциям. Это несложно. Перезапускаем VSCode. В большинстве случаев плагин цепляется автоматически, но на офисном ПК потребовалось выполнить дополнительную команду (VSCode подскажет что сделать). У меня плагины уже установлены, так что картинка немного не соответствует тому, что вы увидите.
4. Устанавливаем плагин C++ IntelliSense. В принципе этот шаг можно пропустить, PIO сам установит его в процессе, но я предпочитаю сделать это явно. Похожим образом находим и устанавливаем плагин. Следует иметь в виду, что установка плагинов в интерфейсе VSCode происходит вроде-бы мгновенно, а не деле вся работа производится в фоне. Не стоит сразу приступать к следующему шагу, следует дождаться соответствующего уведомления. Ну или просто немного подождать.
5. Теперь можно приступить к установке PlatformIO. Аналогично предыдущим шагам находим плагин “PlatformIO IDE for VSCode” и запускаем установку. Сам процесс установки занимает довольно длительное время, следует подождать. Что не понравилось: инсталлятор не спрашивает, куда следует установить PlatformIO. По умолчанию PIO установится в Ваш профиль в папку “.platformio”, если профиль записан латиницей; либо в папку “C:\.platformio”, если Ваш профиль скажем “админ”. Лично мне это категорически не понравилось. Во-первых на системном диске у меня очень мало места – SSD 64 Gb, весь софт я стараюсь ставить на другой диск. Во-вторых – я терпеть не могу лазить по разным профилям. Это моя большая претензия к разработчикам, но им “по барабану”, разумеется. Не закрываем вкладку Pio Home, когда она откроется – она нам еще понадобится!
6. Пробуем выполнить первую команду. Да, именно так, не спешите создавать проект. Так мы проверим, корректно установился PIO или нет. Именно на этом этапе я потерял два дня, информации об этом очень мало. Для этого открываем терминал и набираем команду pio:
7. Добавляем путь к pio в переменные среды. Находим каталог “C:\Users\ваш_профиль\.platformio\penv\Scripts” (или другой, куда установился PlatformIO). Нужен путь именно к скриптам, а не к корневому каталогу PIO. Затем открываем в Windows панель управления, раздел “Дополнительные параметры системы”, на Win10 это выглядит примерно так:
Нажимаем кнопку “Переменные среды” (только при чем тут среда – понять не могу, сегодня же четверг уже). Если PIO установился в профиль пользователя, то имеет смысл указать путь к нему в параметры пользователя (верхний список, выделен красным). Если нет – то добавляем к путям в нижний список. Для этого выбираем параметр Path и нажимаем кнопку “Изменить”:
Далее добавляем найденный путь в список доступных:
Не забываем сохранить изменения. Повторно проверяем команду pio в терминале. Если ответ корректный (“usage: pio [OPTIONS] COMMAND [ARGS]…”), можно приступать к настройке. Если нет – проверяйте ещё раз.
8. Устанавливаем платформы, с которыми хотим работать. Для этого на вкладке PIO Home кликаем на кнопку “Platforms”, затем в списке “Embedded” поиском находим нужные и нажимаем “Install”. Ничего сложного. Не спешим! Обязательно дожидаемся сообщения о завершении установки. Вначале “на скорости” я много “копий поломал”, а разработчики “услышали” в свой адрес много лестных слов (надеюсь нет).
Я выбрал для себя пока две платформы: Espressif 32 и Espressif 8266. Платформа это не есть framework! Например платформа Espressif 32 включает в себя несколько фреймворков: Arduino, Espidf, Pumbaa и Simba. Framework-и устанавливать не требуется, они подгрузятся по мере необходимости при первой компиляции или в фоне. Как видите, возможностей программирования здесь гораздо больше, чем на Arduino.
9. Устанавливаем библиотеки, с которыми хотим работать. Для этого на вкладке PIO Home кликаем на кнопку “Libraries”, выбираем и устанавливаем. Опять и снова не спешим, процесс не быстрый и производится “в фоне”. Но этот шаг можно пропустить, а подключить нужные библиотеки online прямо в проекте. Я именно так и делаю, поэтому описания установки библиотек здесь не будет.
Настройка
Не спешите создавать проект. Имеет смысл настроить pio, хотя можно оставить все как есть. Сделать это можно с помощью команды “pio settings“:
Вначале стоит посмотреть текущие параметры. Набираем в консоли “pio settings get” и смотрим:
Далее можно что-то изменить с помощью команды “pio settings set“:
В результате у меня получилось так:
На этом установку в принципе можно считать законченной, можно создавать первый проект. Или импортировать с Arduino. Это мы обсудим в следующей статье.
💠 Полный архив статей вы найдете здесь
Пожалуйста, оцените статью:
Есть довольно обширный набор библиотек для работыс разными устройствами для ESP-IDF – https://github.com/UncleRus/esp-idf-lib. Единственное не знаю насколько оно совместимо именно с PlatformIO. Если нет, то можно использовать этот набор как отправную точку для написания своих драйверов
Есть. Я про него знаю, он у меня давно уже в избранных. Несколько драйверов сенсоров из моих библиотек частично взяты оттуда, с изменениями. Единственное, я люблю классы и ООП, а у UncleRus несколько другая идеология. Но это больше дело вкуса и ни в коем случае не отменяет их ценности.
Прошу помощи , при установке Platformio такая ошибка :
Error: WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by ‘SSLError(SSLCertVerificationError(1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1000)’))’: /simple/platformio/ WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by ‘SSLError(SSLCertVerificationError(1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1000)’))’: /simple/platformio/ WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection br…