THE ONE CUBE. Дневник разработки. Зима '25 + Лето '26
Коротко - зимой сделал световые мечи, которые управляются игровым кубом, снял новогоднюю фотосессию, частично приостановил проект, а потом вернулся и полностью переделал архитектуру куба на два процессора: развёл платы размером 40×40 мм, разогнал шину между процами до 55 МБ/с, подключил звук, лаунчер прошивок и начал писать свой игровой движок с нуля.
ПРЕДИСЛОВИЕ
Для тех, кто видит меня впервые: я в одиночку разрабатываю The One Cube - карманную игровую консоль в форме куба с шестью дисплеями. Внутри - ESP32, акселерометр, батарейка, карта памяти. Управление - наклонами и вращением самого куба. В прошлых постах (ссылки внизу) я собрал первую партию из 10 кубов, выжал из железа 20 FPS на все грани и написал первые игры.
Раньше я выкладывал отчеты о разработке только на Пикабу. А теперь пришел с отчетами и на DTF =)
Еще и в новом формате - не по хронологии, а по темам разработки.
ГЛАВА 1. СВЕТОВЫЕ МЕЧИ, КОТОРЫМИ УПРАВЛЯЕТ КУБ
Зимой мне в голову пришла буйная идея: а что если кубик - это не просто консоль, а сердце целой экосистемы устройств на основе акселерометра?
И первое, что я решил сделать для зрелищности - бесконтактный бой на световых мечах.
Идея игры:
- 8 направлений рубящих ударов по "циферблату";
- удар контрится блоком в перпендикулярном направлении;
- каждое действие тратит выносливость, незаблокированный удар идёт по здоровью.
По сути меч это светильник-палка на адресной светодиодной ленте и esp32. К нему приделал снизу куб с акселем. Обмен данными между всеми esp32 по ESP-NOW (быстрый протокол поверх Wi-Fi).
Собралось всё не без классики жанра: традиционный колхоз с проводками, платы для кнопок из обрезанной макетки, а 3D-печать, как обычно, сошлась не с первого раза - криво насверлил отверстия в алюминиевом профиле, пришлось перепечатывать рукояти.
Зато в темноте это выглядит прикольно - клинок с двойной подсветкой, на котором можно выводить полосы здоровья и выносливости.
Самое сложное оказалось не железо (его я собрал за пару вечеров), а математика. Если делать простые, не размашистые удары - всё распознается более менее правильно. Но стоит занести меч высоко, острием в потолок - и акселерометр считает полную чушь. Пришлось долго разрабатывать правильную систему считывания направления ударов.
Чем заниматься в новогоднюю ночь? Конечно же веселить прохожих и драться на световых мечах =))
Со стороны выглядит очень забавно и даже как-то работает.
Но после этого одного теста оказалось что не хватает звукового сопровождения "попадания" и вообще при динамичном бое, лучше выкинуть всю систему с "накоплением" блока.
Может быть когда нибудь еще что-то придумаю на основе этой идеи. После НГ эти мечи так и лежат на полке.
ГЛАВА 2. НОВОГОДНИЙ ПАРТИЗАНСКИЙ МАРКЕТИНГ
Параллельно с мечами продолжалась моя традиция партизанского маркетинга - пытаться достучаться до известных D&D-шоу, чтобы они заметили мой кубик и возможно использовали его в своих играх. После неудач с VLDL и Critical Roll настала очередь "Подземелий Чикен Карри" (шоу, где российские блогеры играют в настолку по D&D правилам).
Вместо лимончиков в слот-машине (одна из механик куба - слоты с ручной остановкой барабанов) я сделал тематическую версию под шоу.
А в последний день 2025-го решил вместо новогоднего стола с оливье собрать стол с днд реквизитом и елкой. А в центре поставил свои кубы.
Почти сотня фоток, много переделок монтажа - и получился новогодний клип, который я отправил в ТГ-канал ПЧК. Фидбека от команды так и не дождался.
Но зато остались вот такие кадры.
Весной проект с кубом приостановился. Единственное что сделал - новый скин слот-машины для выставки фото-видео оборудования CPS-2026. Показал парочке человек и всё.
ГЛАВА 3. НОВАЯ АРХИТЕКТУРА: ДВА ПРОЦА ВМЕСТО ОДНОГО
И еще единственная мысль, которая посещала меня в течение весны, что производительности есп32, как сердца кубика, маловато. Но получается ему нужно и логику считать, и на экраны выводить картинки. Да и памяти как-то маловато. Тот же потолок в 20фпс меня не очень радовал, если обновлять все экраны одновременно, конечно.
И то, "условный рендер" отъедает большую часть процессорного времени, которое можно было бы потратить на какую нибудь интересную логику игр, физику столкновений и тд.
Придумал некоторого франкенштейна:
- ESP32-S3 - "мозг": логика игр, датчики, Wi-Fi;
- RP2350 - "видеокарта": только отрисовка на 6 экранов.
При этом давно хотелось уменьшить кубик, чтобы были поменьше рамки между экранами. И это получилось.
При этом вместе с новой "видеокартой", в новом кубике появился мини-динамик и 2 вибромотора. Но пришлось добавить отдельную плату для rp2350.
ГЛАВА 4. ИГРА В ВОДОПРОВОД: ПЛАТЫ НА 40×40 ММ
Летом я увлекся проектированием плат. Называю это "игрой в водопровод": раскидать компоненты на плате и аккуратно соединить их дорожками - залипательное занятие и мозг разомнешь. Особенно когда места ну совсем мало: большинство компонентов пришлось уменьшать до типоразмера 0402. Чувствую, скоро дойду до проектирования плат телефонов))
Схема работы такая: сначала раскидываю крупные компоненты на 3D-модели корпуса (чтобы точно знать, что всё влезет и разъемы выйдут куда надо), и только потом развожу дорожки в EasyEDA.
Получился такой бутерброд из плат:
- Плата ESP32
- Плата "видеокарты" с RP2350
- Отдельная плата памяти
- Центральная плата с акселерометром
- Нижняя плата с динамиком и подключением 6 экрана
Хочу заметить такое маленькое, но важное архитектурное решение.Всегда стараюсь выжимать из железа максимум. Сначала была идея поставить RP2354 со встроенной флеш памятью. Но там внутренняя память работает на 3.3V. А чтобы разогнать PSRAM, лучше использовать микрухи на 1.8V. Плюс еще просто места на плате мало.Тем самым появился "картридж" памяти на отдельной плате под RP3250.
И еще раз моя любимая картинка =)
Хочется сказать, что замучился с проектированием этого бутера из двух процов. Там соедини, тут учти кто с кем соединяется, и всё умести в 40*40мм..
ГЛАВА 5. ТЕСТЫ НА КОЛХОЗЕ ИЗ ДЕВКИТОВ
Учитывая мой предыдущий опыт с кубиком версии 1, где пришлось иправлять косяки проводками прям на плате, в этот раз я решил перепроверить все основые системы сначала на девкит модулях.
Первым пошла малинка. Буду так называть RP2350. Кстати, не так просто было найти именно RP2350B c большим количеством выводов.
В малинке вообще есть специальная система PIO. С которой в ардуино IDE нормально работать не получится. Пришлось переехать в VS Code.
При этом еще неожиданный факт - оказалось что малинка очень плохо работает с китайскими микросд картами. Тем самым пришлось переделывать платы и возвращать подключение карточки памяти на есп32. Но тогда встал вопрос - а как передать кучу текстур с микросд на малинку.. И нашел решение - поднял 8 битную шину в стиле Intel 8080 между этими процами. И как раз всё на автоматах PIO.
И что вообще было для меня шоком - эта система заработала без сбоев на 60МГц. Если верить замерам на экране, скорости там под 55МБ/с. Учитывая что связка есп32 + микросд карта может отдавать только 12МБ/с, такой шины точно хватит))
Вот тут можно услышать, как звучит динамик. Возможно я его слишком перегрузил, надо будет еще поиграться с настройками. Но это лучше чем вообще без звука.
Ну и еще главный вопрос - а как вообще прошивать эти два проца, если выйдет обновление прошивки. Учитывая что USB один на всех? Сначала пытался это сделать через дергание пинов rp2350, чтобы есп32 увидел малинку как флешку и залил туда прошивку в виде UF2. Провозился с этим долго и в итоге ничего не вышло.
Сошелся на топорном решении - поставить usb разделитель. Есть такая мини микруха, которая при подаче определенного сигнала переключает линии. Тем самым в меню кубика можно будет просто выбрать, кого перепрошивать и есп32 переключит линию и переведет малинку в режим флешки для компьютера.
Бонусом прокачал фишку "весь куб притворяется флешкой для компа": раньше давало 300 КБ/с, сейчас 800-900 КБ/с. Похоже это предел для этого проца. Тут именно идея загрузки самих игр на карточку памяти.
И также пришел к системе лаунчера игр-прошивок внутри одной памяти есп32 за счет встроенной функции "OTA". После изучения других идей, оставил именно топорный метод с перепрошивкой флеш памяти.
Но учитывая что новые игры будут "ставиться" в куб не так часто - память не посыпется. Там около 100тыс перезаписей может быть.
Ну и эта система работает. "Игры" переключают друг друга.
ГЛАВА 6. ДВИЖОК С НУЛЯ: ТЕТРАДЬ, СВОЙСТВА И ПРАВИЛА
Параллельно с железом я начал писать игровой движок. И тут самое грустное: нейросети помогают ну очень плохо. В интернете очень мало толковых примеров движков для микроконтроллеров с 300 КИЛОБАЙТАМИ оперативки - в основного многи инфы именно по Unreal / Unity.
Особенно весело, когда ИИ вовсю пихает хардкод: говоришь ему, что вся игра на динамических данных - он предлагает прописать свойства объектов прямо в код. Поэтому архитектуру я по возможности продумываю сам, записывая в тетрадку конспект, а ИИ использую только как справочник "а как это в серьезных движках сделано".
И паралельно этому получилось визуализировать куб через QT C++. Чтобы можно было сразу видеть на экране компа как отображается игра без перепрошивки куба.
Главная идея движка: игры задаются НЕ голым С++ кодом. Игра - это набор свойств объектов и набор правил в текстовом файле, а ESP32 выступает интерпретатором и стейт-машиной, которая просто бегает по свойствам и сравнениям. Хочешь сделать игру - описываешь объекты и правила на "определенном и простом" языке, а не сидишь в C++.
Плюс логика полностью отделена от рендера: первый тест гонял "воинов" на карте, где ESP32 считал столкновения и отдавал координаты по USB, а рисовал их компьютер.
Ну и приятный бонус по железу: протестировал новый DC-DC преобразователь - "сердце" питания кубика. КПД в худшем случае 90% (в старом кубе было порядка 70%) - это условные лишние 30-40 минут работы от батареи.
ГЛАВА 7. ЭКОНОМИКА: НЕЙРОСЕТИ ПОВЫСИЛИ ЦЕНЫ НА МОЮ ФЛЕШКУ
Отдельная боль этого лета - карты памяти. Похоже что из-за бума нейросетей дичайше скакнули цены вообще на всю память, включая простые microSD, которые я планировал использовать как хранилище игр. В том году брал простенькие карточки по 200 рублей - сейчас они практически по 700.
Но выход нашелся, и это даже забавно: на Авито продают ПРОМЫШЛЕННЫЕ microSD по 100 рублей за штуку. Всего 4 ГБ вместо 32, но игры для кубика будут весить максимум 100-200 МБ (и это уже навороченные игры). 4 ГБ хватит надолго, а ESP32 всё равно больше 12 МБ/с на чтение не выдает.
Еще были идеи продать кубы первой версии по себестоимости просто как железки. Сделал несколько постов в соцсетях и никому оно не понадобилось. Поэтому решил что и первая версия кубов пойдет в работу и на них будут игры. Придется сделать отдельные ветки кода для 1 и 2 версии кубов, но так хоть не придется дербанить на части в принципе рабочее железо.
ЧТО ДАЛЬШЕ?
А дальше просто дофига работы по проектированию движка))) Это самое главное, учитывая что кубики первой версии в принципе работают.
И еще копить на комплектующие кубиков второй версии. И потом всё заказать и протестить.
Будем очень надеяться, что у меня получится что-то дельное. По крайней мере я уже много работаю над этим устройством и верю в него. Да и судя по реакциям людей, проект перспективный.
И надо обязательно побыстрее сделать еще игры кроме змейки. А то я её показываю всем уже полгода подряд.
Этот пост это большая компиляция записей из моего блога тг, где я каждый день пишу о жизни и работе над всеми своими проектами. Кому интересно - загляните.
Прошлые посты на Пикабу:
Август '25 — LED CUBE. Дневник разработки. Август '25
Сентябрь '25 — THE ONE CUBE. Дневник разработки. Сентябрь '25
Октябрь '25 — THE ONE CUBE. Дневник разработки. Октябрь '25
Ноябрь '25 — THE ONE CUBE. Дневник разработки. Ноябрь '25
У кого есть желание - поддержите проект с кубиком любыми удобными вам способами. Буду очень рад комментариям или даже донатам.