habrahabr

Все мои Ардуинки: часть первая, восьмибитные на ATmega

  • среда, 6 ноября 2024 г. в 00:00:10
https://habr.com/ru/companies/ruvds/articles/854858/

В наши дни трудно найти связанного с электроникой человека, который не слышал бы про 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.

Год Название Контроллер
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 💻