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 взаимозаменяемыми. Надеюсь инструмент окажется полезен другим. Что думает публика?
    Амперка
    39,00
    Компания
    Поделиться публикацией

    Похожие публикации

    Комментарии 29

      0
      Ух ты! Здорово! :) Спасибо, Амперка! ;)
        0
        удобно. вы сами это к vim прикрутили?
          0
          К vim не прекручивал. Я всегда альт-табился, альт-таблюсь и буду альт-табиться
          0
          Очень нужная программа. У меня на маке, правда, не запустилось. Могу сразу сказать что для МакОС нужно изменить пути поиска библиотек и прочих файлов на /Applications/Arduino.app/Contents/Resources/Java/
          К сожалению, питона не знаю, но с тестированием с удовольствием помог бы.
            0
            Стоит все платформозависимые штуки вынести в отдельный файл, затем найти Маковода и гонять через GitHub пока не заработает. С поддержко макоси должно быть минимум проблем. Винда напрягает чуть больше.

            Если готовы посодействовать, можно попробовать сегодня-завтра, как будет время.
          • НЛО прилетело и опубликовало эту надпись здесь
              0
              Круто! Цивильный такой makefile. Вижу по крайней мере один минус: -документация
              • НЛО прилетело и опубликовало эту надпись здесь
                  0
                  Спасибо >.<

                  В avrdude я слыхал это есть в сааамой последней версии, но пока она не у всех — лучше так.
              0
              Левая половина сайта пропадает за экраном слева (ширина экрана у меня 1024).
                0
                Чёрт, и правда. Недоглядел. Буду исправлять.
                0
                Не находя файлы arduino (у меня в ~ он стоит), грязно ругается (traceback).
                  0
                  Можно traceback в личку? Работает ли с `-d ~/your/path/to/arduino-0022`?
                    0
                    Отправил. С -d не работает. ino установлено с pip.
                      0
                      Дело было в сценарии, когда не находился board.txt. Т.е. ни в стандартных местах, ни по подсказке -d.
                      Но по крайней мере теперь оно подробно скажет где производился поиск, должно стать ясно как нужно изменить значение для -d.

                      Новая версия уже залита. pip install --upgrade ino

                      Спасибо за репорт.
                  0
                  Это восхитительно!
                  Сам провел несколько ночей в попытках избавиться от родной IDE, и заодно от препроцесора C++. Обязательно воспользуюсь ino в следующем проекте.
                  • НЛО прилетело и опубликовало эту надпись здесь
                      0
                      Не пользовался этой средой, но быстрый взгляд на документацию говорит о том, что вы легко можете менять build steps, а следовательно поставить Ino в качестве билдера.
                    • НЛО прилетело и опубликовало эту надпись здесь
                        0
                        Ну не совсем так. Это для того, чтобы просто посмотреть чего оно печатает и в ответ, быть может, пару строк послать руками.

                        Для автоматизации и эффективности берётся язык, с библиотекой для работы по serial и фигачется то, что нужно бинарным протоколом.

                        Но прототип можно так сделать, ага.
                        0
                        Неплохо бы еще для upload и serial сохранять на следующий раз -p, -m настройки
                          0
                          В текущем проекте, раз уж -d сохраняется.
                            0
                            Хм. Нарушение дзена «Explicit is better than implicit». То, что сохраняется -d — это скорее баг, я только после прочтения вашего коммента понял, что это действительно так.

                            Для того, чтобы не повторяться постоянно достаточно написать конфиг-файл в 2 строки.
                              0
                              А почему inorc не скрытый?
                              И нет в нем параметра -d?
                                0
                                Потому что опечатка. Номинально читается из ~/.inorc

                                В нём есть любой параметр, только его нужно писать целиком:

                                arduino_dist = ~/Downloads/Arduino/arduino-0022

                                Не очевидно, нужно ещё задокументировать
                                  0
                                  Еще пара глюков:
                                  1) в доках параметры с "-", а работает только с "_"
                                  2) Ищет boards.txt, не находит, а потом находит.
                                  anton@eee-fy ~/1 $ ino build
                                  Searching for Board description file (boards.txt) ... FAILED
                                  Searching for Arduino core library ... /home/anton/projects/arduino/ide0022/hardware/arduino/cores/arduino
                                  Searching for Arduino standard libraries ... /home/anton/projects/arduino/ide0022/libraries
                                  Searching for Arduino lib version file (version.txt) ... /home/anton/projects/arduino/ide0022/lib/version.txt
                                  Detecting Arduino software version ... 22
                                  Searching for avr-gcc ... /usr/bin/avr-gcc
                                  Searching for avr-g++ ... /usr/bin/avr-g++
                                  Searching for avr-ar ... /usr/bin/avr-ar
                                  Searching for avr-objcopy ... /usr/bin/avr-objcopy
                                  Searching for Board description file (boards.txt) ... /home/anton/projects/arduino/ide0022/hardware/arduino/boards.txt
                                  Scanning dependencies of src
                                    0
                                    1) Заметил, исправляю
                                    2) Интересная ботва, попробую воспроизвести
                          0
                          Только сейчас наткнулся на эту тулзу. Спасибо! Чините баги пожалуйста ;-).
                          P.S. Можно было бы еще на dangerousprototypes.com/hackaday.com ньюс запостить.
                            0
                            Пасиба. Вот ща-ща-ща дел немного подразгребу и скоупом много проблем закрою.

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое