Амперка corporate blog
1 November 2011

Ino — работа с Arduino из командной строки

imageХабрадевелоперам, привет!

Те, кто работал с Arduino, знает, что для его программирования существует специальная Arduino IDE. По сути это блокнот с двумя кнопками: «прошить» и «послушать через serial». Блокнот подходит для написания маленьких программок-экспериментов, но выбешивает при написании чего-то большего.

Многие привыкли работать в своих любимых Visual Studio, Eclipse, KDevelop и т.п. Я сам — убеждённый фанат Vim’а, окна терминала и кнопок Alt+Tab. Давно хотелось, чтобы сборка проектов для Arduino была такой же простой, как в официальной IDE, а вот их ужасный редактор на глаза больше не попадался. Тем более, что язык «Arduino» несмотря на позиционирование как отдельного, простого языка программирования — это не что иное, как C++. А собирается всё в конечном итоге инструментами avr-gcc.

Для решения проблемы Амперкой был создан Ino.

Предыстория


Мне никогда не было понятно почему Arduino Software была сделана в виде монолитного решения, а не была разбита на 2 слоя: командная строка и UI. Именно это ограничивало возможности работы в любимых редакторах. Непонятно было не мне одному, поэтому народ то и дело делился всяческими Makefile’ами, CMake-скриптами, wscript’ами, SConstruct’ами. Однако всё это было не достаточно универсально, тянуло за собой копипаст между проектами и плохо расширялось.

Я пробовал оформить удобную сборку в виде расширений для SCons и Waf. Обе попытки были удачны в какой-то степени, но в итоге структура проекта и пайплайн сборки оказывались достаточно сложны для того, чтобы можно было кому-то за полминуты объяснить как этим правильно пользоваться.

В итоге решил сделать что-то с крайне простым интерфейсом. Таким же простым как у git, mercurial, svn:

программа что-сделать --как-сделать

Выделив основные действия, которые нужны при работе с Arduino, получилось следующее:

ino init # создать скелет проекта
ino build # собрать бинарник
ino upload # прошить arduino
ino serial # поговорить с ним по serial

Что получилось


Получилось то, что хотелось. Дабы не изобретать велосипед с нуля, для сборки за кадром используется make. Реализовано автоматическое отслеживание используемых библиотек, как и в оригинальном IDE; исходники разыскиваются так же на автомате, без помощи каких-либо xfile’ов в каждой директории.

В общем, совместимость была сохранена по-максимуму, чтобы сделать Arduino IDE и Ino взаимозаменяемыми. Надеюсь инструмент окажется полезен другим. Что думает публика?

+20
11.1k 53
Comments 29