Arduino

Сравнение программ для работы с Arduino: Arduino IDE, PlatformIO, Qt Creator с расширениями

1 просмотров

Введение

Перед тем как писать прошивку для Arduino, нужно выбрать инструмент разработки. В статье сравним три основных варианта: классическую Arduino IDE, более продвинутый PlatformIO (как расширение для VS Code, так и отдельный CLI), и возможность писать и собирать прошивку прямо из Qt Creator — что особенно удобно, если десктопная часть проекта уже разрабатывается в Qt Creator, и хочется вести оба конца проекта (прошивку и Qt-приложение) в одной среде.

Концепция

Arduino IDE — самый простой, «из коробки» вариант: минимум настройки, встроенный менеджер библиотек, но ограниченные возможности редактирования кода (отсутствие полноценного автодополнения и навигации по коду до недавних версий) и неудобство для больших проектов с несколькими файлами. PlatformIO — более профессиональный инструмент, поддерживающий множество плат и фреймворков (включая собственно Arduino framework) через единый, основанный на platformio.ini, декларативный конфиг, с нормальной системой сборки на основе SCons и удобной интеграцией с современными редакторами. Qt Creator может работать с Arduino-проектами через стороннее расширение, либо просто как обычный CMake-проект с использованием Arduino-CLI или PlatformIO в качестве инструмента сборки «под капотом» — то есть сам Qt Creator не имеет встроенной экспертизы по Arduino, но прекрасно справляется как универсальная IDE поверх правильно настроенного CMake/PlatformIO-проекта.

Пример кода

; platformio.ini — типичная конфигурация проекта Arduino через PlatformIO
[env:uno]
platform = atmelavr
board = uno
framework = arduino
monitor_speed = 9600

lib_deps =
    adafruit/DHT sensor library@^1.4.4
    adafruit/Adafruit Unified Sensor@^1.1.9
# Сборка и загрузка прошивки через PlatformIO CLI — без необходимости в Arduino IDE вовсе
pio run -t upload --upload-port /dev/ttyUSB0

# Мониторинг последовательного порта прямо из терминала, без переключения в другую программу
pio device monitor --baud 9600
# CMakeLists.txt — интеграция сборки прошивки в общий CMake-проект,
# объединяющий Qt-приложение и прошивку Arduino в едином дереве разработки
add_custom_target(build_firmware
    COMMAND pio run -d ${CMAKE_SOURCE_DIR}/firmware
    COMMENT "Сборка прошивки Arduino через PlatformIO"
)

add_custom_target(upload_firmware
    COMMAND pio run -d ${CMAKE_SOURCE_DIR}/firmware -t upload
    DEPENDS build_firmware
    COMMENT "Загрузка прошивки на подключённую плату Arduino"
)

Пояснения к коду

platformio.ini декларативно описывает целевую плату (board = uno), используемый фреймворк (framework = arduino — это и есть тот самый классический Arduino sketch API, доступный через PlatformIO) и зависимости от внешних библиотек (lib_deps), которые PlatformIO сам скачивает и подключает при сборке — для сравнения, в классической Arduino IDE управление библиотеками происходит через отдельный, GUI-based менеджер библиотек, не выражаемый как текстовый, версионируемый в Git конфигурационный файл.

CMake-пример показывает, как можно «обернуть» вызовы PlatformIO CLI в виде custom target внутри общего CMake-проекта, объединяющего и десктопную Qt-часть, и прошивку устройства — это даёт возможность собирать и заливать прошивку прямо из Qt Creator (который умеет работать с произвольными CMake custom targets) без переключения в отдельную программу, что удобно именно для проектов, где обе части (прошивка и Qt-приложение) разрабатываются и тестируются совместно, как в этом цикле статей.

Подводные камни

  • Arduino IDE на старых версиях (до 2.0) имеет ограниченные возможности редактирования кода — отсутствие полноценного автодополнения, навигации по объявлениям функций, что становится особенно неудобным по мере роста сложности прошивки за пределы простого, однофайлового скетча; для проектов с несколькими файлами и библиотеками PlatformIO или Qt Creator с настроенным CMake обычно дают заметно более комфортный опыт разработки.
  • Несовпадение версий библиотек между PlatformIO Library Registry и тем, что было протестировано автором прошивки, особенно если зависимости в platformio.ini указаны без точной фиксации версии (^1.4.4 допускает любую совместимую minor/patch версию) — для воспроизводимости сборки между разными машинами разработки и со временем стоит явно фиксировать точные версии библиотек, а не полагаться на диапазоны версий.
  • Объединение сборки прошивки и Qt-приложения в одном CMake-дереве усложняет сборку для разработчиков, у которых не настроен PlatformIO, если custom target вызывает pio напрямую без проверки его наличия — для команды, где не все участники работают с прошивкой, стоит явно изолировать эти custom targets (например, через EXCLUDE_FROM_ALL или отдельный, опциональный CMake-таргет), чтобы отсутствие PlatformIO на машине не блокировало сборку основной, десктопной части проекта.
  • Выбор инструмента «раз и навсегда» без переоценки по мере роста проекта — для самого первого знакомства и простых учебных скетчей Arduino IDE вполне достаточно, и переход на PlatformIO/CMake может быть избыточным усложнением; обратная ситуация — попытка вести сложный, многомодульный проект с десятками файлов прошивки в классической Arduino IDE — создаёт неоправданные трудности там, где более развитый инструмент уже оправдан задачей.