Как мой кот перестал бояться и полюбил Arduino
Привет, Хабр! Недавно мы с уважаемым dzhe думали о том, какой заголовок может считаться идеальным для Хабра — и вы уже поняли, к какому выводу пришли. Правда, к сожалению, на самом деле кота у нас нет, однако тему Arduino обещаю ниже немного приоткрыть.
Впрочем, глобальные новости у нас другие: Black Swift не просто вышел на Kickstarter, но и за первые 6 дней почти собрал необходимую сумму.
Это не много и не мало — были проекты, который собирали 100% за день или за час, были проекты, который так и умирали, едва добравшись до 50% за весь срок. Мы попали в интересную ситуацию — с одной стороны, в профессиональных сообществах Black Swift вызывал преимущественно положительные отклики, с другой стороны, СМИ более-менее общей направленности нами не заинтересовал — какой-то ещё один микрокомпьютер, мало ли их — поэтому какого-то массивного всплеска в первые день-два у нас не было.
Здесь, конечно, стоило немного доработать перед запуском: создать какую-нибудь бессмысленную, но понятную и дающую красивые картинки и заголовки плату расширения, на которую клюнули бы обычные СМИ. Ну, например, «самый маленький роутер в мире» или »100% совместимость с Arduino». Бессмысленную — потому что если вам нужен роутер, проще купить готовый, а если вы правда при виде 400-МГц процессора и OpenWRT беспокоитесь о совместимости с Arduino, то есть же Yun. Но, как показывает практика, все те журналисты, которые традиционно презрительно отзываются о маркетологах, на такие несложные маркетинговые уловки ловятся очень даже неплохо.
Впрочем, о работе с Kickstarter я подробнее напишу позже, когда будет официальный инфоповод »100%», а пока — про ардуину (на самом деле нет).Я уже пару-тройку раз упоминал, что в паре с Black Swift удобно использовать какой-нибудь дешёвый и несложный микроконтроллер — AVR, PIC, STM32 — чтобы на нём реализовать аппаратный ШИМ, АЦП и честное реальное время. Очевидно, что возникает одно неудобство — контроллер надо чем-то отдельно программировать, и если мы целимся на людей, не обязательно серьёзно разбирающихся в микроконтроллерной тематике, то это становится проблемой.
К счастью, под Linux существует пакет avrdude, который умеет одну очень хорошую вещь — программировать AVR, подключённый к обычным портам ввода-вывода (GPIO) Linux-устройства. OpenWRT — тот же линукс, вид сбоку, поэтому сборка под него avrdude является в общем-то делом техники и одного небольшого патча.
Тестовая плата:
На ней стоит ATtiny24A, кварц на 8 МГц, мелкая обвязка по питанию, разъёмы для Black Swift и пара разъёмов IDC 2×5. Никакой конкретной цели именно такой форм-фактор не преследовал.
С установленным Black Swift. Одна из вещей, за которую он мне нравится — возможность поставить его на разъёмах, а всякие дополнительные компоненты разместить под ним; даже над кварцем (обычный HC-49S) остаётся чуть-чуть свободного места.
Схема крайне проста: SPI-интерфейс тиньки подключается к Black Swift, её RESET — также к одному из GPIO и одновременно подтягивается к питанию резистором. Питается тинька для простоты от 3,3 В, выдаваемых Black Swift’ом.
Схема в PDF, схема и плата для Diptrace и в герберах.
Это, очевидно, половина работы. Теперь берём свежий avrdude-6.1, чуть-чуть правим, чтобы он собрался под OpenWRT, на будущее добавляем поддержку аппаратного SPI авторства Кевина Кацнера, пишем Makefile и собираем в готовый пакет.
Патчи и Makefile можно найти тут, а готовый пакет для OpenWRT 14.07 — здесь. Он не заточен под Black Swift каким-либо специальным образом (в частности, я не стал переписывать драйвер linuxgpio с медленного sysfs на быстрый прямой доступ к GPIO), поэтому будет спокойно работать и на других платах.
Пробуем (avrdude -p t24 -c linuxgpio -t):
Сигнатура чипа правильная, всё работает. Прошиваем AVR, чтобы помигать светодиодиком:
Мигаем светодиодиком, прямо как на Arduino.
Очевидно, что обмен данными с AVR легко организовать через тот же SPI, через который мы его прошили — в одну сторону пересылать команды и параметры, в ответ получать какие-то данные. То есть, мы полностью интегрировали AVR с Black Swift, причём так, что нам даже внешний программатор не нужен — Black Swift может сконфигурировать и прошить девственно чистый чип.
Само собой, Black Swift можно использовать и в качестве собственно программатора — с доступом по Wi-Fi и возможностью автономного питания. Я даже вижу, как его довести до законченного продукта: добавить [отключаемый] транслятор уровней 3,3/5 В и сделать веб-интерфейс с калькулятором фьюзов (есть такие на JS) и заливкой HEX-файла прошивки. У меня даже только что возникло подозрение, что я себе — сделаю.
При желании, подозреваю, можно даже скомпилировать под него gcc-avr, чтобы прошивку прямо на нём собирать, но как-то не вижу в этом практической необходимости.
Ну и про Arduino: в принципе ничто не мешает писать им в AVR HEX-файлы, полученные из Arduino IDE.
Upd. dzhe требует опровергнуть грязную клевету и сообщить, что у него кот есть.