директива include для внешних библиотек

Я добавил Adafruit_GFX_Library в свой Windows. Я использовал Arduino IDE, «Инструменты» > «Управление библиотеками» > «Установить».

В настройках местоположение Sketchbook задано как d:\Alex\Hobbies\Electronic\Learning Arduino\Source, поэтому были созданы папки libraries/ и libraries/Adafruit_GFX_Library с файлом Adafruit_GFX.h и всем остальным.

В скетче я могу использовать #include <Adafruit_GFX.h>, и это работает для Arduino IDE.

Проблема связана с Visual Studio Code и расширениями Arduino.

Я добавил "${workspaceFolder}/Source/libraries/Adafruit_GFX_Library" в список «includePath» файла c_cpp_properties.json.
Это решило проблему с VS Code Intellisense, из-за которой иначе не удавалось найти библиотеку. Хорошо.

Теперь у меня та же проблема («Нет такого файла или каталога»), когда я пытаюсь загрузить (= собрать + записать на плату Arduino), появляется сообщение:

fatal error: Adafruit_GFX.h: No such file or directory

Я попробовал использовать относительный путь: #include "../libraries/Adafruit_GFX_Library/Adafruit_GFX.h" но и это не работает (с Intellisense все в порядке):

fatal error: ../libraries/Adafruit_GFX_Library/Adafruit_GFX.h: No such file or directory

Какой путь мне следует использовать?

Я также добавил полный путь в includePath:

"${workspaceFolder}/Source/libraries/Adafruit_BusIO",
"${workspaceFolder}/Source/libraries/Adafruit_GFX_Library",
"${workspaceFolder}/Source/libraries/Adafruit_PCD8544_Nokia_5110_LCD_library",
"d:/Alex/Hobbies/Electronic/Learning Arduino/Source/libraries/Adafruit_BusIO",
"d:/Alex/Hobbies/Electronic/Learning Arduino/Source/libraries/Adafruit_GFX_Library",
"d:/Alex/Hobbies/Electronic/Learning Arduino/Source/libraries/Adafruit_PCD8544_Nokia_5110_LCD_library"

Оба работают... потому что без них Intellisense жалуется, что Adafruit_GFX.h не найден.

При их добавлении он жалуется на Wire.h и SPI.h (недостаточно умен, чтобы заглянуть в папки "src"), поэтому я также добавляю их:

"C:\\Users\\Alex\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\libraries\\Wire\\src",
"C:\\Users\\Alex\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\libraries\\SPI\\src",

и Intellisense работает!

Но не сборка (Adafruit_GFX.h не найден!).

Я попытался сделать два вида include: для Arduino IDE и для VS Code:

#define VS_CODE true // Задайте VS_CODE значение true для совместимости с Visual Studio Code (при сборке)

#if VS_CODE == true
#include "d:/Alex/Hobbies/Electronic/Learning Arduino/Source/libraries/Adafruit_BusIO/Adafruit_I2CDevice.h" // требуется для Adafruit_GFX.h
#include "d:/Alex/Hobbies/Electronic/Learning Arduino/Source/libraries/Adafruit_BusIO/Adafruit_SPIDevice.h" // требуется для Adafruit_GFX.h
#include "d:/Alex/Hobbies/Electronic/Learning Arduino/Source/libraries/Adafruit_GFX_Library/Adafruit_GFX.h" // Включить библиотеку Adafruit GFX
#include "d:/Alex/Hobbies/Electronic/Learning Arduino/Source/libraries/Adafruit_PCD8544_Nokia_5110_LCD_library/Adafruit_PCD8544.h" // Включить библиотеку Adafruit PCD8544 для ЖК-дисплея Nokia 5110

#else // Arduino IDE использует «магические» имена и может самостоятельно определить путь к библиотекам
#include <Adafruit_GFX.h>     // Включить библиотеку Adafruit GFX
#include <Adafruit_PCD8544.h> // Включить библиотеку Adafruit PCD8544 для ЖК-дисплея Nokia 5110
#endif

Теперь конструктор VS Code может найти Adafruit_GFX.h, но он содержит эти два «волшебных» include:

#include <Adafruit_I2CDevice.h>
#include <Adafruit_SPIDevice.h>

Итак, теперь ошибка:

.../Adafruit_GFX.h:12:10: fatal error: 
Adafruit_I2CDevice.h: No such file or directory

Я также добавил эти два включения в свой набросок:

#if VS_CODE == true
#include "d:/Alex/Hobbies/Electronic/Learning Arduino/Source/libraries/Adafruit_BusIO/Adafruit_I2CDevice.h" // требуется для Adafruit_GFX.h
#include "d:/Alex/Hobbies/Electronic/Learning Arduino/Source/libraries/Adafruit_BusIO/Adafruit_SPIDevice.h" // требуется для Adafruit_GFX.h

но не работает (Adafruit_I2CDevice.h не найден).

Я с трудом понимаю, как это расширение (Arduino Community)... должно работать.

, 👍1

Обсуждение

${workspaceFolder} — текущая папка скетча, поэтому путь к каталогу библиотеки указан неверно. Путь "includePath" должен быть D:/Alex/Hobbies/Electronic/Learning Arduino/Source/lirbaries/**., @hcheung

Мой проект VS Code содержит папку Source (где я храню эскизы), поэтому я считаю, что я правильно ее использовал. В любом случае, я также добавил полный путь: "${workspaceFolder}/Source/libraries/Adafruit_GFX_Library" И "d:/Alex/Хобби/Электроника/Изучение Arduino/Источник/библиотеки/Adafruit_GFX_Library" Но IntelliSense всё равно работает, а вот сборка — нет (Adafruit_GFX.h не найден). Поэтому, полагаю, сборка вообще не обращается к файлу c_cpp_properties.json. Мне интересно, является ли сборка более «придирчивой» и не любит ли она путь «Изучение Arduino» с пробелом..., @Alex 75

Заменил расширение Arduino Community на расширение PlatformIO IDE и все заработало., @Alex 75

Символ ** после папки библиотеки указывает VSCode на необходимость рекурсивного поиска в папке библиотек. Вы этого не замечаете. В любом случае, если вы можете использовать PlatformIO, то используйте его, так как Microsoft объявила устаревшим расширение VSCode для Arduino, и теперь оно поддерживается несколькими добровольцами в качестве форка сообщества. Ребята., @hcheung


1 ответ


1

Я перехожу на использование расширения Platform IDE (я отключил расширение Arduino Community Edition, которое использовал).
Я прочитал документацию и смог настроить новый проект и использовать библиотеки максимум за 1 час работы.
Код тот же, что и в Arduino IDE.
#include {A-LIBRARY-HERE} работает нормально после добавления библиотеки в раздел lib_deps файла platformio.ini.
Intellisense, автодополнение кода, сборка и загрузка кажутся проще, чем другие расширения, но не нужно сходить с ума с настройкой проекта, и это расширение кажется лучше организованным и имеет больше функций.

,