Про Arduino

Писал другой текст, обнаружил, что слишком много объёма про Arduino, выделил в отдельное эссе. Тема, естественно, джихадная, потому заранее избавлюсь от части нападок: нет, я не впервые сталкиваюсь с Arduino, да, через мои руки несколько моделей прошло, да, положенные новичкам проекты делал, после чего железки отдал желающим и о платформе забыл. Но в 2018 году решил вспомнить, посмотреть заново уже на фоне достижений конкурентов.
N лет назад Arduino — платки на базе Atmel AVR. Спустя эти N лет появились как родные платы на ARM Cortex-M, так и мегалиард клонов и фиг поймёшь чего, что завершается на -duino и сделано в гараже дяди Ляо. Удобства изложения ради ограничусь в эссе решениями на Atmel AVR, конкретнее, на ATmega2560 как на топ ветки (если не ошибаюсь). Текущая ревизия платы Arduino Mega 2560 v3: arduino.cc. Цена в рознице Москвы озадачивает. Часть магазинов продаёт модель за около 900 рублей, часть за около 3500 рублей. Возможно, первый вариант паяли китайцы, а второй итальянцы. Во всяком случае, у итальянских официалов $38 на сайте, что наводит на размышления о происхождении 900-рублёвых плат.
a000067_featured_1_
Arduino Mega 2560 v3
В качестве оппонента выбрал STM32 Nucleo-F767ZI — топовую на данный момент плату линейки, с которой STMicroelectronics вышла в 2014 году на рынок Arduino-DIY. На борту каждой платы (а их сейчас 42, Карл) один из Cortex’ов, но צימעס‏‎ в том, что по пинам Nucleo совместимы с шилдами Arduino Uno V3. Цена F767ZI в рознице Москвы на уровне 2300 рублей.
nucleo-f767zi
STM32 Nucleo-F767ZI
Что сравниваем? Сам MCU (архитектуру и «мощность»). Обвес на плате. Экосистема: даташиты, книги, библиотеки, IDE, сообщество. Платы расширения. Потенциал.

Но сначала о пользователях. Что Arduino, что Nucleo — решения для обучающихся энтузиастов и ленивых на паяльник мейкеров. Чуваки, на форумах яростно дерущиеся на тему избыточности этих плат… ну, да, они избыточны для профессионального использования. Профессионалы, как понимаю, и не используют (разве что контора закупит коробку для экспериментов), у них свои линейки продуктов. Чему учатся на Arduino / Nucleo?
Во-первых, простой работе с железом. Тут макетка, там перемычка, здесь резистор с диодом, туда LCD и датчик влажности. Остаётся прокинуть к плате и по готовым проектам подкрутить, чтобы всё весело вертелось и радовало глаз. Я у мамы инженер. Часть специалистов относятся к такому занятию с иронией, да и напрасно. Именно такие простые действия пробивают порог «магии» внутри корпуса компьютеров, убирают страх работы руками, ну и вообще дико прикольно, когда ты чуть ли не сам своими руками заставил железку моргать лампочками.
Во-вторых, началу и завершению проектов. До меня не сразу дошло, но потом понял. У многих людей нет в жизни того, что есть у инженеров / разработчиков — проектов. Спланировать, начать, сделать, ввести в строй. Нами это воспринимается как естественные итерации в жизни, а у вашего соседа Пети этих итераций нет. Он просто живёт и просто работает, при этом испытывая тягу делать что-то законченное. Соответственно, бесчисленные каталоги DIY-проектов позволяют тягу удовлетворить, не убившись на год в углу балкона.
В-третьих, ассемблеру. В [Larry D. Pyeatt. Modern Assembly Language Programming with the ARM Processor. Newnes, 2016] автор на страницу толково объяснил, я перескажу кратко. Ассемблер x86 большой, сложный и страшный. Новички (да и не только) в нём быстро тонут, в лучшем случае осваивая маленькое подмножество команд без особой пользы для головы. Сами процессоры x86 тоже слишком сложные, чтобы их можно было комфортно изучить. Потому лучшим выбором являются относительно простые микроконтроллеры, на примере которых можно и RISC-процессоры освоить, и ассемблер, и успеть без испуга всё это в голову за курс уложить, да ещё и сделать что-то работающее.
В-четвёртых, низкоуровневому программированию [на C/C++]. Не понимаю, зачем извращаться и для таких железочек писать на каком-нибудь JavaScript (примером Iskra JS), самому себе укорачивая кайф вполовину. Как если бы выйти на пробежку, но сидеть в тележке, которую таскают вокруг поля. Как по мне, пустая трата головы и времени, если не хардкор.
Тут же замечу, что учиться делать embedded лучше не на AVR / ARM, для этого сектора есть замечательные PIC, они же почти идеальны для будущих простых IoT-экспериментов.

Что с MCU? Смотрим:

  • ATmega2560 (Arduino) — AVR, 8-битный, 16MHz, 256KB flash, 8KB SRAM.
  • STM32F767ZI (Nucleo) — ARM (Cortex-M7), 32-битный, 216MHz, 2MB flash, 512KB SRAM.

Бенчмарки MIPS/DMIPS гуляют по сети, числа не абсолютные, но везде одно — STM32F767ZI дальше ATmega2560 минимум на порядок, а если взять пару вырожденных случаев, получается что-то вроде 16 MIPS ATmega и 450 MIPS STM32. Чёт раньше не так ясно видел, насколько железно отстаёт AVR. Ну ок, теперь виднее.

Что с обвесом? Платы почти равны. Отмечу только наличие Ethernet у Nucleo (у Arduino, соответственно, его нет), ну и у Nucleo [заметно] больше пинов.
Что с экосистемой? Вот тут Arduino отрывается на десять корпусов. Я всё никак не мог понять, почему за настолько слабое и простенькое железо берут денег как за небольшой космолёт, но после изучения этого пункта понял: при покупке Arduino вы платите налог на обилие информации, на маркетинг, на конференции, на книги, наклейки, каталоги проектов, мейкерский движняк. Фактически вы словно попадаете в хорошо оборудованный первый класс — сразу с комплектом нужных учебников, с готовой партой, с толерантными и терпеливыми учителями.
Что с платами расширения? У Arduino гораздо больше доступных. Собственно, их и просто так больше-больше. Было бы. Но напомню: Nucleo совместим с Uno-шилдами. Вопрос их реального использования (наличие библиотек, удобство программирования с ними) открыт, но на уровне железа теперь такого отрыва нет.
Что с потенциалом? Ну… Я раньше не понимал причины, по которым был выбран AVR для Arduino. Читал любопытное мнение: AVR был выбран потому, что в те времена не было ARM’ов в DIP (а платформа предполагалась и для самосборки), а у PIC не было нормального общедоступного тулчейна. Похоже на правду. Фигня в том, что Arduino AVR мне кажется эдаким… заповедником экспериментов и учёбы, после которого всё равно надо будет переучиваться. Мало того, что сами железки по возможностям куцые относительно современных конкурентов, так и в промышленности и в практике массово используются другие решения. Учить AVR для того, чтобы сигнализацию потом делать на PIC, а сервер видеонаблюдения на ARM?
Наконец, смотрю на них… Ок, большинство программ маленькие и уместятся в десяток килобайтов. Но что делать, когда захочется большего? Я в первые же пять минут могу придумать десяток проектов, в которых найду, чем заполнить даже 512KB. В следующие пять минут ещё десяток, в которых потребуется быстрый процессор.

В итоге сам я от Arduino отказался. Это очень сопровождаемая учебная платформа, которая замечательно помогает сделать начинающим первый шаг и помогает избавиться от страха перед магическими технологиями. Что-то вроде локаций-песочниц в RPG — в противниках бабочки, соседи не дерутся, пастораль и благодать. Через час игры уходишь оттуда и не возвращаешься, выбросив тонкую рубашку первого уровня и прутик, что выдали вместо меча.
Да, ARM и PIC сложнее. Но в 2018 году многие былые сложности уже решены. Вчера я за пару часов осилил то, на что раньше могла уйти неделя — собрал в Ubuntu / Eclipse проект и залил его по USB в Nucleo. Т.е. да, всё так же раздражает, что на такую простую последовательность операций убил часы, но блин, раньше и этого не было, всё работало под Windows, остальные рыдали.
Литературы на пару порядков меньше. Но нужная литература есть. Вам не нужны десять мануалов по ассемблеру, достаточно пары-тройки имеющихся. Осилил? Всё, дальше уже по накатанной сам. Проекты при желании можно тырить из мира Arduino. Сообщества ARM и PIC тоже старые и большие, информации накопили много. В общем, в какой-то мере изобилие Arduino компенсируется достаточным минимализмом ARM’ов. Фраза звучит как «хорошо, что книг мало» (что нелепо), но так я пытаюсь сформулировать другое: по ARM есть хорошие книги, для обучения их хватает.
В общем, как-то фиг знает. Arduino тупиковая ветвь учёбы. Счётные палочки мейкерства. Есть чуваки, умудряющиеся этими палочками пейзажи рисовать, зажав коленом, но такой фанатизм не для всех.