Переползаем на PlatformIO

Доброго времени, уважаемый читатель! Зачем и для кого эта статья??? В “этих ваших ынтерьнетах” довольно много статей, посвященных установке PlatformIO (кратко – “pio”), зачем нужна еще одна? Да и процесс установки, в принципе, не представляет собой ничего сложного. Но когда я оказался перед выбором – продолжить развивать свои проекты на платформе Arduino или переходить на что-то другое, то обнаружил большое количество сообщений на профильных форумах в стиле “пробовал этот ваш PlatformIO – одни ошибки, глюки, тормозит и т.д и т.п.”. Потом и сам столкнулся с массой проблем после установки. К сожалению, далеко не во всех статьях, посвященных установке PlatformIO, отражены эти вопросы. Пока разберешься что и как, лично я потратил массу времени. Было, и не раз, желание “бросить всё” и вернуться на Arduino. Но не бросил, ибо возможности прельщали. Не скажу, что PlatformIO глючна и ужасна, она просто сложнее (хотя недостатков на мой взгляд достаточно). А поэтому и шансов что “что-то пойдет не так” гораздо больше. Но и сильно удобнее, поэтому есть ради чего стараться.

В данной статье я постараюсь осветить некоторые проблемы при переходе с Arduino на PlatformIO, с которыми мне пришлось столкнуться, поэтому эта статья не претендует на исчерпывающее руководство. Скажем так – делюсь опытом.


Зачем переходить на PlatformIO?

Зачем переходить на PlatformIO? Ведь у меня на Arduino и так все работает! Ну лично я столкнулся с выбором, когда пришли мои первые ESP32 с Ali, и я начал вникать в подробности, как же с ними работать. В итоге, я пришел к выводу, что на Arduino IDE, хоть и можно программировать ESP32, но с ограничениями, да и не подходит однопоточная Arduino к двухядерному и многопоточному ESP32. Framework ArduinoEspessif32 это всего лишь проект ESP-IDF с настройками “по умолчанию” – для того, чтобы загнать ESP-IDF в рамки Arduino. Естественно, что при этом частично теряются возможности ESP32 (например вместо двух независимых шин I2C в Arduino IDE можно пользоваться только одной) и возможность конфигурирования проекта. Кроме того, возможности Visual Studio Code конечно подкупают. Итак, давайте рассмотрим плюсы и минусы перехода на PlatformIO (в сравнении с Arduino IDE, разумеется).

PIO HOME

Преимущества

  • Возможность работы с самыми разными платформами и framework-ами, не ограниченными рамками Arduino. Но можно работать, как и прежде, используя Arduino платформу, что в принципе, многие и делают.
  • 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. При запуске VSCode или смене целевой платформы в файле конфигурации проекта pio перестраивает свои команды, и в этот момент легко нарваться на ошибку “такая команда не существует”. Нужно просто подождать пока IntelliSense перестроит индексы или PIO свой список задач.
  • Монитор COM-порта в PlatformIO в чем-то ущербнее ардуиновского. Например, нет возможности отправить строку с компьютера в COM-порт на устройство. Но лично я этим никогда не пользовался, так что мне без надобности.
  • Сложность настройки PlatformIO по сравнению с Arduino IDE. У PIO в некоторых случаях просто нет графического интерфейса для настроек – только командная строка и ini, только харкор.
  • Некоторые особенности ESP-IDF на PlatformIO вызывают по крайней мере недоумение. Например необходимость прописывать PEM-файлы (сертификаты SSL/TLS) аж в двух местах одновременно.
  • Не совсем корректная процедура установки PlatformIO. Во-первых, “из коробки” PIO как ни странно полноценно работать не будет! Необходимо доработать напильником! Во-вторых, при установке 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:

Команды PIO


Скорее всего, в ответ на команду Вы получите сообщение об ошибке. И это вторая моя претензия к разработчикам. Для того, чтобы PIO заработал корректно, необходимо добавить путь к нему в переменные среды – смотри следующий шаг. Если ошибки нет, и pio “ответил” “usage: pio [OPTIONS] COMMAND [ARGS]…”, то следующий шаг пропускаем.

7. Добавляем путь к pio в переменные среды. Находим каталог “C:\Users\ваш_профиль\.platformio\penv\Scripts” или другой, куда установился PlatformIO. Нужен путь именно к скриптам, а не к корневому каталогу PIO. Затем открываем в Windows панель управления, раздел “Дополнительные параметры системы”, на Win10 это выглядит примерно так:

Дополнительные параметры системы

Нажимаем кнопку “Переменные среды” (только при чем тут среда – понять не могу, сегодня же четверг уже). Если PIO установился в профиль пользователя, то имеет смысл указать путь к нему в параметры пользователя (верхний список, выделен красным). Если нет – то добавляем к путям в нижний список. Для этого выбираем параметр Path и нажимаем кнопку “Изменить”:

Path пользователя

Далее добавляем найденный путь в список доступных:

Указываем путь к папке с командами PlatformIO

Не забываем сохранить изменения. Повторно проверяем команду pio в терминале. Если ответ корректный, можно приступать к настройке.

8. Настраиваем PlatformIO. Не спешите создавать проект. Имеет смысл настроить pio, хотя можно оставить все как есть. Сделать это можно с помощью команды “pio settings“:

Параметры команды pio settings

Вначале стоит посмотреть текущие параметры. Набираем в консоли “pio settings get” и смотрим:

Настройки по умолчанию

Далее можно что-то изменить с помощью команды “pio settings set“:

Изменение параметров

В результате у меня получилось так, Вы можете изменить что-то по своему вкусу. Или не трогать ничего.

Новые значения параметров

9. Устанавливаем платформы, с которыми хотим работать. Для этого на вкладке PIO Home кликаем на кнопку “Platforms”, затем в списке “Embedded” поиском находим нужные и нажимаем “Install”. Ничего сложного. НО! Не спешим! Обязательно дожидаемся сообщения о завершении установки. Вначале “на скорости” я много “копий поломал”, а разработчики “услышали” в свой адрес много лестных слов (надеюсь нет).

Установка платформ

Я выбрал для себя пока две платформы: Espressif 32 и Espressif 8266. Платформа это не есть framework! Например платформа Espressif 32 включает в себя несколько фреймворков: Arduino, Espidf, Pumbaa и Simba. Framework-и устанавливать не требуется, они подгрузятся по мере необходимости. Как видите, возможностей программирования здесь гораздо больше, чем на Arduino.

10. Устанавливаем библиотеки, с которыми хотим работать. Для этого на вкладке PIO Home кликаем на кнопку “Libraries”, выбираем и устанавливаем. Но этот шаг можно пропустить, а подключить нужные библиотеки online прямо в проекте. Я именно так и делаю, поэтому описания установки библиотек здесь не будет.

На этом установку в принципе можно считать законченной, можно создавать первый проект. Или импортировать с Arduino.


Настройка проекта

Процесс создания нового проекта через интерфейс PIO Home не вызывает особых затруднений. Кликаем “+ New Project“, выбираем имя, плату и framework (расположение при необходимости) и ждем несколько секунд пока PIO трудится над созданием…

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

Дальше начинается самое интересное – настройка файла конфигурации проекта. Называется он “platformio.ini“. Именно по нем VSCode узнает, что это проект PlatformIO. У меня он может выглядеть так:

Пример файла конфигурации проекта

Весь файл разделен на секции. Секция [env] (без суффиксов) отвечает за глобальные настройки для всех плат. Секция [env:плата] отвечает за настройки для конкретной платы. И таки да, один и тот же проект можно скомпилировать для самых разных плат, просто указав дополнительные секции.

Я не буду подробно описывать все параметры, их очень много. Более подробную информацию Вы можете найти в документации. Поясню лишь те, что Вы идите на рисунке.

Первая опция build_flags указывает компилятору где искать исходники проекта. Дело в том, что все мои библиотеки находятся в каталоге, отличном от каталога проекта. А в каталоге проекта лежит очень важный файл – “project_config.h“, в нем собраны все настройки проекта. Который используется в том числе и самими библиотеками. Если не указать, где его искать, библиотеки не будут скомпилированы. Впрочем, Вы можете использовать другой подход, и Вам этот параметр не понадобится.

Далее monitor_filters – опции монитора COM-порта. У меня включен прямой вывод, необходимый для вывода логов в цвете. На Windows 7 включать бесполезно, все равно не заработает. Кроме того, в программе для ESP32 должна быть включена соответствующая опция. Есть достаточно много параметров монитора, подробнее смотрите в документации.

Далее lib_deps – зависимости от публичных библиотек. Если библиотека не установлена в PIO, то VSCode сам ее найдет и установит перед первым использованием. Удобно.

Затем lib_extra_dirs – здесь я указываю папки с локальными библиотеками. В данном конкретном случае это мои библиотеки, но можно туда поместить и другие. Не нужно указывать пути к каждой отдельной библиотеке, но если библиотеки сгруппированы в подпапки (как у меня), то придется указать пути ко всем расположениям.

board_build.partitions указывает на файл с разметкой flash-памяти ESP-хи. Это отдельный большой разговор, я не буду останавливаться на нем в рамках данной статьи. По умолчанию нафиг не нужен.

board_build.embed_txtfiles указывает на дополнительные файлы, которые следует подключить к проекту. В данном случае это PEM-файлы с сертификатами для TLS-соединений. Но этого мало! Для ESP-IDF придется дополнительно прописать эти же файлы в другом файле конфигурации CMakeLists.txt:

# This file was automatically generated for projects
# without default 'CMakeLists.txt' file.

FILE(GLOB_RECURSE app_sources ${CMAKE_SOURCE_DIR}/src/*.*)
idf_component_register(SRCS ${app_sources})

target_add_binary_data(${COMPONENT_TARGET} ${CMAKE_SOURCE_DIR}/certs/dst_root_ca_x3.pem TEXT)
target_add_binary_data(${COMPONENT_TARGET} ${CMAKE_SOURCE_DIR}/certs/api_telegram_org.pem TEXT)

Ну и наконец секция [env:esp32dev] определяет настройки сборки проекта для конкретной платы – тип платы, платформу, фреймфорк, скорость монитора и заливки bin-файла на плату. Как ни странно, скорость upload выше скорости монитора, так как скорость передачи в порт определяется самой платой. Допустимые варианты: 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 74880, 115200, 230400, 256000, 460800, 921600, 1843200, 3686400. Можете поэкспериментировать. Опытным путем установлено, что выше 921600 ставить смысла не имеет.

Более подробную информацию Вы можете найти в документации.


Настройка проекта ESP-IDF для плат на базе ESP32

Отдельная тема – настройка проекта на базе framework ESP-IDF для ESP32. Дело в том, что ESP-IDF имеет свой глобальный файл конфигурации – sdkconfig. Именно по его образу и подобию я и придумал создать свой файл project_config.h – во-первых, чтобы отделить мух от котлет; а во-вторых sdkconfig доступен только для ESP-IDF+ESP32. Точнее он есть и для Arduino, но вот там он настроен производителем и внутри Вы ничего поменять не сможете. Расположен он в корневом каталоге проекта. В принципе это простой текстовый файл, но вот править его вручную не рекомендуется! Ибо настройки все равно не подействуют, так как это всего-лишь заготовка для настоящего sdkconfig.h. Для редактирования настроек есть специальная команда: menuconfig. Вот только беда – во всех руководствах советуют вызывать ее что-то вроде idf.py menuconfig (могу ошибаться, так как пишу по памяти), а на деле это нифига не работает. Ну никак. Как я не выкручивался, ничего не помогает.

Оказалось всё гораздо проще. В терминале VSCode нужно набрать команду: pio run -t menuconfig и подождать. Вуаля:

Настройки ESP-IDF проекта

Упс… А вот и первая проблема – клавиши вверх-вниз (навигация по меню) на Windows 10 не работают. Ответ мне дали на форумe PlatformIO (кстати, очень советую – помогают быстро и по делу). В случае, если стрелки UP и DOWN не работают в конфигурационном меню, попробуйте использовать J клавишу, чтобы переместить курсор вниз и K для перемещения курсора вверх. Другой вариант заключается в использовании – и + клавиш на цифровой клавиатуре. Или третий вариант – запустить “внешнее” окно командной строки windows, и запускать menuconfig в нем (только не забудьте перейти в каталог проекта).

Что здесь можно (и нужно на мой взгляд) изменить?

  • (Top) → Bootloader config → Bootloader log verbosity – Ставим “Warning“. Лишний отладочный вывод из загрузчика нам вообще не к чему, к тому же это немного уменьшит его размер.
  • (Top) → Partition Table → Partition Table. Если Вы планируете использовать OTA (перепрошивку ESP по воздуху), то необходимо выбрать “Factory app, two OTA dsefinitions“, либо создать свою таблицу разделов и указать ее параметры. Если Вы планируете прошивать ESP только посредством кабеля и ПК, то нет смысла тратить память впустую – выберите “Single factory app, no OTA”.
  • (Top) → Component Config → Common ESP-related → UART console baud rate – этот параметр отвечает за скорость вывода отладочной информации в COM-порт. Он должен быть согласован с параметром monitor_speed из файла platformio.ini
  • (Top) → Component Config → FreeRTOS → Enable FreeRTOS static allocation API – можно включить для подключения возможности статического (во время компиляции) выделения памяти под задачи, очереди, семафоры и т.д.
  • (Top) → Component Config → Log output – здесь я тоже устанавливаю уровень отладки “Warning“, так как пользуюсь своим логгером. Вы можете поставить удобный уровень. Здесь же можно включить и выключить вывод логов в цвете.
  • (Top) → Component Config → LWIP → Local netif hostname – указываем сетевое имя устройства, которое будет отображаться на роутере.
  • (Top) → Component Config → LWIP → SNTP → Maximum number of NTP servers – я ставлю 5, и указываю 5 разных серверов. ESP сама выберет нужный.

Можно ещё добавить STACK_SIZE для некоторых системных задач, network_events, например (в принципе всё и так работает с настройками про умолчанию, но изредка контроллер перегружается из-за переполнения стека этой задачи). Конечно, параметров очень много. Можно “полазать по менюшкам” и выбрать нужные. Только осторожно, ибо легко нарушить работу. Запоминайте, что меняли, чтобы вернуть обратно в случае проблем.


Возможные проблемы

Проблемы, с которыми пришлось столкнуться при освоении VSCode и PlatformIO. Вероятно “спецам” они покажутся банальными и смешными, но иногда мне приходилось потратить довольно много времени на поиск решения. Сейчас и мне они кажутся несущественными. Поэтому постараюсь озвучить в этом списке всё, что вспомню – если Вы только собираетесь перейти на PIO, это может сэкономить Вам немного времени. Итак.

1. При попытке сборки проекта “PlatformIO:Build” или “PlatformIO:Upload” выдается ошибка “Error: Couldn’t find target config” и компиляция останавливается.
Решение: изменились параметры сборки проекта (что-то поменяли в platformio.ini или sdkconfig). Нужно предварительно очистить проект командой “PlatformIO:Clear” и повторить попытку. Да это долго, но другого выхода нет. Как вариант, можно закрыть VSCode и “грохнуть” папку .pio в каталоге проекта.

2. При попытке выполнить любую команду, например “PlatformIO:Build” выдается ошибка “command platformio-ide.build not found”.
Решение: обратите внимание на статусную строку VSCode – скорее всего сейчас там надпись типа “Rebuild IntelliSense index” или “Recreate tasks”. Причем это проявляется довольно регулярно (зависимость мной пока не определена). Ужасно бесит, но придется подождать.

3. Проект успешно компилируется и работает, но VSCode постоянно донимает Вас, что в Вашем коде 20 / 45 /128 проблем.
Решение: ну это просто IntelliSense не может найти Ваши файлы, чтобы проверить. Скорее всего, подчеркнуты как проблемные различные #include “xxxx”, причем даже вполне системные. Наводим мышкой на любую проблему, дожидаемся появления желтой лампочки и жмякаем ее. В появившемся меню выбираем “Изменить includePath“. Откроется окно настроек С/С++ для текущего проекта. Ищем параметр “inclidePath” или “путь включения”. Теперь два варианта: добавлять каждую папку с библиотекой отдельной строкой (причем и для src и для include) (так в принципе и поступает VSCode по умолчанию), либо указать пути к библиотекам рекурсивно. Например:

C:/PlatformIO/th-sensors/include                                // Это НЕ рекурсивная папка
C:/PlatformIO/th-sensors/src                                    // Это НЕ рекурсивная папка
C:/PlatformIO/libs/**                                           // Все подпапки внутри C:/PlatformIO/libs/
C:/Users/kotyara12/.platformio/packages/framework-espidf/**     // Все подпапки из framework-espidf
C:/PlatformIO/th-sensors/.pio/libdeps/esp32dev/LWMQTT/include   // А эти строчки PIO добавит сам, когда скачает библиотеки
C:/PlatformIO/th-sensors/.pio/libdeps/esp32dev/LWMQTT/src       // А эти строчки PIO добавит сам, когда скачает библиотеки
C:/PlatformIO/th-sensors/.pio/build/esp32dev/config             // Путь к сгенерированному sdkconfig.h

Вуаля! Проблемы самоликвидировались!

Кстати, если у Вас возникли еще какие-либо вопросы или проблемы, советую обращаться на форум. Форум правда на “англицком”, но в гугле пока еще не забанили и переводчик есть. Мне помогали довольно быстро и по делу.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *