
Лет 5 назад, когда я увидел Flipper Zero, меня не покидала идея: хочу что то подобное - эдакий "тамагочи", но чтобы не для хакеров, а для фотографов. Два года назад до меня дошло, зачем это может быть полезным в реальной жизни, и только сейчас проект созрел для того чтобы выпустить бесплатную прошивку для "брелков" от M5 Stack. И это реально помогает в работе.
Зачем?
Настал момент, когда начали появляться разные рабочие девайсы с bluetooth на борту. Управлять ими со смартфона казалось крутой штукой, но на деле очень не удобно. Берем смартфон, разблокируем, ищем нужное приложение. Оно чаще всего очень жирное, поэтому ждем запуска и после этого ищем крестик, который закрывает рекламу. Потом процедура подключения и все такое.
Ок, наконец то можно управлять. У тебя и так чем то заняты руки, а нужно держать смартфон и постоянно посматривать в смартфон, ища глазами куда там нужно тапнуть. А потом смартфон заблокировался, и надейся что после разблокировки коннект с девайсом не упадет.
Да, у девайсов часто есть оригинальные пульты. Но каждый по отдельности стоит немалых денег, и таскать с собой пяток пультов в фоторюкзаке такое себе. Хотелось чего то универсального .
Железо
Девайс должен быть автономный и компактный. А это значит, что нужен аккумулятор и как то его заряжать, желательно по type-c. Конечно же нужен bluetooth с BLE, потому что большинство девайсов управляются именно по нему. Экран какой то - надо же как то выбирать что будет делать этот пульт, менять какие то режимы и настройки. И кнопка! Хотя бы одна, но "железная" большая кнопка. Иначе, какой в этом весь смысл.
Скажу честно, я рукожоп. Разводить и травить платы, это все не мое. Что то куда то припаясь я могу, но скорее всего это скоро отвалится. Так и было при первой попытке реализации задумки в железе. Берем esp32, модуль экрана, модуль зарядки, аккумулятор, несколько кнопок и припаиваем это все вместе. Далее проектируем корпус и печатаем на 3D принтере. Финальная доводка "китайскими соплями" и перед тобой лежит какой то уродец, который вроде как работает, но вряд ли переживет неаккуратного обращения. Ладно, этого уродца я возможно и полюбил, но как то хочется чтобы проект жил не только у меня. А заставить других фотографов проходить этот путь - такое себе. Нужна была именно готовая железка, в которую я могу залить свою прошивку.
Два года назад я нашел ее случайно и прочитав спецификации, тут же заказал. Это был M5Stack Stick PLUS 2.

Внутри esp32 с 8 мб флеш памяти, 2 мб дополнительной PSRAM, цветной дисплей 135х240, три физические кнопки, включая одну большую на лицевой стороне, аккумулятор с type-c зарядкой. А еще есть гироскоп с акселерометром, IR диод, бузер и цифровой микрофон - это все изначально мне не нужно было, но потом в итоге я нашел применение всему железу.
Корпус идеального размера - места много не занимает. Так же есть вырезы под темляк и встроенный магнит - бывает удобно прилепить к металлу. На практике, девайс оказался очень живуч - падения и не аккуратные обращения переживает без проблем. В виду своего маленького размера, даже был один раз забыт в кармане и пережил стирку в стиральной машине - работает пол года после этого без каких либо проблем.
Софт
У M5stack есть свои библиотеки и два основных языка программирования - C++ и python. Начал писать "прошивку" на том что знаю и что меня не напрягает - на питоне. Нужно всего лишь залить официальную прошивку с MicroPython (с либами от M5Stack), пишешь код и заливаешь с помощью ampy из консоли.
В начале все шло хорошо. Ищешь на гитхабе проекты с реализацией протокала управления нужного девайса, переписываешь, заливаешь, тестируешь, правишь и получаешь что то работающее. Потом, после третьего написанного приложения, получил OutOfMemory. Оптимизация приложений особо не помогла, потому что весь исходник уже банально перестал умещаться в оперативке - приходилось банально удалять комментарии. Немного спасло ситуацию пересборка прошивки. Стандартная почему то шла с выключенной PSRAM. Так же пришлось почистить от предустановленной питон запускалки приложений, которая жрала и оперативку и изрядное количество LittleFS, храня там свои битмапы. Но я все равно периодически получал OutOfMemory и пришел к такой схеме: Небольшой скрипт с меню приложений. При запуске, берем нужный скрипт из LittleFS, делаем ему eval и запускаем точку входа. При выходе из приложения, тупо ребутим девайс.
Все это как то работало у меня два года, а когда появлялись новые девайсы или задачи для мультитула, потихоньку писались новые приложения. Где то что то подтормаживало - не хватало низкоуровневого. Например, битмапы с иконками нужно было хранить только в файловой системе, а это тормоза при открытии, листания приложений и пр. Но кроме UI, производительности в принципе хватало, если не считать что был ужас в оперативкой и банальный буфер экрана в PSRAM делать было страшновато.
Но хотелось штуку, которой буду пользоваться не только я. Коллеги, которые видели у ее у меня, просили такую же. "Давай ты купишь, привезешь, я прошью, залью", - было как то не совсем удобно. Тем более, функционал потихоньку расширялся и надо думать еще и об обновлении. Нужно было переписывать на C++, выпускать полноценную прошивку и дать способ обычному человеку прошить девайс без каких либо проблем. Но моя лень и недостаток времени, убрали эти мысли в долгий ящик.
Несколько месяцев назад я сидел и думал, чем бы занять codex, так как оставался еще недельный неизрасходованный лимит и вспомнил про свой мультитул. Через 10 минут и ровно один промт, у меня уже лежал готовый бинарник, который по мнению ChatGPT повторял функционал питон версии. Правда оно не работало, а только несколько повторяло внешний вид, но начало было хорошим и за несколько дней я "переписал" все на C++ до рабочей и стабильной версии.
Прошивка и настройка
Заставлять неподготовленных людей качать сторонние флешеры и заставлять с ними разбираться, не очень хотелось. Написать свой красивенький вроде бы просто, но нужно поддерживать несколько операционных систем, включая проблемный для меня макос.
В итоге, я нашел способ, как это сделать быстро и просто - через браузер. Хромоподобные браузеры умеют общаться с девайсами через com порт, а esptool есть для веба.
Пользователь заходит на страницу проекта, подключает девайс по usb и ему остается лишь выбрать порт и нажать кнопку "прошить".
Так же, этот способ я использовал для некоторых настроек девайса, которые сложновато сделать с ограниченным количеством кнопок. Например, задать имя устройства или сохранить в него текущее время и координаты для калькулятора заходов и рассветов. Пользователь просто подключает девайс по usb и через эту же страницу настраивает. Так же, можно заливать картинки для приложения "фоторамка" и шаблоны для печати для приложения "принтер" (позволяет печатать на "детских" термопринтерах).
Для ленивых, сделал так же возможность настройки через bluetooth соединение с той же страницы.
Прошить или настроить можно с официально страницы проекта https://shotsync.ru/multitool
Что умеет
Управление камерами. Сейчас реализовано и на 100% работает пульт для фотокамер Canon, управление экшн камерами insta360. Пульты для Sony, Nikon, GoPro и DJI как бы реализованы, но на реальных девайсах не тестировались. По опыту знаю, что реализовать протокол это одно, но при общении с реальным девайсом могут быть нюансы. Скоро возможно буду потихоньку брать в прокат нужные девайсы для тестирования. Ну или если у вас что то есть, что можете дать на денек в Казани, пишите, займусь.
Управление светом. Управление девайсами от Youngnuo - те, которые имеют BLE на борту (например yn360 ii). Тут задействован акселерометр, чтобы прибавлять или убавлять яркость в канале можно было движениями. Так же, реализоват протокол для Nanlite, но на реальном железе не тестировалось.
Кликер. Bluetooth пульт для компьютера. Управляет презентациями (PgUp, PgDown) или медиа. Несколько раз пригождалось, когда у организаторов на мероприятии были проблемы с кликерами.
Смотри сюда. Самое тупое, но внезапно самое частое приложение, которое я использую. Предмет зависти других фотографов. Просто мигающий экран (красный или белый цвет, разные зиливки, включая стрелку). Девайс крепится к камеру и позволяет доминировать над другими фотографами (или людей со смартфонами) на мероприятиях. Люди, которые фотографируются, теперь смотрят только в твой камеру, потому что у них есть четкий ориентир куда смотреть. Это реально работает!
Управление голосом. В качестве эксперимента, но вроде как иногда работает. В настройках можно записать активационную фразу (3 раза повторить), включить функцию и в приложениях, которые работают с камерами, активационная фраза запускает съемку. Работает это лучше с короткими фразами или одним четким и ясным словом. Вот и микрофон в девайсе пригодился.
Всякие мелочи. Фонарик, который просто включает экран на все 100% яркости, калькулятор рассветов и заходов, уровень, "хлопушка" и какие то еще мелкие приложения, которые написал от скуки. Любое не нужное приложение можно скрыть в настройках.
ТВ выкл. Спер идею в кокой то "хакерской прошивке". Выключает или включает телевизоры с помощью встроенного ИК диода. Пригождалось пару раз, когда нужно было "как б%?*ть выключить этот проектор".
Принтер. Отправляет на печать цифры или заранее записанный шаблон (текст, QR код, картинка, счетчик) на "детский" термо принтер. Несколько раз были задачи, когда это нужно было. Раздавали QR код со ссылкой на фотографии, организовывали мини лотереи и пр.
Игры. Вряд ли кто то будет играть на этом, но ради фана сделал (спасибо нейронкам, сам бы я поленился). Есть даже настоящий 3D шутер про моделей, которые к тебе пристают, если их не фотографировать. В черновиках еще есть настоящий "майнкрафт", но железо уже не тянет (
Что дальше?
Сейчас есть две проблемы.
Не все приложения до конца реализованы до конца - нужны реальные камеры, которых у меня нет. А это камеры Sony, Nikon, GoPro и DJI.
Хочется расширить список девайсов от M5Stack, на которых будет работать прошивка. Это новые "брелки" (M5 stick 3), Core или самый интересный - M5 stopwatch (там экран круглый oled экран с тачем и по прежнему есть физические кнопки).
Проектом занимаюсь по мере свободного времени и свободных финансов. Для себя в принципе реализовано все что нужно. Могу конечно поклянчить донаты, но как то это никогда не удавалось делать.
Исходный код прошивки будет открыт, но сначала нужно привести его в порядок от нейрослопа и закончить реализацию того что не хватает.
Прошивайте тут https://shotsync.ru/multitool

