next.module: публичное обсуждение и рекомендации автору
Наткнулся я тут недавно на ролик презентации проекта next.module — это продолжение задумки автора Руслана, известного по замечательному проекту «Электроника в объективе», о которой он год назад рассказал в статье на Хабре.
То есть проект развивается и уже перешёл в фазу создания реальных прототипов. Это не может не радовать — как говорится, больше проектов хороших и разных, тем более, что автор на деле доказал свою компетентность и «креативность» (в хорошем смысле этого слова).
Но я, со своей колокольни, вижу кучу странностей в концепции и архитектуре next.module и постараюсь рассказать о них в этой статье. Возможно что-то из моих замечаний поможет избежать проблем в будущем для этого многообещающего проекта.
Всех желающих также приглашаю высказать своё мнение в комментах.
❯ Концепция
Прежде всего нужно определиться с концепцией того, что же собственно разрабатывается и чётко эту концепцию сформулировать. Если это система прототипирования, наподобие Arduino — это одно, если это модульная система для создания устройств в корпусе — это второе, если эта система предполагает практическое применение для реальной автоматизации — это третье.
Если это продукт для профессионалов, способных работать в ESP32 SDK — это одно, если это продукт для массового рынка (а-ля Arduino) — это совсем другое.
От выбора той или иной концепции зависят и все последующие принимаемые архитектурные и маркетинговые решения и успешность самого проекта в целом.
❯ Геометрия
Принцип соединения путём установки одного модуля в другой очень быстро (после соединения 3-4 модулей) приводит к тому, что вся конструкция приобретает «вертикальный» формат в виде столбика. И чем больше модулей, тем больше этот «гаджет» похож на отпиленный кусок квадратного бруса. Вертикально его не поставишь, горизонтально это тоже будет смотреться несуразно.
Такая «столбиковая» компоновка девайсов широко используется, только не в человеческой цивилизации и не на планете Земля
Отсюда вывод: если уж использовать 1х формат компоновки модулей, то это должно быть соединение максимум 3-4 модулей и никак не больше.
Отсюда же и второй вывод: для всей системы базовыми должны быть горизонтальные компоновки 2х, 4х, 6х и так далее.
Уже лучше, возможно стоит подумать о прямоугольных модулях на два квадрата, без двух центральных разъёмов
❯ Корпус и конструкция
Если посмотреть на Lego, то можно обнаружить, что от принципа создания общего из однотипных «кирпичиков» почти ничего не осталось: практически все наборы чуть ли не на 80 процентов комплектуются кастомными деталями для этого конкретного набора.
Рано или поздно next.module придётся отойти от «стройной» концепции квадратных модулей и начать делать «нестандартные» по геометрии детали, например, дисплейные платы для установки в корпус. И лучше быть к этому готовым заранее и заранее закладывать это в дизайн системы.
Корпуса должны иметь место для установки стандартных квадратных сборок, но сами при этом иметь привлекательный дизайн и посадочные места для «внешних» расширений, наподобие дисплейной платы или платы интерфейсов.
❯ Платы
На мой взгляд, в размерах плат экосистемы next.module 42х42 мм заложена бомба замедленного действия, которая уже сейчас является тормозом для развития и успешности проекта и грозит похоронить его в будущем.
42х42 это критически мало. Если посмотреть презентационное видео, то на нём хорошо видно, что автор (задумчиво) крутит на экране рендеры модулей и через раз говорит, что тут не уместилось то, а тут не уместилось это и так далее чуть ли не по каждому модулю.
Даже если просто посмотреть на сами модули, то невооружённым глазом видно, что они несбалансированны — площадь вспомогательных элементов (разъёмы, отверстия, скругления) чуть ли не больше полезной площади модуля. А сама эта полезная площадь откровенно мала уже сейчас даже для текущих типовых элементов.
Всё уже заполнено под завязку, больше ничего не добавишь, даже если очень надо — остаются только костыли
Обычно, если в архитектуре технической системы допущены косяки, то со временем приходится применять всё больше и больше костылей и в конце концов система превращается в один большой костыль. Здесь же косяки вылезают прямо на старте, очевидно, что дальше будет только хуже.
И здесь каждый миллиметр играет роль: 44х44 лучше чем 42х42, 46х46 лучше чем 44х44, 48х48 лучше чем 46х46 и т. д. Оптимальным размером будет скорее всего что-то вроде 48х48, 50х50 или 52х52.
Сюда же можно отнести высоту модулей — с каждым лишним миллиметром типовой высоты платы возрастают возможности по установке различных габаритных деталей. А автору уже сейчас приходится пропиливать платы для габаритных деталей и декларировать ограничения для установки негабаритных модулей в стойку.
❯ Архитектура
Смотрел я видео презентации и как только дело дошло до фраз «модули можно поворачивать на 180 градусов», «маркировка и назначение GPIO совпадают, только если модуль ориентирован одинаково с модулем MCU» и «тут перемычки, тут паяем, а тут — не паяем», меня посетило сильнейшее дежавю: где-то я всё это уже видел…
А видел я это на проекте Lavritech, где я уже два года наблюдаю ровно то же самое: создана многослойная архитектура со множеством слоёв хардверной абстракции, которая позволяет творить чудеса на плате, но проблема только в том, что модель этой архитектуры существует только в голове у автора, и нескольких адептов, наподобие меня. Что драматическим образом сказывается на популярности проекта — народ просто не понимает как это работает и что со всем этим делать (что не удивительно).
Тут вступают в противоречие две вещи: соблазн автора добавить «ещё одну перемычку» для «ещё одной крутой функции» и простота и прозрачность использования системы для конечного пользователя (что напрямую влияет на её популярность).
Поэтому, мой добрый совет: никаких «переворотов платы на 180 градусов» и никаких «маркировка и назначение GPIO совпадают только если вы правильно вставили модуль», даже если это несколько ограничит функционал. Наоборот, на платах должен быть ключ, однозначно определяющий правильную её установку.
Иначе «переворачивать платы на 180 градусов» автор будет в одиночестве или в компании 10-20 адептов (вместо 10-20 миллионов заинтересованных пользователей во всём мире).
❯ Шины
На соединительные разъёмы выведен более-менее вменяемый набор интерфейсов, GPIO и питающие напряжения 3,3 и 5 В. Если немного увеличить площадь платы, как было описано выше, то можно либо добавить пины 12 В в разъёмы (возможно не по одному, а по 2-3-4 пина) или дополнительно установить какие-то детали, например кнопки, на боковую поверхность модуля.
Всем, кому идея повернуть эту конструкцию на 180 градусов в массовом продукте кажется удачной, рекомендуется подумать ещё раз
Наличие «легитимной» передачи 12 В на модули через разъёмы, без костылей в виде шлейфов, благоприятно скажется на всей архитектуре системы, её внешнем виде и простоте использования.
❯ Контакты
По своему обширному опыту могу сказать, что соединение «а-ля шилд Ардуино» с тонкими и длинными пинами имеют тенденцию к потере контакта. У меня много подобных бутербродов, например, трёхэтажный Mega + Ethernet Shield + GSM Shield и каждый раз работу с ним приходится начинать с пересборки всей конструкции (иначе система не стартует из-за пропадания контактов между шилдами). Иногда пересобирать приходится по несколько раз и это полный кошмар и совершенно неприемлемо.
Поэтому, если уж делать всю систему по принципу «бутерброда», то вопрос с межплатными соединениями нужно рассматривать отдельно и очень внимательно: «просто как в Ардуино» точно не пойдёт — нужны либо «толстые квадратные» пины, либо покрытие их чем-то вроде золотого напыления, обеспечивающее надёжный контакт.
❯ Внешние интерфейсы
Без внешних интерфейсов никуда — рано или поздно они точно понадобятся. Нужно предусмотреть платы — переходники (куда вставляются шлейфы) от бутербродов к внешним колодкам.
Что и как выводить — вопрос дискуссионный, как минимум, набор разных напряжений, земля, I2C, SPI, GPIO/UART, возможно отдельный разъём для RS485.
❯ MCU
В качестве ядра системы автор презентует ESP32S3 и процессорные сборки MicroMod. Так и хочется спросить, а нельзя ли что-нибудь попроще? и поближе к народу, наподобие «простых» ESP32 или ESP8266? Для которых есть целый вагон готовых прошивок, кода и программных наработок у всех, кто занимается этой темой.
MicroMod? Ну, ок, только верните, пожалуйста, простые и привычные ESP32 и ESP8266
❯ Arduino
На мой взгляд, это ещё один эпик фейл прямо на старте. Автор в своих материалах упоминает разные программные системы, как предполагаемые для работы с платформой next.module, но при этом не упоминает Arduino.
Цитата:
Для ESP32S3 у меня следующая картина по софту: - ESP-IDF от Espressif, - мой SDK с поддержкой всех модулей (поверх ESP-IDF), - код пользователя на C/C++ либо (возможно) интерпретатор LUA, MicroPython или JavaScript.
Вне зависимости от того, как автор относится к Arduino и каким профессионалом он себя считает, игнорировать 98% потенциальной аудитории — это непозволительная роскошь для любого проекта. Я думаю не нужно быть дипломированным маркетологом, чтобы это понимать.
❯ В целом
В целом, складывается впечатление, что это «ещё одна Arduino» или «ещё один M5Stack», только на свой лад. Принципиальных отличий и технологических прорывов я здесь не вижу.
С другой стороны, и у Arduino и у M5Stack и у всех прочих подобных есть огромное количество косяков в архитектуре системы и в её реализации. Почему бы next.module наконец-то не сделать всё правильно и стать системой, которая завоюет популярность во всём мире?
Надеюсь, что мои замечания (и замечания комментаторов) помогут сделать next.module немного лучше и помогут ей стать «системой нашей мечты» и основой для наших проектов.