Привет, Пикабу!
Впервые за 6.5 лет, что я здесь решил сделать хоть сколько-то серьёзный пост, да и авторский контент точно не помешает. Сразу предупреждаю: телегу не рекламирую, реферальных ссылкок не будет, фоткал на тапок, чукча не писатель, маска моя - тег моё хуё-моё.
Тут есть мат, дилетантство, шизофренические текстовые конструкции и огромное количество моментов, в которых захочется сказать "Автор, ты совсем еблан?"
Погнали!
Дело началось в августе 2023 года, когда я впервые для себя открыл такой тип досуга как косплей-фестивали, а в частности Томскую Con.Версию. Тогда же у меня с товарищем возникла идея сделать косплей на персонажей из нашей общей любимой игры - Watch Dogs 2 - Ренча и Маркуса.
И если с образом Маркуса (негр, справа) проблем не возникло никаких - в косплейном обществе такие костюмы называют "шкаф" (в плане, одеться в персонажа можно просто достав обычные шмотки из шкафа), то с Ренчем (чудик слева в маске) дела уже обстоят интереснее.
Как минимум, потребуется маска, о создании которой я сегодня и хочу написать.
Изначальной идеей было купить уже готовый вариант маски (как на изображении ниже), но почесав репу и прикинув писю к носу мы поняли, что вариант это такой себе, ибо дорого и плохо (на тот момент подобные маски стоили около 7-10 т.р. и не имели анимации) , и надо бы запариться и скрафтить маску самим.
вот такую маску хотели купить изначально
Идея то появилась, а как реализовать – неясно. Хотелось видеть анимации, полную поддержку эмотиконов и качество чуть лучше, чем подвал в Шэньчжэне.
Пошёл гуглить. Нагуглил уже известный всем вариант маски с очками Chemion, еще какую-то фигню и чего-то загрустил.
От грусти полез шерстить гитхаб и тут меня ждал успех. Мы смогли найти опенсорсный проект маски от TomMakesThings построенный на базе светодиодных матриц MAX7219, Arduino и базовой простой как три копейки пластиковой маски с того же али. Мало того, этот проект соответствовал всем нашим требованиям, управлялся по блютузу и имел кайфовое приложение.
Долго не думая, мы почти сразу начали закупаться компонентами.
С алиэкспресса были заказаны: шасси маски, паяльные расходники, а Arduino Uno я решил заменить на ESP32 (из-за дешевизны и уже встроенного блютуза).
Трудности возникли уже на этапе покупки матрицы. Оказалось, что в наличии ни в нашем, ни в ближайших городах не бывает таких матриц в нужном нам цвете (белый) а брать синий или красный как-то фу, но зато есть куча адресных матриц WS2812b. Естественно, библиотеки для управления тем и этим типом матриц отличаются чуть более, чем полностью, поскольку матрицы на MAX7219 – аналоговые, WS2812 же – цифровые.
“Придется переписывать код” – подумал я, заказал матрицы и ушел в запой на 4 дня.
Во время этого самого запоя я при помощи рук, ChatGPT и такой-то матери таки смог понять реализацию оригинального кода, пару тысяч раз чертыхнуться и переписать почти весь код (кроме некоторых на мой взгляд бесполезных анимаций) на библиотеке FastLED, которая и будет управлять адресными светодиодами.
Процесс ардуинокода, костылей, а также самоненависти (вот до чего доводят с++, особенно если твой максимум - "Hello, World!")
На симуляторе ардуино все заработало просто идеально, и оставалось только протестировать на реальном железе и посмотреть, как всё работает в жизни. На этом этапе я ещё не знал, насколько бесполезными были мои страдания.
Забрал посылку с маской. Как оказалось, матрицы на базе WS2812 слишком большие, что в корне губило нашу идею с использованием адресных светодиодов вместо “аналоговых” матриц MAX7219.
Ушел в тильт на пару дней и чуть было не решил забить нафиг на весь косплей, но вдруг случилось неожиданное – великий и ужасный @AlexGyver, выкатывает проект (радио-голова Бендера) ровно на тех же MAX7129, которые использовались в маске от TomMakesThings и реализует в нем почти то же самое, что надо нам.
Наглядно видно насколько матрицы большие для использования в этом проекте
После просмотра видоса выяснилось, что моя догадка о том, что матриц такого типа с белыми светодиодами нет в продаже, но умные китайцы придумали вот такие белые сторонние светодиодные модули, совместимые с, собственно, контроллером:
Заказал, оплатил, получил. Заказал так же и сами модули MAX7219.
Так-то лучше! Теперь и матрицы чётко по размеру, и через "визор" маски можно видеть окружающий мир.
Наступило время сборки. Подключил все по схеме, но матрицы вели себя чрезвычайно странно: то не отображали ничего вовсе, то показывали какую-то белиберду; в общем, было очень неприятно. В итоге спустя полдня мучений и один убитый логический конвертер я решил забросить это дело на неопределенный срок.
схема подключения матриц к есп32 (да, для такого дилетанта как я требуется схема даже для очень простых вещей)
Неопределенный срок оказался длинной в два дня. Мне стало скучно и одним осенним утром я скупил ВООБЩЕ ВСЕ логические конвертеры, какие я смог найти в наличии и сел собирать по новой, теперь уже не на коленке и под банку пива, а на трезвую голову и с моральной поддержкой.
Снова какая-то хрень. Ничего не могу понять, есп вроде живая, конвертеры – новые. Подумал-подумал и решил поменять матрицу на стоковую красную. Собрал, запустил, заработало.
Куда же без косяков… белые дисплеи, купленные на замену стоковым красным, подключаются по схеме “общий анод”, а модули max7219 работают только с дисплеями “общий катод”.
Где-то тут были тщетные попытки переписать библиотеку под работу с общеанодными дисплеями, но почти сразу было понятно, что дело гиблое и надо бы покупать дисплеи и матрицы заново...
Новый день – новые траты!
Ну теперь-то всё точно должно получиться! Жду посылку.
Посылки пришли довольно быстро, матрицы были подкинуты на скорую руку к еспшке ииии.. да! Всё взлетело, заработало и красиво начало моргать светодиодами.
Ура, товарищи, победа! Теперь дело оставалось за малым, ещё раз переписать (а вернее, откатить) код к моменту, где всё работало, запихнуть железки в маску и проверить как всё это выглядит в деле.
На этот момент проект, который по сути своей можно было бы сделать за месяц (учитывая ожидание посылок с али), растянулся уже на 3 с половиной месяца... Криворуким быть тяжело!
Протестировал переключение анимаций:
Ну и передал сиё творение счастливому владельцу)
Послесловие
На этом всё. Проект получился хоть не очень масштабным, зато дров наломать получилось знатных. Но, опыт есть опыт.
Наш разраб фигачит вообще адовые проекты.
Ну такой вот примерно рецепт усредненный, потому что вариаций масса.
Берётся готовый проект с гитхаба, он не тестится, тестить — это не про нашего разраба. Он берет этот проект, размазывает его по функциям и начинает рефакторить. Добавляет в него огромное количество костылей, хаков, спизженного кода со StackOverflow для вязкости, немного фиксов сверху. Все это компилится до дыма. Потом снимается с Arduino IDE, и разраб остужается на балконе. Потом он заливает это все на esp32 и, щедро полив анекдотами, отдаёт мадесте. Пишет пост на пикабу, шкрябая по клавиатуре. Пишет и приговаривает полушепотом: "ух, бля".
При этом у него на лбу аж пот выступает. Любезно мне иногда предлагает потестить, но я отказываюсь. Надо ли говорить о том, какой запах потом? Вонища такая, что в косбенде обои от стен отклеиваются.