Помимо низкой цены и периферийных возможностей одной из замечательных особенностей Raspberry Pi Pico является среда разработки C/C++ SDK. Ребята из Raspberry Pi проделали отличную работу по созданию среды программирования, которая проста в использовании, но при этом позволяет вам максимально работать на аппаратном уровне, если вы этого хотите.

Одним из недостатков использования C/C++ SDK является отсутствие библиотек. Они, конечно, есть, и, хотя их число растет, они не приближаются в своем объеме к огромному набору библиотек, доступных при использовании Arduino IDE. Одна только справочная документация Arduino перечисляет более 4000 библиотек.
Если библиотеки Pico C/C++ SDK для вашего датчика, дисплея или другого периферийного устройства не существует, скорее всего, существует библиотека Arduino. В этом руководстве мы расскажем о процессе добавления библиотек Arduino в ваш проект Pico C/C++ SDK с помощью pico-arduino-compat.
pico-arduino-compat представляет собой уровень совместимости, который позволяет использовать (некоторые) библиотеки Arduino без изменений в проектах, написанных с помощью Pico C/C++ SDK. Для каждой библиотеки Arduino, указанной в официальной документации Arduino, существует соответствующая библиотека интерфейса cmake, которую можно использовать непосредственно в проекте Pico C/C++ SDK. Уровень совместимости pico-arduino-compat использует потрясающее ядро Arduino RP2040 от Earlephilhower, чтобы делать большую часть тяжелой работы.
Очевидно, что не все библиотеки Arduino будут работать с Pico/RP2040. В качестве примера можно привести те, которые полагаются на определенные особенности оборудования AVR или ESP. Из 4190 библиотек, перечисленных в официальной справочной документации Arduino, 1730 из них были успешно скомпилированы с помощью Pico C/C++ SDK (41%). Возможно, значительное количество из них не удалось скомпилировать из-за зависимости от других библиотек. Это можно легко исправить, настроив файл CMakeLists.txt, но это ручной процесс, и он выполняется только для нескольких библиотек.
Итак, для начала клонируем репозиторий:
git clone https://github.com/fhdm-dev/pico-arduino-compat.gitИнициализируем подмодуль arduino-pico:
cd pico-arduino-compat
git submodule update --init arduino-compat/arduino-pico
Вам понадобится точное имя библиотеки Arduino, которую вы планируете использовать. Если вы его не знаете, вы можете найти название библиотеки в официальной документации Arduino. Теперь перейдите к таблице библиотек pico-arduino-compat и найдите библиотеку по имени библиотеки Arduino. Как только вы ее найдете, посмотрите на столбец Compile (2-й справа). Если этот столбец имеет значение ОК, значит, библиотека прошла базовый тест компиляции, и если вам повезет, она будет работать с Pico C/C++ SDK без каких-либо изменений. Обратите внимание на идентификатор и имя цели CMake.
Каждый репозиторий библиотеки Arduino хранится как подмодуль в репозитории pico-arduino-compat. По умолчанию git оставляет каталог подмодуля пустым до его инициализации. Чтобы инициализировать его (и подмодули библиотек Arduino, от которых он зависит), выполните следующие действия.
Сначала измените каталог на libs/ID, где ID – это идентификатор, который вы записали выше. С этого момента мы будем называть этот каталог каталогом библиотеки. например. для библиотеки Arduino LiquidCrystal идентификатор – liquidcrystal.
cd libs/liquidcrystalТеперь инициализируйте подмодуль. В Linux просто запустите следующий скрипт:
./init.shВ других ОС просто найдите команду git в сценарии init.sh и запустите ее из командной строки. В файле CMakeLists.txt вашего проекта добавьте каталог библиотеки в качестве подкаталога, например:
add_subdirectory(/home/fhdm-dev/pico/pico-arduino-compat/libs/liquidcrystal build-pac-liquidcrystal)Примечание: значение второго аргумента, переданного в add_subdirectory, не имеет значения. Просто он должен быть уникальным в вашем проекте. Обычно используют build_ (target), где (target) – это целевое имя cmake для библиотеки. Теперь добавьте цель CMake в target_link_libraries в файле CMakeLists.txt. например:
target_link_libraries(somename
pac-liquidcrystal
)
Обратите внимание, все целевые имена cmake начинаются с pac-, чтобы обеспечить уникальность. Теперь вы можете использовать библиотеку в своем проекте Pico C/C++ SDK. Посмотрим теперь все это на практике.
Допустим, мы хотим использовать библиотеку Adafruit SSD1306 в нашем проекте. Сначала мы ищем запись в таблице библиотек pico-arduino-compat и обнаруживаем, что у нее есть идентификатор adafruit-ssd1306 и целевое имя cmake pac-adafruit-ssd1306. Вы также заметите, что в столбце Test отображается значение Passed. Это означает, что библиотека протестирована на реальном устройстве и по крайней мере часть функциональности работает. Измените каталог на каталог библиотеки и перечислите его содержимое.
cd libs/adafruit-ssd1306
ls
Каталог Adafruit_SSD1306, который вы видите, включен в репозиторий pico-arduino-compat как подмодуль git и изначально будет пустым. Теперь инициализируем подмодуль, запустив сценарий init.sh следующим образом:
./init.shВы можете заметить, что это также инициализирует подмодуль для библиотеки adafruit-gfx-library, от которой он зависит, и который, в свою очередь, инициализирует библиотеку adafruit-busio. Примечание: в операционных системах, отличных от Linux, вам может потребоваться инициализировать подмодули, запустив команды git вручную. Подробности смотрите в содержимом init.sh. Теперь необходимо изменить основной файл CMakeLists.txt нашего проекта, добавив строку add_subdirectory и добавив библиотеку в target_link_libraries. Например:
cmake_minimum_required(VERSION 3.12)
include(pico_sdk_import.cmake)
project(adafruit-ssd1306-examples)
pico_sdk_init()
add_subdirectory(/home/fhdm-dev/pico/pico-arduino-compat/libs/adafruit-ssd1306 build_pac-adafruit-ssd1306)
add_executable(text
main.cpp
)
target_link_libraries(text
pac-adafruit-ssd1306
)
# create map/bin/hex file etc.
pico_add_extra_outputs(text)
Все готово, теперь можете пользоваться библиотекой Adafruit на своем Raspberry Pi Pico.

© digitrode.ru