Какой фреймворк используется в среде разработки arduino

Обновлено: 04.07.2024

Все, кто начинает изучать Arduino, знакомы со средой разработки Arduino IDE. Оно позволяет писать скетчи, проверять корректность и загружать их в Ардуино. Но единственная ли это среда для разработки программ для Arduino? Вовсе нет! Давайте посмотрим, какие ещё есть варианты.

В данной статье мы рассмотрим 4 самые популярные среды разработки:

  • Arduino IDE;
  • Programino;
  • B4R;
  • CodeBlocks for Arduino.

1 Среда разработки Arduino IDE

Конечно же, эта среда разработки знакома каждому, кто хоть раз программировал для Arduino.

Главное окно среды разработки Arduino IDE

Главное окно среды разработки Arduino IDE

В ней имеется весь необходимый минимум для разработки программ: написание кода, проверка кода, компиляция, загрузка скетча в Ардуино, монитор последовательного порта. Все, кто работал в серьёзных «взрослых» средах разработки типа JetBrains IDEA, Microsoft Visual Studio или Quartus, наверняка отметят, что среда Arduino IDE довольно аскетична: ничего лишнего, и особых удобств она не предлагает.

2 Среда разработки Programino

Рассмотрим среду разработки PROGRAMINO. Это платная среда разработки, но её можно опробовать в течение 14-ти дней бесплатно. Programino, как и другие среды разработки, требует, однако, чтобы у вас была установлена Arduino IDE. При первом запуске программы следует в настройках указать путь к исполняемому файлу arduino.exe. Для этого идём в меню настройки: Options Editor Settings. Появится окно, в котором нужно будет указать пути к директории с Arduino IDE и сопутствующими библиотеками. Теперь мы готовы писать программы в Programino.

Первоначальная настройка среды Programino

Первоначальная настройка среды Programino

Язык, который используется в данной среде разработки – такой же, как и в оригинальной Arduino IDE – Си. То есть, по сути, если вы уже пишете скетчи в Arduino IDE, то вам не придётся изучать новый язык программирования, что является большим плюсом данной среды разработки.

Однако помимо этого, данная IDE предлагает такой удобный способ быстрой разработки как автодополнение кода. То есть, вам не придётся постоянно лазить в справочник по командам и методам Arduino. Вы начинаете набирать код, и среда разработки предложит вам выбрать из доступных вариантов тот, который вам нужен. Например, вы набираете "digi" и IDE предлагает вам варианты: "digitalRead", "digitalWrite" и другие возможные.

Функция автодополнения кода Programino IDE

Функция автодополнения кода Programino IDE

Давайте напишем простой скетч, в котором будем постоянно опрашивать один из аналоговых выводов Arduino и выводить считанные показания в последовательный порт.

Постарайтесь набирать скетч вручную, а не копировать и вставлять, чтобы прочувствовать удобство автодополнения кода Programino.

Что ещё интересного предлагает Programino IDE? В данной среде разработки имеются несколько дополнительных полезных инструментов, доступных через меню Tools. Например: блокнот, дизайнер LCD символов, преобразователь между DEC-BIN-HEX, терминал последовательного порта, аналоговый плоттер и другие.

Дополнительные инструменты Programino IDE

Дополнительные инструменты Programino IDE

Остановимся подробнее на инструменте Analog Plotter. Это средство позволяет визуализировать вам то, что приходит в COM-порт от Arduino.

Для работы плоттера в скетче нужно активизировать последовательный порт на скорости 19200 кб/сек. Аналоговые данные выводятся на плоттер с помощью команды Serial.println().

Запустим аналоговый плоттер. Нажмём кнопку Connect для подключения к порту, к которому у нас подключён Arduino.

Аналоговый плоттер в Programino

Аналоговый плоттер в Programino

Этот инструмент может быть полезным, например, для отображения показаний во времени каких-нибудь аналоговых датчиков: температуры, влажности, давления, освещённости и других.

Перед записью скетча в память Arduino, следует указать тип используемой платы и порт, к которому она подключена через меню Hardware.

Выбор платы в Programino Выбор последовательного порта в Programino

Для загрузки скетча в память Arduino нажмите в верхнем меню иконку с изображением загрузки. Programino загрузит скетч и в нижнем окне журнала покажет данные о размере скетча и оставшихся свободных ресурсах платы Ардуино.

3 Среда разработки B4R (Basic for Arduino)

Ещё одна интересная альтернатива Arduino IDE – B4R, или "Basic for Arduino". Эта среда разработки уникальна тем, что использует язык Basic, а не Си. Она также поддерживает функцию автодополнения кода. Кроме того, она полностью бесплатна.

При первом запуске среда B4R также требует указать путь к директории с Arduino IDE и, при необходимости, дополнительным нестандартным библиотекам и общим модулям. Эти настройки можно задать и позже через меню Tools Configure Paths.

Настройки среды B4R

Настройки среды B4R

Выбор платы Arduino в B4R

А также выбрать плату: Tools Board Selector: Выбор платы Arduino в B4R

Давайте напишем вот такой скетч и заодно немного ближе познакомимся со средой разработки.

Главное окно B4R IDE

Главное окно B4R IDE

Вы не сможете сразу начать программировать в этой среде разработки, т.к. она использует другой, более объектно-ориентированный язык, чем классическая Arduino IDE, с другим синтаксисом. Тем не менее, удобство этой среды и наличие хорошего руководства от разработчиков полностью окупает эти недостатки.

4 Среда разработки Codeblocks for Arduino

Существуют и другие среды разработки для Arduino кроме перечисленных. Например, CodeBlocks. Основное её отличие от описанных IDE – возможность писать код для микроконтроллеров и некоторых других платформ, не только для Arduino. Более подробно описывать её не буду, проще почитать информацию на официальном сайте и файлы справки.

Среда разработки CodeBlocks для Arduino

Среда разработки CodeBlocks для Arduino

Теперь мы знаем, что существуют альтернативные, гораздо более удобные, среды разработки, чем классическая Arduino IDE. Их использование может существенно упростить и ускорить написание ваших собственных скетчей.


Синтаксис


К синтаксису также можно отнести комментарии, т.к. в разных языках они выделяются по-разному. Комментарий это обычный текст, который игнорируется на этапе компиляции. Комментарии нужны для пояснения кода, как себе самому, так и другим возможным его читателям. В C++ у нас два типа комментариев:

  • Однострочный комментарий
  • Многострочный комментарий

Оформление

Форматирование

Структура кода

Прежде чем переходить к структуре и порядку частей кода, нужно кое-что запомнить:


При запуске Arduino IDE даёт нам заготовку в виде двух обязательных функций: setup и loop

На протяжении нескольких лет работы с Arduino я сформировал для себя следующую структуру скетча:

  1. Описание прошивки, полезные ссылки, заметки, авторство
  2. Константы настройки (define и обычные)
  3. Служебные константы (которые следует менять только с полным осознанием дела)
  4. Подключаемые библиотеки и внешние файлы, объявление соответствующих им типов данных и классов
  5. Глобальные переменные
  6. setup()
  7. loop()
  8. Свои функции

Подключение библиотек и файлов

В чём отличие <> и "" ? Когда указываем название "в кавычках" , компилятор сначала ищет файл в папке со скетчем, а затем в папке с библиотеками. При использовании <галочек> компилятор ищет файл только в папке с библиотеками! К слову о папках с библиотеками: их две, в обеих будет производиться поиск библиотек.

  • Мои Документы/Arduino/libraries
  • C:/Program Files (x86)/Arduino/libraries (или C:/Program Files/Arduino/libraries для 32-разрядной Windows)
Важное замечание: папка с библиотекой, находящаяся в C:/Program Files (x86)/Arduino/libraries, должна содержать файлы и папки библиотеки, а не одну папку с таким же названием, как сама библиотека. Это приведёт к ошибке, сборщик не сможет найти файлы!

Не используйте мышку!

Вы наверняка замечали, как в фильмах программисты и хакеры делают свою работу, барабаня по клавиатуре и особо не трогая мышку. Это действительно так, чем больше вы программируете, тем меньше будете использовать мышку для установки курсора в нужное место и выделения слов/строк, потому что делать это с клавиатуры можно гораздо быстрее!

Автоформатирование – Arduino IDE умеет автоматически приводить ваш код в порядок (имеются в виду отступы, переносы строк и пробелы). Для автоматического форматирования используйте комбинацию CTRL+T на клавиатуре, либо Инструменты/АвтоФорматирование в окне IDE. Используйте чаще, чтобы сделать код красивым (каноничным, классическим) и более читаемым для других! Скрытие частей кода – сворачивайте длинные функции и прочие куски кода для экономии места и времени на скроллинг. Включается здесь: Файл/Настройки/Включить сворачивание кода

Не используйте мышку! Чем выше становится ваш навык в программировании, тем меньше вы будете использовать мышку (да-да, как в фильмах про хакеров). Используйте обе руки для написания кода и перемещения по нему, вот вам несколько полезных комбинаций и хаков, которыми я пользуюсь ПОСТОЯННО:

  • Ctrl+← , Ctrl+→ – переместить курсор влево/вправо НА ОДНО СЛОВО
  • Home , End – переместить курсор в начало/конец строки
  • Shift+← , Shift+→ – выделить символ слева/справа от курсора
  • Shift+Ctrl+← , Shift+Ctrl+→ – выделить слово слева/справа от курсора
  • Shift+Home , Shift+End – выделить все символы от текущего положения курсора до начала/конца строки
  • Ctrl+Z – отменить последнее действие
  • Ctrl+Y – повторить отменённое действие
  • Ctrl+C – копировать выделенный текст
  • Ctrl+X – вырезать выделенный текст
  • Ctrl+V – вставить текст из буфера обмена
  • Ctrl+U – загрузить прошивку в Arduino
  • Ctrl+R – скомпилировать (проверить)
  • Ctrl+Shift+M – открыть монитор порта

Также для отодвигания комментариев в правую часть кода используйте TAB, а не ПРОБЕЛ. Нажатие TAB перемещает курсор по некоторой таблице, из-за чего ваши комментарии будут установлены красиво на одном расстоянии за вдвое меньшее количество нажатий!

Видео



За последний год я написал довольно много кода для Arduino и попутно сменил несколько инструментов разработки. В статье упоминаются варианты которые пробовал и более подробно о том, на чем остановился. Речь пойдет про набор инструментов для случая когда >10 проектов под разные платы и немного про разработку и установку библиотек.

Среда разработки

В чем проблема?

  • Только в последних версиях появилось какое-то управление библиотеками, пока без подобия Gemfile/requirements.txt/package.json, то есть нельзя для проекта указать какие либы каких версий используются
  • нет интеграции с Git или другими VCS
  • текстовый редактор не сравнить с моим любимым текстовым редактором
  • нет возможности сохранить выбор платы в проекте
  • неудобный вывод ошибок компиляции

Что пробовал

Ino — проект от российской компании Амперка, утилита командной строки для прошивки Arduino.
Довольно популярный был проект, >200 форков. Последний коммит в апреле 2014, поэтому не работает со свежими версиями IDE (кажется начиная с 1.5).
Есть живой форк Arturo, немного его использовал, но были проблемы в каких-то экзотических случаях.

Arduino-Makefile

Arduino-Makefile — компиляция и загрузка с помощью make. Не поддерживаются Arduino Due, Zero и другие 32-битные платы. Отличием от стандартной IDE является то, что методы должны быть объявлены до использования, так что при переносе готовых проектов может понадобится редактирование исходников. Если правильно помню, мне не удалось подружить Arduino-Makefile и SparkFun Pro Micro.

Что использую

PlatformIO

  • один проект под несколько плат, т.е. тот же самый код должен компилироваться под разные платы
  • много проектов под разные платы, т.е. каждый проект под одну плату, но проектов много и платы разные
  • есть необходимость работать через ssh, например если PlatformIO установлен на Raspberry Pi
  • острое неприятие графического интерфейса
Использование с Arduino

Пересказывать документацию не буду, тут инструкция по установке, об использовании можно посмотреть в разделе Quick Start
Структура папок проекта для PlatformIO отличается от проекта Arduino IDE, каждый проект содержит файл platformio.ini в котором указано какие платы используются. Таким образом не приходится каждый раз выбирать нужную плату.
Расскажу на примере как использую PlatformIO при разработке библиотеки для Arduino. У библиотеки есть два примера, каждый из них является проектом в формате PlatformIO. В файле настроек проекта platformio.ini перечислены все платы на которых должна работать библиотека:

Скомпилировать пример для всех плат можно командой:

Скомпилировать только для uno можно так:

Загрузить прошивку на uno:

Запустить монитор последовательного порта:

Добавил алиасы в .zshrc чтобы сделать команды короче:

С ними таже последовательность действий:

Так же есть интеграция с Travis CI и другими CI инструментами, подробнее тут.
Вобще-то у Arduino IDE есть интерфейс коммандной строки, но он далек от совершенства.

Нюансы PlatformIO
  • компиляция в PlatformIO не всегда равноценна компиляции в Arduino IDE, то что скопмилировалось в PlatformIO может не компилироваться в Arduino IDE и наоборот
  • структура папок проекта не совпадает со структурой для Arduino IDE
  • не все библиотеки доступны для установки через platformio lib

Serial.print("Может быть лучше");

В чем проблема?

Стандартный Serial.print() слегка неудобен в случае если нужно напечатать
название и значение переменной, например чтобы вывести "pin_2 = <состояние пин 2>, pin_3 = <состояние пин 3>" приходится делать так:

Доступные модификаторы

wildcard comment Example
%s replace with an string (char*) Log.Info("String %s", myString);
%c replace with an character Log.Info("use %c as input", myChar)
%d replace with an integer value Log.Info("current value %d",myValue);
%l replace with an long value Log.Info("current long %l", myLong);
%x replace and convert integer value into hex Log.Info ("as hex %x), myValue);
%X like %x but combine with 0x123AB Log.Info ("as hex %X), myValue);
%b replace and convert integer value into binary Log.Info ("as bin %b), myValue);
%B like %x but combine with 0b10100011 Log.Info ("as bin %B), myValue);
%t replace and convert boolean value into "t" or "f" Log.Info ("is it true? %t), myBool);
%T like %t but convert into "true" or "false" Log.Info ("is it true? %T), myBool);

Что использую

advancedSerial

Экономия памяти

Если обернуть строку в макрос F(), то она не будет загружена в память (SRAM), так что для экономии памяти используйте F():

Безусловно использование advancedSerial добавляет некоторый оверхед по сравнению со стандартным Serial, я попробовал приблизительно оценить какой. Ниже привожу результаты компиляции для Arduino Uno, так как у нее 2KB памяти и это минимум среди плат которые обычно использую.

Обычный сериал, без каких-либо библиотек:

storage space: 5%
dynamic memory: 9%

advancedSerial:

storage space: 5%
dynamic memory: 10%

examples/Advanced.ino
storage space: 9%
dynamic memory: 26%

examples/Advanced.ino с использованием F() макроса
storage space: 9%
dynamic memory: 10%
Получается что использование памяти увеличивается незначительно. Но advancedSerial не оптимальное решение в плане ресурсов, есть альтернативные реализации, например Debug.

Установка библиотек

В чем проблема?

Arduino IDE

Редко пользуюсь Arduino IDE, возможно есть способ лучше. Способ такой: устанавливать библиотеки в подпапку вашего проекта и поместить симлинки(ярлыки?) для каждой библиотеки в папку libraries (в папку куда устанавливает библиотеки Arduino IDE).
Кстати, если правильно помню, Arduino IDE компилирует все библиотеки из папки libraries при компиляции любого скетча, так что время компиляции увеличивается если в libraries много библиотек. Еще один повод не использовать Arduino IDE.



В мире Arduino существует собственная, написанная на java, IDE, достаточно спартанского вида, без подсветки текста и автодополнения! Главные ее функции — это сборка программы и загрузка. Компиляция осуществляется через avr-gcc, а загрузка в МК через avrdude. После нескольких месяцев использования, решил поискать альтернативу, так как Arduino IDE у меня периодически умудрялось грузить процессор на 100% или просто вылетать! Проверив выдачи поисковика, был маленько разочарован, под linux особо альтернатив нет, кроме консольной ino. Ну что, возможно, консольного клиента нам вполне и хватит, приступим…

Возьмем среду разработки: Geany – легкий и удобный кросплатформенный редактор, с возможность прикрутить свои скрипты, имеющий встроенную консоль и легко расширяемый через плагины. Далее, все действия будут производится на debian/ubuntu x86-64 системе.

1. Установим ino, Geany и плагины к нему:
$ sudo apt-get install geany geany-plugins pip picocom
$ sudo pip install ino

2. Приступим к настройке ino. Для её работы нужна папка с оригинальной arduino ide, желательно стабильную версию 1.0.5. С бета версиями у меня не заработало, так как там поменяли логику расположения библиотек и ручная подгонка не привела к успеху, поэтому остановился на версии 1.0.5. Нужно ее скачать и распаковать в любую удобную директорию. У меня будет в корень каталога пользователя /home/user/. Ino в основном использует 4 команды:

  • ino init — создает структуру папок для проекта, выполнять нужно в пустом каталоге
  • ino build -d /путь_до_каталога_arduino_ide — компилирует проект
  • ino upload — загружает проект в МК
  • ino clean — очистка результатов предыдущей сборки


[build]
board-model = uno
[upload]
board-model = uno
serial-port = /dev/ttyACM0
[serial]
serial-port = /dev/ttyACM0

3. Приступим к легкой настройке Geany и совмещению его с arduino.
Нужные плагины каждый может подключить по своему усмотрению. Делается это в два клика мышью через инструменты → менеджер модулей.
Поменяем стандартную тему на темную + шаблоны подсветки кода:


Далее можно запустить Geany, он будет с новой темной темой. Заходим в Инструменты → файлы настроек → filetype_extensions.conf и в конец строчки с C++ добавить *.ino, для того чтобы файлы проектов arduino открывались с подсветкой кода в стиле С++. Если есть желание, то подсветку кода можно настроить под себя

/.config/geany/geany_dark_filedefs/filetypes.cpp. К сожалению не нашел готового snippets(автодополнение) файла под arduino. Специфичные функции, опять же, желающие могут сделать и опубликовать.

Инструменты → файлы настроек → snippets.conf добавляем в раздел С++ следующую строчку
Serial=Serial.print(%cursor%);

4. Настроим сборку Arduino проекта в Geany:

  1. Скомпилировать — cd .. && ino build -d /home/user/arduino-1.0.5 && find . -name 'firmware.hex' ! -path './.build/uno/*' -print -exec cp -f <> .build/uno \;
  2. Зарузка в МК — cd .. && ino upload
  3. Полная сборка — cd .. && ino clean && ino build -d /home/user/arduino-1.0.5 && mkdir .build/uno && find . -name 'firmware.hex' ! -path './.build/uno/*' -print -exec cp -f <> .build/uno \;
  4. Выполнить — ino serial


Читайте также: