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

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

Название является отсылкой к мыльной опере «Все мои детальки» из Футурамы. Ведь разных видов Arduino настолько много, что намечается целый сериал. Впрочем, не буду пытаться объять необъятное и перечислять всю сотню. Вместо этого сосредоточусь на тех, которыми обладаю или хотя бы подержал в руках. Приступаем!

▍ Это личное


Моё увлечение компьютерами началось с радиолюбительства. От ржавых германиевых транзисторов МП42 я перешёл к оранжевым кремниевым КТ315, логическим микросхемам 155-ой серии, и далее к микропроцессорам, об которые благополучно запнулся — не было знаний и источников информации по аппаратной части. Зато были видеоигры и желание их создавать, и так я переключился с электроники на программирование. Но и первое увлечение окончательно не оставил.

В первой половине 2000-х годов в поле моего внимания попали мощные микроконтроллеры типа ATmega и Parallax SX, и они захватили моё воображение.

Популярная DIY игровая консоль UzeBox на микроконтроллере ATmega. Фото из интернета

Открывались новые горизонты: построить свой собственный компьютер с нуля на дискретной логике для меня было очень сложной задачей. На микроконтроллере же можно было легко сделать DIY-портативную игровую консоль, приспособив готовый LCD-экранчик, или даже платформу, подключаемую к телевизору или VGA монитору, генерируя видеосигнал полностью программно. А ещё можно было применить эти мощности для синтеза звука и строить музыкальные синтезаторы. Конечно, для решения подобных задач больше подходили ПЛИС, но они были терра инкогнита, а микроконтроллеры позволяли адаптировать уже имеющиеся знания.

Известный проект V6Z80P в своей инкарнации V2 применял микроконтроллеры для генерации видео, спрайтов и звука

Прошлые мечты были как никогда близки к сбыче, и я занялся освоением микроконтроллеров ATmega и их местного ассемблера, проектируя разнообразные конструкции на бумаге и в частично работоспособном коде. Когда накопленный опыт грозил, наконец, реализоваться во что-то осязаемое, а успех и признание публики были так близки, на сцене появилось оно. Треклятое Arduino. Кунг-фу Нео загрузили во всех желающих — теперь всё это мог сделать каждый, но с гораздо меньшими усилиями. И разумеется, многие делали.

Поначалу я принял новинку в штыки. Это для детей и несерьёзно, настоящие разработчики используют только голые камни, сами собирают себе отладочный стенд вместе с программатором, и тратят целый день только на загрузку первой мигалки светодиодом в контроллер! Да как они вообще смеют делать то же, что и я, но не пройдя такой же путь по всем граблям, не преодолев и не выстрадав?!

И всё же со временем я скатился. Хайп поутих, а я обзавёлся первыми платами — Mega и Uno, и начал пробовать применять Arduino в своих разработках. Дело шло не сильно бодро, в частности потому, что местная инфраструктура не располагала к низкоуровневому программированию и выжиманию всех соков, к которым меня склоняло спектрумистское прошлое. Но постепенно я оценил удобство, возможность быстрой проверки идей, и особенно то, что другие энтузиасты могут легко повторить эти конструкции. Ардуино оказалась удобной платформой для прототипирования и даже для малосерийных поделок.

ESP32 Rainbow, портативный эмулятор ZX Spectrum на микроконтроллере ESP32. Фото из интернета

Переломный же момент случился с появлением Arduino-совместимых плат на значительно более мощных контроллерах ESP8266 и ESP32, избыточная мощность которых позволила отвязаться от низкого уровня ассемблера и реализовать практически всё, что может захотеть ориентированный на ретро радиолюбитель-ретрокомпьютерщик. Так я окончательно полюбил эту платформу, и она стала базовым решением в моём арсенале для самых разных задач.

Все мои Ардуинки. Ну ладно, почти все

Приобретая те или иные Arduino-совместимые устройства под разные задумки, а также получив немалую помощь со стороны единомышленников в виде подаренных ими контроллеров, я обзавёлся неплохой подборкой этих устройств. Со временем я начал целенаправленно покупать новинки, чтобы оценить их применимость в будущих задумках. Так собралась и целая коллекция разнообразных плат, и опыт работы с ними.

▍ Что такое Arduino


Для начала стоит определиться, что же вообще такое это наше Arduino. Многие полагают, что это всем известная маленькая синяя платка. На самом деле всё несколько сложнее и глубже.

Хорошо всем знакомый логотип

В начале 2000-х годов среди радиолюбителей пользовались популярностью 8-битные микроконтроллеры компании Atmel, в особенности свежего тогда семейства ATmega. Они обладали небольшой ценой и очень неплохими параметрами — 8-128 килобайт Flash-памяти, 2-8 килобайта ОЗУ, впечатляющей производительностью 8-20 MIPS (в пару десятков раз быстрее, чем ZX Spectrum).

Воспоминание разблокировано: самодельный ByteBlaster. Фото из интернета

Но использование голых микроконтроллеров требовало определённых знаний и оборудования. Как минимум, был нужен ISP-программатор, покупной или самодельный, и соответствующее ПО для него. Программирование контроллеров выполнялось на C или ассемблере в IDE AVR Studio от Atmel, базирующейся на Visual Studio и поддерживающей ограниченный набор фирменных программаторов, а их недорогие копии нередко отказывались работать. Практика разработки универсальных библиотек для тех или иных задач в мире встраиваемых систем тогда была довольно ограниченной, и нередко энтузиасты писали свой собственный код для работы со всеми нужными им устройствами.

Придуманная пятью итальянскими студентами-энтузиастами в 2005 году экосистема Arduino предложила простейшую IDE с программами на языке C — так называемыми «скетчами», способ их загрузку в плату через простое подключение к компьютеру обычным USB-проводом. Базовая архитектура скетчей была позаимствована у набирающей в то время популярность платформы Wiring.

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

Arduino IDE и выдача Hello World в последовательный порт

Платформа стартовала в формате стартапа: бесплатная IDE, платные и довольно дорогие фирменные платы, производимые сторонними компаниями по коммерческой лицензии, с отчислениями владельцу торговой марки. В какой-то момент по причине внутренних конфликтов с открытостью платформы возникли проблемы. На этом этапе важным элементом успеха стало появление действительно открытых, полностью совместимых и не таких дорогостоящих клонов, например, Freeduino и Boarduino. Другим важнейшим событием стало появление платы Arduino Nano в 2008 году, ставшей по сути лицом платформы.

Изначально продукция Arduino включала только платы на базе контроллеров AVR ATmega. В 2017 году одноимённая компания, унаследовавшая права на торговую марку после окончания споров между изначальными создателями, заключила соглашение с Arm Holdings. Так появились первые Arduino-совместимые платы на 32-битных микроконтроллерах ARM и их поддержка в IDE. А дальше, благодаря усилиям энтузиастов, пошло-поехало: ESP32, ESP8266, STM8 и STM32, PIC и даже MPS430.

Благодаря тому, что стандартные низкоуровневые интерфейсы, такие как SPI и i2c, были изначально выделены в отдельные API, во многих случаях оказалось возможным использовать уже существующие библиотеки для работы с периферийными устройствами без их переделки под новые платформы, или же эти переделки оказались минимальными. Так, если библиотека для TFT-дисплея конкретного отдельно взятого типа работала через SPI, достаточно заменить реализацию SPI, а логика работы с дисплеем остаётся без изменений.

Собственно платформа Arduino сосредоточена в программной составляющей: загрузчике скетчей, поддержке простой коммуникации с платой в IDE, базовых функциях Wiring (функции setup и loop, стандартный API с вызовами типа delay и digitalWrite), реализованных для каждой из поддерживаемых плат, и всевозможных дополнительных библиотеках, многие из которых доступны для установки непосредственно из IDE. Сами же Arduino-совместимые платы представляют собой более-менее типичные отладочные платы для микроконтроллеров, что и открыло возможность экспансии платформы на технически совершенно другие решения независимых производителей.

▍ Польза и вред


Сила Arduino заключается в простоте программирования контроллеров, в обоих смыслах — и разработки кода, и последующей загрузки скетча в устройство, а также в огромной базе знаний по всем вопросам, связанным с микроконтроллерами и разнообразными компонентами встраиваемой электроники, наработанной комьюнити за почти два десятилетия существования платформы.

Конечно, у Arduino есть и недостатки, много их. Снижение входного порога автоматически означает и рост непонимания пользователями внутреннего устройства, что приводит к различным проблемам, которые могут даже прокрасться в библиотеки. А если что-то идёт не так на уровне библиотеки, шансы разобраться в проблеме резко снижаются. За простоту и удобство приходится платить некоторым расходом ресурсов: ОЗУ и Flash (загрузчик скетчей занимает 0.5-8 килобайт), а также скорости работы за счёт уровней абстракции.

Если же нужно выжать из железа все соки, требуется устранить лишние уровни абстракции и работать с ресурсами микроконтроллера напрямую, из-за чего код становится непереносимым, а сама платформа Arduino редуцируется до загрузчика скетчей. А если для увеличения производительности понадобится прибегнуть к коду на ассемблере, его интеграция внутри Arduino IDE оказывается дико неудобной.

Также можно отметить неудобную, медленную и слишком уж примитивную среду разработки и редактор. Сюда же относится и неэффективный процесс компиляции кода, иногда затягивающийся очень надолго (этим особенно грешат тулчейны для ESP8266 и ESP32). Сообщения об ошибках компиляции сделаны очень неудобно, и если в коде есть ошибка, найти нужную строку иногда непросто.

До кучи, существует две несовместимые ветки IDE (1.8.x и 2.x), а также открытая альтернатива в виде PlatformIO, призванная решить их проблемы — этот зоопарк решений иногда вносит разброд и шатание в доступную информацию о платформе.

▍ Программаторы и драйверы


Сильной стороной платформы Arduino является наличие возможности загрузки пользовательского кода, то есть скетчей, через самый обычный USB-порт компьютера и стандартный кабель, который можно купить в любом магазине. Однако, с этим всё не так просто.

Чтобы обеспечить возможность загрузки без использования отдельного программатора, этот самый программатор установлен на (почти) каждой плате Arduino. Реализован он на базе самого микроконтроллера: в нём изначально прошита специальная программа-загрузчик, так называемый бутлоадер, которая получает от компьютера скетч и выполняет частичную перезапись Flash-памяти пользовательским кодом, оставляя нетронутым сам загрузчик. Эта система прекрасно работает, но имеет парочку подводных камней.

Во-первых, если на плате присутствует опция программирования через USB, возникает вопрос с драйверами. Для работы с платами Arduino прежде всего нужно выяснить, какой преобразователь USB-UART в них применяется, и установить в системе соответствующий драйвер.

Мосты FT232RL, ATmega16u2, CH340G легко отличить друг от друга визуально, по корпусу чипа

Дело в том, что исторически для загрузки скетчей в Arduino применяется обычный последовательный интерфейс UART, и изначально платы программировались через стандартный в те времена COM-порт (интерфейс RS-232). Переход же на USB был осуществлён простым добавлением поверх уже существующей системы микросхемы преобразователя интерфейсов, FT232RL.

Однако, это была довольно дорогая микросхема, и её быстро начали заменять на что попало. Какое-то время вместо неё использовали ещё один контроллер AVR ATmega16u2 на плате, прошивка которого выполняла необходимое преобразование интерфейса. Он был чуть дешевле FT232RL, но тоже достаточно дорогой. Зато его наличие открывало возможности для хаков, связанных с перепрограммированием интерфейса USB в интересах пользователя. Хаки это, однако, превратились в тыкву с исчезновением из продажи плат с такой конфигурацией.

Сейчас же все решения прошлых лет повсеместно вытеснили китайские микросхемы преобразователей, известные как CH340 и CH341 разных версий. Они несколько капризны, и хотя в целом работают стабильно, иногда происходят довольно мистические непонятные вещи, требующие плясок с бубном, перебора кабелей, переустановки драйверов и ручного нажимания кнопки сброса на плате Arduino во время загрузки скетча.

Во-вторых, не все платы имеют опцию программирования через USB. Некоторые виды плат из соображений миниатюризации и достаточно эфемерного удешевления (по факту в рознице они не дешевле) не имеют разъёма USB и элементов преобразователя интерфейса. Для загрузки программы в такие варианты Arduino нужно применять отдельный внешний USB-UART (также известный как USB-to-TTL) адаптер.

Адаптер USB-UART, он же USB-to-TTL

Это копеечная платка, которая существует во множестве разновидностей, включая официальную от самой компании Arduino, и бесчисленные безымянные платы других производителей. На ней установлен примерно такой же USB-UART преобразователь, как на обычных платах Arduino (ATmega16u2 или CH340). Одной стороной платка втыкается в USB, а с другой у неё есть от четырёх до шести контактов, разбросанных в случайном порядке, в зависимости от настроения производителя платки.

Для совмещения конкретных версий Arduino и подобных адаптеров пользователю нужно самостоятельно соорудить подходящий соединительный провод. Всё просто: плюс к плюсу, землю к земле, RX к TX, TX к RX. Иногда нужно перемкнуть джампер питания, так как бывают 5 и 3.3 вольтовые платы. Для работы с этой платкой также нужно найти и установить соответствующий драйвер.

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

ISP разъём и программатор

Помимо штатной загрузки скетчей, возможна ситуация, когда нужно перезаписать вышеупомянутый бутлоадер. Например, если что-то пошло сильно не так, и он повредился, а значит, плата окирпичилась. Для этих целей на многих платах Arduino предусмотрен шестиконтактный разъём для подключения ICSP-программатора. Такие программаторы также продаются отдельно, и внешне очень похожи на USB-UART, но это другое устройство, со своими драйверами. При желании с помощью такого программатора можно устранить слабое звено в лице всей программной инфраструктуры Arduino, и работать с голым железом.

Arduino Uno с микроконтроллером в панельке. Фото из интернета

Наконец, на ранних версиях Arduino Uno применялся микроконтроллер в корпусе DIP, установленный на панельку. Его можно было просто вынуть и прошить в любом универсальном программаторе, например, WizardProg. Это также был неплохой способ получить недорогую готовую отладочную плату, не задействуя программную среду Arduino. Подобные платы есть в продаже и сейчас, но сами контроллеры в DIP-корпусах уже стали раритетом.

▍ Arduino на ATmega


Семейство Arduino-совместимых плат на 8-битных контроллерах AVR ATmega и ATtiny просто огромно. В нём есть множество плат, которые я никогда не встречал ни в продаже, ни в чьих-либо проектах. Это не просто платы разного размера и формы. Они построены на разных версиях ATmega, а это означает не только разный объём памяти, но и набор периферии и возможности.

Самая первая плата — Arduino Serial

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

Год Название Контроллер
2005 Arduino Serial ATmega8
2005 Arduino USB ATmega8
2007 Diecimila ATmega168V
2007 LilyPad ATmega168/328V
2008 Nano ATmega168/328
2008 Mini ATmega168
2008 Mini Pro ATmega328
2008 Duemilanove ATmega168/328
2009 Mega ATmega1280
2010 Fio ATmega328P
2010 Mega 2560 ATmega2560
2010 Uno ATmega328P
2011 Ethernet ATmega328
2011 Mega ADK ATmega2560
2012 Leonardo ATmega32U4
2012 Esplora ATmega32U4
2012 Micro ATmega32U4
2013 Yún ATmega32U4
Моё собственное знакомство с платформой началось с покупки двух плат: Mega 2560 и Uno. Оба экземпляра до сих пор сохранились в моём арсенале и продолжают работать. Nano я начал использовать заметно позже, когда освоил платформу и решил использовать её не только в целях прототипирования, но и как окончательное решение для различных проектов.

▍ Arduino Uno


Начнём с Uno. Это, как говорится, база — одна из наиболее классических плат Arduino, типичный первый шаг. Она удобна для отладки, но не очень-то подходит для встраивания в фактический проект, так как физически довольно большая. Я до сих пор время от времени использую самую первую приобретённую очень давно платку (и уже тогда это был клон без символики Arduino), хотя у меня есть и более современные её версии.

Классический вариант Arduino Uno с USB Type B

Несмотря на название, это далеко не первая плата в линейке Arduino. Она появилась даже позже, чем Nano, и позже многих других, более редких плат — в сентябре 2010 года. Началось всё с Arduino Serial на ATmega8, весьма редкой платы образца 2005 года. В ней уже читались формы будущего Uno, но ещё не было USB. Позже появилась версия этой платы, но с USB, а потом и плата Diecimila на ATmega168, названная так в честь первых десяти тысяч выпущенных Arduino. Uno же стала улучшенным и доработанным во всех отношениях наследником этих плат-предшественников.

Малая часть ассортимента шилдов для Arduino

Uno использует микроконтроллер ATmega328P с тактовой частотой 16 мегагерц, 32 килобайтами Flash-памяти и 4 килобайтами ОЗУ. Есть разъём USB для прошивки, причём в оригинальной версии это древний USB Type B, сейчас встречающийся в основном в принтерах. Есть набортный стабилизатор для питания от 9-вольтового адаптера. Расположение контактных групп стандартизировано, есть множество так называемых «шилдов» (щитов) с дополнительными элементами — плат точно такой же формы, вставляющихся поверх в формате бутерброда и расширяющих возможности платы.

Версии Arduino Uno с разъёмами USB Micro B и Type C

Со временем Uno немного обновлялся. Геометрия, контроллер и даже разводка почти всей площади платы оставались прежними. Менялся только разъём USB: сначала Type B сменился на Micro B, а потом и на актуальный сейчас Type C.

▍ Arduino Mega


Следующая плата, Кракен от мира Ардуино — Arduino Mega. Если памяти и ресурсов не хватает и ничего уже не помогает — выпускайте Кракена!

Arduino Mega

Это значительно более крупная и дорогая плата, которая определённо предназначена для прототипирования, а не встраивания. Она существует в двух версиях, на микроконтроллерах ATmega 1280 и 2560. Когда-то эти чипы были старшими версиями в линейке ATmega. Главное их отличие в большом количестве управляющих линий и в объёме памяти: 8 килобайт ОЗУ и 128 либо 256 килобайт Flash-памяти. Также есть некоторые отличия в периферии.

Концептуально это та же Uno, но для случаев, когда не хватает пинов или памяти. Я почти не пользовался своей Mega 2560, только первое время после приобретения. По сути её возможности оказались избыточными: для встраиваемой электроники редко когда нужно писать так много кода или иметь так много управляющих выводов.

Arduino Mega Pro. Фото из интернета

Mega также существует в версиях с различными разъёмами USB. Для целей встраивания в проекты существует компактная версия Mega Pro, но в моём арсенале такой нет, из-за полного отсутствия задач для неё. Впрочем, есть вероятность, что подобная плата может пригодиться энтузиастам робототехники.

▍ Arduino Nano


Теперь о главном, о том самом, что сегодня всплывает в голове у каждого, слышащего название «Ардуино». За 16 лет своего существования эта маленькая 30-выводная платка стала лицом платформы и основой ровно одного миллиарда электронных самоделок.

Классический вариант Arduino Nano v3 с USB Mini B

Технически Nano представляет собой практически точно то же самое, что и Uno, но в компактном форм-факторе DIP. Если Uno довольно большая плата, которую трудно запихнуть в маленькую самоделку, да и жалко запихивать — Nano в самый раз и по размеру, и по цене.

Изначальная версия платы Nano имела несколько обновлений. Самой ходовой по сей день осталась третья версия на контроллере ATmega328, с 2 килобайтами ОЗУ и 32 килобайтами Flash-памяти. Если быть точнее, наиболее широко распространены китайские клоны Nano v3. Они могут отличаться типом моста USB-UART (сейчас это CH340), и типом разъёма USB.

Arduino Nano с USB Type C

Последнее важно не только из-за соображений удобства, но и габаритов. Изначально на Nano устанавливался разъём USB Mini B, довольно большой и ныне уже почти не встречающийся. Со временем его заменили на Micro, а в последнее время и на Type C. Эти разъёмы имеют разницу в высоте в один миллиметр: Micro самый маленький, потом идут более высокие Type C (6.3 мм) и Mini B (6.6 мм). Этот миллиметр может оказаться важным в некоторых компактных самоделках, например, задавая толщину корпуса.

Помимо разъёмов, менялся и сам контроллер. Существует версия на ATmega168, с 16 килобайтами Flash-памяти, но она довольно редкая, и никакого смысла в её использовании не наблюдается — она не дешевле. Изначальный же ATmega328P в последнее время заменяется на ATmega328PB, который можно обнаружить на платах с разъёмом Type C.

ATmega328P и ATmega328PB, установленные на разные платы Arduino Nano

Эта одна лишняя буковка в обозначении на самом деле скрывает довольно серьёзные отличия во встроенной периферии, и если уровни программной абстракции платформы успешно маскируют различия, проекты с хаками, завязанными на низкий уровень, потеряли совместимость с новыми платами. Подобное случилось, например, с DIY-портативкой Gamebuino — её кастомный загрузчик был разработан для оригинальной версии Arduino Nano и не подходит для современных плат.

Существуют и совсем другие платы семейства Nano, в точно таком же форм-факторе, но с 32-битным ядром ARM и беспроводными интерфейсами: Nano Every, Nano IoT, Nano BLE. Но это уже совсем другая история.

▍ Arduino Pro Mini


Если в самоделке очень важны габариты, и даже Nano уже не помещается, есть альтернатива: Pro Mini.

Это самая маленькая плата на ATmega из широко доступных в продаже. Она примерно аналогична Nano, но не имеет встроенного моста USB-UART — скетч можно залить только с применением внешнего адаптера. За счёт отсутствия лишних компонентов она короче и сильно тоньше, так как нет сильно увеличивающего этот габарит USB-разъёма. Впрочем, и сигнальных линий у этой платы меньше, чем у Nano.

Arduino Pro Mini

При выборе Pro Mini нужно иметь в виду, что существует несколько разновидностей этих плат. На них могут устанавливаться микроконтроллеры ATmega168P и ATmega328P, различающиеся объёмом Flash-памяти, питанием и тактовой частотой.

На плате есть стабилизатор питания и два входа: до и после стабилизатора. На вход до стабилизатора можно (но не нужно) подавать до 12-16 вольт, а на вход после стабилизатора — напряжение, соответствующее версии микроконтроллера, 3.3 или 5 вольт. Стандартная пятивольтовая версия контроллера 328P сохраняет работоспособность в диапазоне напряжений от 2.7 до 5.5 вольт, и если устройству не требуется общаться с внешними компонентами и выдерживать стандартные логические уровни, его вполне можно запитать напрямую от трёх пальчиково-мизинчиковых батареек или одного аккумулятора 18650.

Arduino Pro Mini, вид сзади

Из-за малых размеров платы вместо кварцевого резонатора в Pro Micro применяется малогабаритный керамический резонатор. Это снижает точность и стабильность тактовой частоты, что может иметь значение в некоторых редких случаях, и тогда стоит иметь в виду этот параметр при выборе платы.

Версии плат на контроллерах 168P и 328P могут поставляться в трёхвольтовой версии с тактовой частотой 8 мегагерц или пятивольтовой с тактовой частотой 16 мегагерц. Сам контроллер способен работать на частоте 20 МГц, но это требует замены резонатора. Также версии платы с разной тактовой частотой отличаются прошитым в них бутлоадером.

▍ Arduino Leonardo


Следующая на очереди у нас плата Arduino Leonardo. Визуально почти не отличается от Uno, имеет точно такую же форму и размеры. Стоит при этом сильно дороже. Зачем же она нужна?

Arduino Leonardo, версия с разъёмом Micro USB

Дело в том, что все Arduino оригинальной линейки не поддерживают интерфейс USB. На них есть такой разъём, но он применяется исключительно для загрузки скетчей, и штатно не предназначен для работы с USB-устройствами ни в каком качестве, ни хоста, ни устройства.

Нельзя сказать, что интерфейс USB совершенно чужд Arduino. Есть дополнительные платы (шилды), реализующие поддержку USB Host для подключения различных USB-устройств. Но они стоят денег, увеличивают размер, и для многих задач их применение избыточно.

Для базовых плат существует проект V-USB, реализующий какое-никакое USB1.1-совместимое устройство чисто программными средствами, а в версиях плат с USB-UART мостом на ATmega16u2 был возможен хак с перепрошивкой контроллера моста, чтобы он работал как HID USB устройство. Оба решения применялись энтузиастами в проектах разнообразных нестандартных устройств ввода, в том числе для обычных символьных и музыкальных MIDI-клавиатур.

Leonardo тоже решает проблему реализации USB-устройства, но не программно и не за счёт хаков, а за счёт использования более дорогого контроллера ATmega32u4, который тоже может работать в режиме USB HID устройства. USB Host этот контроллер не поддерживает. Во всех остальных отношениях это то же самое, что и Arduino Uno, с незначительными отличиями, самым заметным из которых является объём ОЗУ: на 512 байт больше стандартных 2 килобайт.

▍ Arduino Pro Micro


Название этой платы очень похоже на Pro Mini, но главная разница заключается не в размере. Даже наоборот, Pro Micro немного покрупнее, чем Pro Mini.

Arduino Pro Micro

Если Mini — это компактная версия Nano, Micro — компактная версия Leonardo. Тоже маленькая платка, поменьше, чем Nano. Правда, из-за того, что ключевым отличием Leonardo является наличие поддержки USB, на плате Pro Micro присутствует USB разъём, а на Mini его нет.

Говоря проще, это компактная плата на ATmega32u4, которая пригождается в ситуациях, где нужны возможности этого контроллера, такие как контроллер USB и ОЗУ чуть большего объёма.

DIY версия Arduboy на Arduino Pro Micro. Фото из интернета

Самым заметным применением этой довольно редкой платы является DIY-версия самодельной портативной игровой консоли Arduboy. В прочих проектах её можно встретить нечасто.

У Mini и Micro существуют аналоги без приставки Pro, имеющие немного другой форм-фактор. Например, простая Micro имеет формат Nano. Но в дикой природе и в продаже эти платы мне никогда не встречались.

▍ Arduino LilyPad


Закончим обзор классических плат вот этим чудом техники. Оно было создано даже раньше Uno и Nano, в 2007 году. И я до сих пор ума не приложу, зачем, и где оно может быть полезно. Официальное обоснование заключается во встраивании электроники в одежду, но, честно говоря, для меня это звучит как горячечный бред.

Lilypad крупным планом. Именно такое впечатление он производит в жизни

Я долго гадал, в чём же фишка такого необычного форм-фактора, и даже решил купить парочку, чтобы посмотреть на них ближе. Тут меня ждал сюрприз. По фотографиям мне казалось, что это довольно маленькая платка, с советскую пятирублёвую монету. В реальности купленные платы оказались шайбой диаметром пять сантиметров с огромными дырками в контактных площадках, аж 3 миллиметра.

В моей коллекции есть только одна разновидность, но LilyPad существует в нескольких версиях. По сути это отдельное семейство плат с общим форм-фактором. Есть варианты с разным количеством контактов, с программированием через USB и через внешний USB-UART адаптер, на контроллерах ATmega168, ATmega328 и даже ATmega32u4 — то есть вариант с набортным USB-хостом, как в Leonardo и Pro Micro.

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

▍ Настоящее и будущее


Классические Ардуино на контроллерах ATmega с нами уже много лет — по меркам IT целую вечность. И, конечно, они постепенно устаревают. Сейчас их мощности выглядят значительно скромнее, нежели в начале их пути, когда альтернативы ещё не появились. Скорость, память, периферия, возможности конфигурации — с точки зрения человека, искушённого Raspberry Pi, Teensy и прочими мощными устройствами, всего уже маловато.

Но есть и плюсы. Прежде всего, это работа в реальном времени. Скорость выполнения кода не зависит от комбинации сложных факторов. Каждая команда ядра выполняется один-два такта, и коду не мешают никакие скрытые системные процессы. Запись и чтение портов GPIO сразу же даёт соответствующую реакцию, так как нет внутреннего мультиплексирования шин. Есть прерывания с хорошим и стабильным временем реакции.

Ну и, конечно, стоимость — как любит говорить Алекс Гайвер, по цене шаурмы. И хотя по этому параметру платы на ESP8266 и ESP32 уже догнали Arduino Nano, предлагая при этом свои неоспоримые преимущества, всё же в мире ещё не скоро иссякнут простые задачи, для решения возможностей скромной классической Arduino Nano более чем достаточно.

▍ Продолжение следует


Пока мы рассмотрели только основные особенности платформы и платы оригинальной серии. Но только лишь ими дело не ограничивается. На очереди ещё много интересного!

© 2024 ООО «МТ ФИНАНС»

Telegram-канал со скидками, розыгрышами призов и новостями IT ?

Комментарии (52)


  1. LanskoyGames
    04.11.2024 13:19

    Зачем, упоминание про RuVDS? Готовится новый фемтоспутник на MCU?


    1. LuckyStarr
      04.11.2024 13:19

      Затем, что это блог компании?


  1. vedddd
    04.11.2024 13:19

    Достаточно давно использую под разную мелкую автоматизацию
    платы на основе ATmega328 и ATmega2560 с гальванической развязкой по USB.
    Даже название им было придумано SafeDuino ещё в 2010 году, но вот дальше
    использования под свои свои задачи дело не пошло.
    И да микроконтроллеры ATmega328/2560 конечно же устарели причём ещё лет 10-20 назад,
    но вот из-за простоты их программирования и высокой надёжности их судьба уже
    похожа на таймер NE555, который по временнЫм меркам современной электроники вечен.

    Вот мои платы SafeDuino MEGA 328 и SafeDuino MEGA 2560

    https://drive.google.com/file/d/1hWr_M0uHy77NYrbYnCi_U0TSU_BmYyu-/view?usp=sharing

    https://drive.google.com/file/d/1nWC4PiTc2E2BlAhaDD2i6myoVGcKMUJ_/view?usp=sharing


    1. LAutour
      04.11.2024 13:19

      но вот из-за простоты их программирования и высокой надёжности

      Особенно их "простота и надежность" вспоминается после случайно прошитых не тех битов конфигурации.


      1. DrunkenMonster
        04.11.2024 13:19

        о да, пока учился на первых 2 курсах легким нажатием мыши "закрыл" наверно шт. 5 МК


  1. geher
    04.11.2024 13:19

    Придуманная пятью итальянскими студентами-энтузиастами в 2005 году экосистема Arduino предложила простейшую IDE с программами на языке C

    А разве у них был когда-то С? Я видел версии Arduino IDE только с плюсами. Впрочем, баловаться этим я начал достаточно поздно, мог пропустить.

    Pro Mini

    Pro Micro

    Насколько я помню, каноничные ардуинки именовались просто мини и микро, без всяких там про. А про стали добавлять уже в клонах.

    Arduino LilyPad

    Оригиналы вроде уже сняли с производства. По крайней мере на arduino.cc их давно не видать.

    Для этих целей на многих платах Arduino предусмотрен шестиконтактный разъём для подключения ICSP-программатора

    А еще через этот разъем можно заливать скетчи. Сам программатор можно было сделать из другой ардуины, соединив соответствующим образом пины SPI интерфейсов ардуин программатора и прошиваемой (собственно SPI микроконтроллера на плате и был заведен на этот разъем), предварительно прошив на ардуино-программатор скетч программатора (был в комплекте примеров Arduino IDE). На некоторых платах было важно не перепутать ISP разъем. Второй использовался для прошивки USB-UART преобразователя.


  1. vvm13xx
    04.11.2024 13:19

    ATmega32u4 используют в MMJoy2 https://forum.il2sturmovik.ru/topic/4664-mmjoy2-бесплатная-прошивка-и-софт-для-самодельного-контроллера-джойстика/ . Для меня это самое заметное использование. Клавиатуры/мыши/трекопойнты/etc тоже вполне можно делать. Эмуляцией клавиатуры можно изобразить "хакерский инструмент", когда вы вставляете якобы флешку, а она типа-нажимает-буквы.


  1. tigreavecdesailes
    04.11.2024 13:19

    Предпочитаю использовать "чистые" атмеги с avr-libc, которые вместе с библиотеками spi/i2c практически дают комфорт ардуино.
    Но что в ардуино действительно мне понравилось и я это перетянул себе, на "чистые" атмеги - это загрузчик urboot.

    Он занимает полкилобайта и используется для прошивки контроллера по UART. И плюс в том, что на реальном устройстве не надо делать на плате SPI гребенку для программирования. Достаточно вывести rx/tx UARTa, это на одну ножку меньше SPI, а также позволяет после загрузки контроллера по этому же UARTу смотреть лог!
    Аvrdude этот загрузчик поддерживает, а через dtr/cts UARTа может ребутить МК чтобы процедура прошивки была полностью автоматическая.

    Да, есть риск, что контроллер однажды "ёкнется" так, что загрузчик будет сломан и понадобится прошивка по SPI и придётся его выпаивать... но вероятность этого небольшая. Загрузчик сам себя никогда не перетрёт, а если "ёкнется" флэш контроллера, то это уже исключительная ситуация сама по себе.


  1. ABRogov
    04.11.2024 13:19

    В свое время из-за разного скепсиса в сети прошел мимо ардуины, и делал устройства на ассемблере АВР... потом все-таки решил попробовать и жизнь изменилась на до и после. Начинал тоже с UNO/Nano, потом сразу перешел на Due, все-таки 82 МГц. Затем попробовал STM32 bluepill и понеслось: F103, F303, F343, G431, G474 уже на своих платах того же формат, и всё из среды ардуины. Критичные функции на регистрах, а просто индикацию можно и digitalWrite() сделать. Лично мне нравится её компактность, бесплатность и простота организации. Ну не нравится мне код засоренный сотнями <User code begins> <User code ends>.

    И вы таки не поверите, но за 10 лет я так ни разу и не воспользовался отладчиком. Из отладки только консоль и осциллограф. Оказалось, что если не понимаешь как оно работает, то лучше разобраться, чем пытаться подгонять.


    1. shiru8bit Автор
      04.11.2024 13:19

      Я тоже ни разу не пользовался отладчиком на микроконтроллерах. На ПК и ретрокомпьютерах нечасто, но пользуюсь, а на МК всегда только консоль и осциллограф.


    1. LAutour
      04.11.2024 13:19

      Без отладчика тяжело выявлять ошибки вызванные неправильной компиляцией или сбоями железа.


    1. Kudriavyi
      04.11.2024 13:19

      Без отладчика, конечно, можно жить. Но когда я перешел на стм32 и купил логический анализатор (настоятельно рекомендую логический анализатор), то диву давался, как я вообще раньше жил!


      1. shiru8bit Автор
        04.11.2024 13:19

        А вот логический анализатор действительно очень крутая штука. Сейчас чиню одну железку на 580ВМ80, и он крайне пригодился бы. Кажется, пора обзавестись.


        1. randomsimplenumber
          04.11.2024 13:19

          Осциллограф. Нет сигнала - обрыв, нет логических уровней - что то подкорочено.


          1. shiru8bit Автор
            04.11.2024 13:19

            Есть сигналы и уровни.


        1. DrunkenMonster
          04.11.2024 13:19

          мой совет брать сразу DSLogic. Удовольствие не дешевое, но его функционал, частота дискретизации, количество каналов не сравнимы с китайскими ноунеймами. Имеется такой на работе - очень хороший помощник


          1. LAutour
            04.11.2024 13:19

            Из интересного еще есть ALIENTEK DL16 по примерно той же цене и возможностям.


    1. NutsUnderline
      04.11.2024 13:19

      за 10 лет я так ни разу и не воспользовался отладчиком

      тогда возможно будет еще другое до и после. на avr отладка не очень удобная была, по сути 2-3 интерфейса, но уже подтянули. Но для arm все очень гибко. Плюс, в arduino 2 уже какую то отладку прикрутили.


    1. DrunkenMonster
      04.11.2024 13:19

      иногда без отладчика очень тяжело понять где произошел сбой. тот же assert_fault() очень неплохо помогает в отладки новых больших проектов, когда код валится где-то в процессе обработки внешних/внутренних данных или прерываний. А при настройке модуля в составе комплекса на пре-продакшине я часто использую SWO для вывода критичной информации в порт.


      1. nafikovr
        04.11.2024 13:19

        в ассерте в принципе можно сделать вывод чего либо в консоль, если совсем припрет. но соглашусь, полноценную отладку оно не заменяет.


    1. nafikovr
      04.11.2024 13:19

      Думаю пора отвыкать от старого подхода и принимать современные реалии. Отладка в ARM близка к десктопной и позволяет провернуть финты, которые иным образом невозможны. Из крайне полезного - работа с памятью на лету и слежение за доступом к памяти (watchpoint). Про доступ к регистрам периферии вообще молчу, оно и в AVR доступно.


  1. CitizenOfDreams
    04.11.2024 13:19

    От ржавых германиевых транзисторов МП42

    Это "Жигули" были ржавыми, а у МП42 были красивые блестящие корпуса. В одно время даже покрашенные, причем краска выглядела как бы не лучше, чем на "Жигулях".


    1. shiru8bit Автор
      04.11.2024 13:19

      Доступные мне в то время транзисторы находились на помойке, поэтому ржавчина — историческая правда.


  1. voldemar_d
    04.11.2024 13:19

    Есть еще такое чудо - Arduino beetle. Нашел его китайский клон, тоже с монету размерами, но квадратный и с USB-разъемом, как у флешки. По сути, это еще более уменьшенный Arduino Pro Micro на 32u4, т.е. клон Leonardo.

    Не знаю, есть ли в нем смысл сейчас, когда примерно столько же стоит Raspberri Pi Pico.

    Для меня Arduino Pro Micro оказался хорош тем, что при подключении по USB к компьютеру он может изображать MIDI-устройство, т.е. на него можно играть музыку из всяких секвенсоров вроде Cakewalk и делать синтезаторы.

    Кстати, знает кто-нибудь - есть ли другие Arduino-подобные платы, которые умеют из себя MIDI-устройство по USB изображать? Или библиотеки для каких-нибудь Raspberri Pi или STM?


    1. shiru8bit Автор
      04.11.2024 13:19

      Ого, не встречал такой. В таком же формате есть платы от Digispark на ATtiny, про них будет во второй части. Они умеют изображать USB HID, но реализация программная. С USB есть ещё ESP32 S2 и S3, они могут принимать MIDI.


      1. LAutour
        04.11.2024 13:19

         Digispark на ATtiny

        Тот еще ужас - у меня на нескольких платах слетал загрузчик после нескольких перепрошивок. Доступные ножки в программе использовал все, поэтому делал задержку в начале кода - но не спасло.


      1. svitoglad
        04.11.2024 13:19

        Есть еще Arduino ATTO.


    1. ptr128
      04.11.2024 13:19

      Например, ESP32

      У него еще и I2S имеется.


      1. voldemar_d
        04.11.2024 13:19

        В этом проекте, если я правильно понял, MIDI-команды отправляются по USB. А принимать их по USB оно умеет?


        1. ptr128
          04.11.2024 13:19

          Там написано, что посылать MIDI и определяться, как MIDI контроллер он может не только по USB, но еще и про WiFi через WebSocket или через BLE. Про прием ничего не написано.

          Принимать MIDI проще. Например.


    1. NutsUnderline
      04.11.2024 13:19

      так наверное везде где есть usb есть реализация midi. тот же самый pro micro может использовать для этого библиотеку lufa а она - для нескольких контроллеров atmel, которые можно купить распаяныt на небольшие платы.

      элементарный гуглинг "rp2040 midi synth", "esp32 midi synth", "stm32 midi synth" дает массу ссылок, есть не только синтезаторы но и всякие прочие штуки в тему


      1. voldemar_d
        04.11.2024 13:19

        Спасибо, поизучаю.


    1. AlexanderS
      04.11.2024 13:19

      Я пару лет назад искал подобную плату с одной-двумя распаянными кнопками. Ничего толком не нашёл кроме Digispark, но у него памяти мало. В результате купил на али металлические bad-usb, но кнопку туда сделать руки так и не дошли. А вот в вашем варианте кнопочку можно приклеить с обратной стороны платы!


      1. voldemar_d
        04.11.2024 13:19

        Можно, только как плату подключать? Или гребенку с контактами распаять не снизу, а сверху?


        1. AlexanderS
          04.11.2024 13:19

          Подключать что? Digispark? Можно запитывать от внешнего питания и, насколько я понимаю, прошивать через ISP.


          1. voldemar_d
            04.11.2024 13:19

            Я про Arduino beetle. Если на него снизу припаять кнопки, к пинам нужные сигналы как подключить? Обычно такую плату через гребёнку к чему-то ещё подключают, вставляя в разъем. Разъем тоже снизу обычно.


            1. AlexanderS
              04.11.2024 13:19

              Это вопрос уже технический. Можно проводки подпаивать. Можно использовать самодельную гребенку с подпружиненными контактами - просто прислоняем её и давим слегка. Можно в отверстия насовать кабели с пинами типа dupont, рукой давим вбок чтобы контакт не рвался на время прошивки. Решения, конечно, сопливые, но это как всегда временное, на пару раз и всё такое)


              1. voldemar_d
                04.11.2024 13:19

                Не проще кнопку на проводках прицепить? :)


  1. DrunkenMonster
    04.11.2024 13:19

    Имхо, всегда считал arduino игрушкой для школьников. Да она проста в понимании, но когда ты понимаешь как работает МК и что происходит когда ты пользуешься ее благами лично у меня происходит когнитивный диссонанс. 4 года из 5 мне в институте рассказывали как правильно строить проекты и писать код для МК и ПЛИС, используя ресурсы по максимуму, в частности для AVR, и тут тебе подкидывают то, с чем разберется даже пятиклассник. Кстати, однажды я уже уперся в ресурсы МК при компиляции проекта. Тогда меня попросили сделать проект для квест-комнаты, где было необходимо по определенной логике управлять 4 RGB-лентами по 100 диодов в каждой, да еще и с эффектами. В итоге пришлось доставать с полки usb-isp программатор, чистить кристалл и переписывать проект в WinAvr с ассемблерными вставками, т.к. заказчик уперся и не хотел тратиться на что-то иное.


    1. NutsUnderline
      04.11.2024 13:19

      заказчик уперся и не хотел тратиться на что-то иное

      здесь речь идет про единичный экземпляр или огромную серию? если единичную то стоимость работы должна быть близкой к 0, иначе единичную ардуику на atmel банально дешевле заменить на ардуинку на stm32, и даже код особо не переписывать


      1. DrunkenMonster
        04.11.2024 13:19

        именно что единичный. Все квесты обычно же делаются 1 комнатой. По истечении какого-то времени потом переделываются.

        А вот на stm32 я все-таки смог его недавно уговорить перейти, разница не сильно велика в цене, камня f103 вполне пока что хватает на загадки, а скорость написания проектов и отладки лично для меня поменялись в лучшую сторону.

        А пишу все что на работе, что дома в Eclipse с LL через регистры. Красота, порядок, а главное меньшее время на отладку.


        1. randomsimplenumber
          04.11.2024 13:19

          А вот на stm32 я все-таки смог его недавно уговорить перейти, разница не сильно велика в цене,

          Разница в цене - сравнима с чашкой кофе. Без булочки даже. Моя не понимать. Или это был элемент квеста, только для программиста? ;)


          1. DrunkenMonster
            04.11.2024 13:19

            типа того :) а вообще весомым аргументом стало еще то, что все ардуины которые закупались для квестов просто кончились и новый квест перешел на STM


  1. badangel
    04.11.2024 13:19

    Еще nano от uno отличается загрузчиком, если залить загрузчик uno в nano, можно выиграть 1.5кб памяти, получить работающий watchdog и быстрый старт платы. Загрузчик nano две секунды держит reset при включении.


    1. shiru8bit Автор
      04.11.2024 13:19

      Прикольно, не знал, спасибо. Медленный старт на многих платах давно напрягает.


      1. voldemar_d
        04.11.2024 13:19

        Насколько медленный? Arduino Uno/Nano/Micro почти мгновенно стартуют.


        1. shiru8bit Автор
          04.11.2024 13:19

          Все Pro Micro, которые у меня есть (десяток, покупал в разных местах) стартуют две секунды. BluePill с обычным загрузчиком стартуют секунд пять, но там есть FastBoot версия загрузчика.


  1. ptr128
    04.11.2024 13:19

    платы на ESP8266 и ESP32 уже догнали Arduino Nano

    Перегнали. По крайней мере на AliExpress. Если на Arduino Nano минимальная цена сейчас от 210 рублей с доставкой, то ESP32-C3 SuperMini можно купить за 190 рублей с доставкой. Ну а сравнивать их по возможностям бессмысленно.

    Для тех случаев, когда действительно нужен восьмибитный МК, лучше ориентироваться на существенно более дешевый Padauk. Например, даже в Чип и Дип можно купить PFS154-S08 по 20 рублей, а PFS154-S16 по 53 рубля. Про OTP вообще молчу, там же PMS150C-U06 по 11 рублей.


  1. kalapanga
    04.11.2024 13:19

    Коробочка какая удачная - как специально под UNO! Где такую брали? :) Или самопечать?


    1. shiru8bit Автор
      04.11.2024 13:19

      В Леруа-Лемане, недавно, они там ещё есть, под названием органайзер Фолди 31x3.6x19. Да, очень удачно подошло, раньше все эти платы валялись у меня по разным углам, и вот наконец удалось их компактно сложить в одну коробку.


  1. ABRogov
    04.11.2024 13:19

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

    Скрытый текст


    1. shiru8bit Автор
      04.11.2024 13:19

      Да, согласен, упустил этот момент. Добавил хотя бы эту одну фотографию.