С некоторых пор в среде самодельщиков обрёл популярность новый формат — портативные игровые устройства на основе недорогих микроконтроллеров и OLED или TFT-экранчиков, подражающие популярным портативным игровым системам прошлого, таким как Game Boy компании Nintendo 1989 года.
Если техническая сторона проста и понятна, то вопросы мотивации создателей этих самоделок, зачем вообще они нужны, и что с ними можно делать конечному пользователю (а таковые стабильно находятся), остаются открытыми. Попробуем разобраться. Изложу общую историю и поделюсь личным опытом использования одного из таких устройств.
▍ Содержание
▍ История
На этапе становления любительской, то есть домашней и малогабаритной компьютерно-вычислительной техники, в её развитие внесли значительный вклад энтузиасты-радиолюбители, осваивавшие новейшую на тот момент область цифровой микроэлектроники. Они создавали первые персональные микрокомпьютеры сначала на основе логических микросхем, потом на только-только появившихся микропроцессорах. В отличие от индустриальных гигантов, ориентированных на масштабы серьёзного бизнеса, любители лучше понимали особенности персонального, домашнего применения компьютерной техники, и таким образом постепенно формировали черты персонального микрокомпьютера. Добившись определённых успехов, некоторые одиночки сформировали профильные компании, продолжившие дело компьютеризации населения в особо крупных размерах — по крайней мере, так гласят легенды становления таких компаний, как Apple и Microsoft.
Один из первых самодельных ПК, Apple I, в портативном исполнении. Фото CC-BY eevblog
Индустрия быстро встала на ноги, на рынке появился огромный выбор готовых компьютеров на любой вкус и бюджет, и создание самодельных компьютеров потеряло былую актуальность. Тем не менее, энтузиасты этого дела сохранились и в новом тысячелетии, хотя фокус их интересов сместился в сторону одноплатников или необычных технических решений, по большей части ретроориентированных, хотя и с привлечением современной элементной базы. Сейчас уже мало кто замахивается на конструкции в формате классического персонального компьютера с монитором и клавиатурой — хотя и такие тоже есть (о них как-нибудь в другой раз).
Современный самодельный компьютер Commander X16 и его счастливый создатель, Дэвид Мюррей (The 8-Bit Guy)
С развитием микроэлектроники в середине 2000-х годов энтузиастам стали доступны новые, довольно мощные микроконтроллеры, а также недорогие малогабаритные графические экранчики. Это открыло новое направление для приложения очумелых ручек в области DIY-электроники — портативные устройства в основном игрового характера. Такой формат оказался достаточно простым способом прикоснуться к конструированию и дизайну законченных устройств с максимально простой схемотехникой и электроникой, без необходимости привязываться к стандартным видеомониторам, клавиатурам и прочим устройствам ввода-вывода.
Подобные проекты плодились и множились, но долгое время всё это оставалось достаточно андеграундной деятельностью. Массовую же популярность движение приобрело примерно в 2014 году с появлением проекта Arduboy — миниатюрной портативной игровой консоли. На волне его успеха не замедлили появиться множественные последователи, которых сейчас, вероятно, насчитываются десятки.
▍ Какие они
В начале статьи я сказал, что эти устройства похожи на Game Boy компании Nintendo, и, вероятно, это действительно был основной источник вдохновения многих авторов.
Классический Game Boy 1989 года, условно-карманный. Фото CC-BY wwarby
Однако истории также известно потерянное звено — класс более похожих на последующие самоделки устройств в виде продвинутых карт памяти Visual Memory (VMU) для Sega Dreamcast и PocketStation от Sony PlayStation, появившихся в 1998-1999-х годах. Также существовало схожее по характеристикам, но самостоятельное игровое устройство Pokémon mini от Nintendo 2001 года выпуска.
VMU и PocketStation, каждая размером меньше четвертинки от оригинального Game Boy. Фото CC-BY ManuelSagra
Эти миниатюрные устройства также подражали дизайну Game Boy, только в значительно более компактном форм-факторе. Они имели пиксельный LCD-экранчик очень низкого разрешения и позволяли играть в специально разработанные для них игры. Помимо размера, общие черты с последующими самодельными портативками заключаются во внутренней архитектуре, отсутствии внешнего носителя для сменных программ, типа картриджа или карты памяти — вместо этого программы загружаются в память с большого устройства (приставки или компьютера). В начале 2000-х они ввиду своей доступности привлекали внимание энтузиастов, нашедших способы разработки и загрузки собственных программ.
Примерно такую же формулу в то же время начали воспроизводить и самодельные портативные устройства: микроконтроллер в качестве основы устройства, содержащий внутри себя вычислительное ядро, всю оперативную и постоянную память и все интерфейсы ввода-вывода, плюс отдельный модуль LCD-экрана. Такую архитектуру имели и популярные в то время самодельные MP3 плееры, отличаясь только наличием микросхемы аппаратного декодера MP3 и слотом для карты памяти.
Самодельный портативный аудиоплеер с экраном от телефона Nokia 1100, родом из 2012 года. Фото Panda_Y2K с сайта РадиоКот
Конструкция самодельных портативок максимально проста: микроконтроллер со всей немногочисленной обвязкой в формате полностью готовой покупной платки, готовый модуль экранчика с последовательным интерфейсом i2c или SPI, питание в виде аккумулятора и модуля зарядки, кнопки, и, собственно, почти всё. Могут присутствовать ещё несколько дополнительных деталей в виде динамика и усилителя для звука, расширителя портов, но в целом схемы обычно состоят из соединений нескольких готовых функциональных модулей и очень похожи между собой, иногда отличаясь только выбором управляющих выводов микроконтроллеров и моделью используемого экранчика.
Возможности устройств росли со временем и с появлением более продвинутой доступной элементной базы. В первых подходах это были 8-битные микроконтроллеры AVR и монохромные LCD-экранчики от Nokia 3310 или популярного ранее LCD12864, позже появились конструкции с цветными TFT-экранами либо монохромными OLED, и более производительными контроллерами типа RaspberryPi, ARM или ESP32. Характеристики используемых сейчас контроллеров — производительность до ~300 MIPS, ОЗУ объёмом около пары сотен килобайт, Flash-память объёмом в единицы мегабайт.
Довольно поздняя самодельная портативная игровая система, созданная по канонам 2000-х годов, AVRelay. Именно так они и выглядели в то время
Особенностью практически всех самоделок является очень низкое разрешение экрана, которое до сих пор редко достигает даже классических 320 на 240. Это обусловлено выбором компонентов — и недорогие микроконтроллеры общего назначения, и недорогие экранчики используют в качестве интерфейса подключения i2c или SPI. Скорости этих интерфейсов едва хватает для достаточно плавного обновления экрана низкого разрешения, такого, какое требуется для игровых программ. Для современных экранов же высокого разрешения нужны совсем другие интерфейсы, контроллеры, скорости и объёмы памяти. Такой условный минус для любителей является скорее плюсом: энтузиасту-одиночке гораздо проще создавать графику такого низкого разрешения, и в целом челлендж преодоления ограничений может являться и привлекательным качеством, и стимулом творчества.
Разработка программ под эти устройства осуществляется разными способами. Прежде всего это, конечно, язык C++ и различные библиотеки для работы с контроллером используемого экрана. Очень часто применяется среда Arduino IDE, которая помимо оригинального 8-битного Arduino уже давно поддерживает многие другие микроконтроллеры. Загрузка программ часто происходит с её же использованием — то есть игры и программы распространяются в исходниках, и для загрузки их в устройство нужно открыть проект в IDE, установить все необходимые зависимости (что порой тот ещё квест), собрать, и только тогда загружать. Также для некоторых устройств созданы собственные среды разработки и фреймворки на основе языков Python (MicroPython) и JavaScript, или в формате визуального программирования.
Большая часть подобных конструкций так и не вышла за пределы веб-странички автора или страниц тематических форумов, но некоторые устройства смогли завоевать интерес публики и разойтись не самыми маленькими тиражами в виде наборов для сборки или готовых устройств. Небольшой список тех, кому удалось это сделать, с годами выхода и основными характеристиками:
Устройство | Год | Контроллер | Экран | Особенности |
Arduboy | 2014 | Arduino | монохромный OLED 128x64 | Первый на популярном контроллере |
Gamebuino Classic | 2014 | Arduino | монохромный LCD 84x48 | Разъём MicroSD с возможностью загрузки прошивки с карты |
Thumby | 2016 | RaspberryPi RP2040 | монохромный OLED 72x40 | Формат брелка для ключей |
PocketSprite | 2016 | ESP32 | цветной OLED 96x64 | Компактный эмулятор старых приставок |
Pokitto | 2017 | ARM Cortex-M0+ | цветной TFT 220x176 | Разъёмы расширения и MicroSD |
Gamebuino Meta | 2018 | ARM Cortex M0+ | цветной TFT 160x128 | Восемь программно управляемых RGB-светодиодов. |
Odroid-Go | 2018 | ESP32 | цветной TFT 320x240 | Набор для сборки поставляется с эмуляторами старых игровых приставок |
PocketStar | 2018 | ARM Cortex-M0+ | цветной OLED 96x64 | Версии классических аркадных игр в виде брелка для ключей |
ESPboy | 2019 | ESP8266 | цветной TFT 128x128 | Разъём расширения, ориентация на модули |
ESPlay и ESPlay Micro | 2019 | ESP32 | цветной TFT 320x240 | Улучшенная (по мнению автора) альтернатива Odroid-Go и PocketSprite |
8BitCADE | 2021 | Arduino | монохромный OLED 128x64 | Образовательная направленность (STEM) |
Pimoroni PicoSystem | 2021 | RaspberryPi RP2040 | цветной TFT 240x240 | Свой фреймворк, предлагающий работу в разрешениях 120x120 и 240x240 |
▍ Зачем и почему
Некоторый парадокс явления самодельных портативок заключается в том, что в самой этой идее никогда не было практического смысла или необходимости. К моменту появления первых подобных проектов рынок мобильных устройств не только уже существовал, но и был перенасыщен. Актуальные на тот момент (начало 2000-х) портативные платформы были значительно мощнее, полезнее и даже просто красивее всего, что могли создать энтузиасты. Их можно было просто купить в магазине, под них можно было писать свои программы, и у этих уже существующих платформ не было принципиальных проблем, которые могло бы решить создание любительской альтернативы.
На роль такой проблемы могла бы претендовать закрытость мейнстримовых игровых платформ типа Nintendo GBA и DS, Sony PlayStation Portable, вход куда независимым разработчикам в то время был заказан. Но эти платформы были ценны именно существующей аудиторией и инфраструктурой для монетизации контента (продажи игр), а у вновь созданной альтернативы ничего этого не было бы.
Nintendo DS, актуальная консоль в 2005 году
И её более мощная соперница, Sony Playstation Portable
Другой возможной проблемой было ограничение доступа к контенту, типа воспроизведения аудио- и видеофайлов любых форматов и содержания, а также (с помощью эмуляции) к видеоиграм прошлого. Эту нишу до появления самоделок заняли карманные медиаплееры, а позже и разнообразные специальные игроориентированные устройства. Многие могут вспомнить серию корейских устройств от Game Park, начавшуюся с GP32 (2001), и линейку китайских портативок Dingoo (2009 и далее).
GP2X, следующая после GP32 модель
Dingoo A320
И конечно же, всё это время на рынке были ещё более доступные КПК (успевшие с тех пор исчезнуть как класс), мобильные телефоны, смартфоны и планшеты, на которых вход для начинающих разработчиков был проще, доступ к контенту менее ограничен, а потенциальная аудитория гораздо шире.
По этим причинам я полагаю, что изначальной мотивацией создателей самодельных портативок было просто техническое творчество и сама эта открывшаяся возможность — если такое можно сделать, почему бы и нет, хотя бы ради собственного удовольствия. Из вышесказанного можно предположить, что у создателей подобных проектов часто нет понимания, кто является их целевой аудиторией, и каким образом позиционировать свой проект для публики. Возможно, по этим причинам явление довольно долго, почти десятилетие, оставалось очень нишевой забавой редких энтузиастов, пока однажды звёзды случайно не сошлись нужным образом.
▍ В массы
Попытки популяризировать и даже коммерциализировать эту идею случались неоднократно. Их авторы предлагали проекты самодельных портативок в качестве решения проблемы входа инди-разработчиков на мейнстримовые платформы, или проблемы дороговизны существующих портативок — что, впрочем, успешно решали многочисленные изделия родом из Китая. Эти предложения нашли любопытное отражение в одной ныне забытой интернет-драме, о которой, однако, всё ещё помнит Википедия.
В 2008 году инди-разработчик Роберт Пиллони работал над своей игрой Bob’s Game для (тогда актуальной) Nintendo DS, используя открытые инструменты. Превью игры собрало сотню тысяч просмотров на тогда ещё довольно юном YouTube, и на волне этого успеха Роберт попытался получить у Nintendo лицензию и доступ к официальному девкиту. Компания тогда ещё работала исключительно с крупными студиями, и ожидаемо ответила отказом. Эта история попала в публичное поле, и на протяжении нескольких лет муссировалась в кругах инди-разработчиков. В 2011 году Роберт анонсировал портативную консоль nD, которая должна была стоить 20 долларов и поставляться с предустановленной игрой автора. Впрочем, этот план был через пару лет заброшен, а игра в итоге вышла на Steam и ныне забыта. Вряд ли эта история действительно повлияла на что-то, однако в наши дни мы имеем и доступ инди-разработчиков на портативки Nintendo, и множество любительских портативных игровых платформ с сотнями игр для них — возможно, идея создания своего лунного модуля всё же смогла увлечь некоторых энтузиастов, разрабатывающих инди-игры.
Мифическая nD. Концепт-арт Роберта Пиллони
В целом же начинания в области самодельных портативок не имели большого успеха до 2015 года, пока внезапно не выстрелил проект Arduboy, созданный годом ранее. Вероятные ингредиенты его успеха — бум концепции коллективного финансирования (краудфандинга), фактор новизны в глазах массовой публики, которая вдруг узнала о подобных устройствах через модную площадку Kickstarter, и использовании в качестве технологической основы уже готовой и популярной инфраструктуры Arduino. Всё это позволило собрать умопомрачительную сумму в 433 тысячи долларов и хорошо нашуметь в медиапространстве.
Arduboy собственной персоной
Разумеется, такой оглушительный (по меркам DIY-энтузиастов) финансовый успех привёл к появлению множества аналогов и подражателей, с переменным успехом пытавшихся войти в ту же воду. Например, проект Thumby 2016 года попытался взять очень маленьким размером и использованием новомодного на тот момент контроллера RaspberryPi RP2040, гораздо более мощного, чем уже довольно древний Arduino — и смог собрать 205 тысяч долларов на Кикстартере.
Thumby, массогабаритный макет для промо-компании, 10 штук
Менее успешные PocketSprite 2016 года и его брат-близнец PocketStar 2018 года (от двух разных авторов) попытались позиционировать идею не как DIY-платформу, а как самостоятельное игровое устройство в формате брелка для ключей с эмулятором классических приставок либо с новодельными клонами старых аркадных игр. Простейшая идея без особого креатива, даже в названии, но оба устройства нашли свою аудиторию, проголосовавшую рублём — 169 тысяч долларов и 28 тысяч евро соответственно.
Симпатичный PocketSprite
И его некрасивый брат-близнец, PocketStar
По приведённым цифрам сборов можно проследить падение популярности идеи с годами. С утратой фактора новизны и отсутствием уникальных особенностей каждый следующий проект собирал всё меньше денег на свою реализацию. Найти иную формулу, которая предложила бы что-то новое и приносила бы прибыль не только через краудфандинг, смогли немногие.
Кому-то посредством краудфандинга даже удалось коммерциализировать не сами портативки, а отдельные игры для них. Так, игра Arduventure для Arduboy в 2018 году собрала 60 тысяч долларов, весьма неплохую сумму для независимого разработчика.
Игра Arduventure для Arduboy. Осторожно, сводит олдскулы
Авторы 8BitCADE попытались вывести свой проект в образовательную плоскость, позиционируя его как платформу STEM (популярная ныне образовательная концепция). Продвигают они её под предлогом, что современное программирование и электроника стали слишком сложны для входа начинающих и обретения полного понимания того, что находится под капотом, и вот такая простенькая платформа — именно то, что им нужно.
Одна из версий 8BitCade
Трюк с созданием новой платформы как канала для коммерческого распространения вновь создаваемых игр удалось провернуть, пожалуй, только устройству Playdate, что также фактически вывело его за рамки формата самодельных портативок — оно изначально продаётся как готовый коммерческий продукт, но имеет публично доступный SDK. Тем не менее, легко прослеживаются его общие корни с темой самоделок: так, в основе его лежит контроллер STM32, работающий на частоте 180 МГц. Также оно имеет пару интересных технических особенностей, играющих роль фактора новизны — монохромный экран без подсветки, по свойствам похожий на e-Ink, плюс орган управления в виде вращающейся рукоятки сбоку. Вопреки первому впечатлению, рукоятка служит не для зарядки аккумулятора, а для управления в играх, каких именно — зависит от креативности их авторов.
Чемодан без ручки, а Playdate с ручкой
Лично мне больше интересны платформы, ещё не превратившиеся в зло, с которым были призваны бороться, где не утерян дух DIY и где возможны эксперименты. Поэтому непосредственный опыт я имел только с одной из платформ, которую, к тому же, было проще всего достать. На протяжении нескольких лет я следил за её развитием и сам принимал в нём некоторое (очень скромное) участие. Об этом опыте я и расскажу далее.
▍ ESPboy
ESPboy — одна из более поздних портативных самоделок, во многом повторяющая концепцию Arduboy, но на другой элементной базе. Из-за исключительной оригинальности названия получилось так, что под ним известно как минимум три проекта разных авторов. Здесь речь идёт про наиболее известный из них, созданный Романом Соколовым в 2019 году. На Хабре было опубликовано несколько авторских статей с подробным описанием конструкции, из которых, собственно, я и узнал о её существовании. Если вам интересно получить подробности из первых рук, привожу ссылки на эти публикации, а если нет, всё равно придётся узнать, но из вторых рук — перескажу их своими словами.
- ESPboy гаджет для ретро игр и экспериментов с IoT
- Игровая консоль и игры к ней своими руками. Little Game Engine + ESPboy
- Часть 2: Mодули и AppStore
- Часть 3: Продолжаем пилить мультигаджет ESPboy2 для ретро игр и экспериментов с IoT в 2021
За четыре года проект прошёл несколько итераций, и на данный момент существует как в виде нескольких довольно симпатичных готовых устройств (ESPboy1 и ESPboy2) размером примерно в полтора спичечного коробка, выполненных в DIY-эстетике, так и в виде наборов для сборки разной сложности, с SMD или DIP (ESPboy easy DIY) компонентами. Схема и плата устройства находятся в открытом доступе для полностью самостоятельного повторения, также в нескольких версиях: как в полноценной, соответствующей готовому устройству, так и в максимально упрощённой (ESPboy DIY), без ряда второстепенных элементов.
Некоторые версии ESPboy. Фото Романа Соколова
В основе устройства лежит ESP8266 — недорогой микроконтроллер для IoT. Не такой мощный, как его старший брат ESP32, с небольшим количеством ОЗУ, одним ядром и меньшей тактовой частотой. Тем не менее, он имеет те же самые встроенные беспроводные возможности, и он на порядок мощнее, чем классический Arduino на ATmega64 — 160 MIPS, 80 килобайт ОЗУ, 4 мегабайта Flash-памяти. С одной стороны, это даёт более широкие возможности, с другой — всё ещё представляет некоторый челлендж и необходимость оптимального применения имеющихся системных ресурсов.
Для отображения графики используется цветной TFT-экранчик разрешением 128 на 128 точек с контроллером ST7735 и интерфейсом SPI (также была версия с монохромным OLED, как у Arduboy). Для подключения кнопок используется расширитель портов MCP23017 на шине i2c. Есть маленький динамик и одиночный RGB-светодиод на чипе WS2812B. В оригинальной версии также присутствует ЦАП MCP4725 для программного управления яркостью подсветки экрана, он исключён в упрощённых DIY-версиях.
ESPboy1 без корпуса
Изюминкой же проекта можно назвать наличие слота расширения в виде стандартного двухрядного 20-контактного IDC разъёма. На него заведены GPIO от расширителя порта и некоторые линии самого ESP8266. Это позволяет создавать разнообразные дополнительные электронные устройства, подключаемые к самому ESPboy, который выступает в роли хоста и контроллера. Среди таких устройств, разработанных самим автором проекта — миниатюрная QWERTY-клавиатура, погодная станция, GSM-телефон, GPS-навигатор и пара десятков других.
Разные версии ESPboy1 и прототипов модулей для него
Разумеется, железо мало что значит без программного обеспечения, и наполнение таковым своей вновь созданной платформы является главнейшей головной болью создателей подобных устройств. Даже если платформа рассчитана на привлечение энтузиастов, которые сами напишут программы, нужно сначала набрать критическую массу программ, часто игровых, чтобы привлечь внимание этих самых энтузиастов. Роман проделал огромную работу и в этой области. Конечно, один человек не в состоянии написать достаточное количество ПО с нуля, и он пошёл другим путём — портировал различные проекты с аналогичных платформ.
Программирование для ESPboy штатно осуществляется на языке C++ в Arduino IDE или VSCode+Platform I/O, с использованием Espressif SDK и библиотек для используемых компонентов — экрана, ЦАП яркости экрана, расширителя портов.
Оригинальное ПО платформы в основном сосредоточено вокруг дополнительных модулей расширения. Полностью оригинальных игр, созданных специально для этой платформы, очень мало. Но есть немало игр, перенесённых с Arduboy, Gamebuino и Pokkito. Эти порты сделаны с минимальными изменениями, без переделки графики и разрешения экрана. То есть игры от Arduboy показывают не на весь экран и по-прежнему монохромные, но от этого не менее играбельные, чем в оригинале.
Также на платформу перенесены некоторые виртуальные машины, позволяющие запускать написанное для них ПО. Это современные Little Game Engine и MicoJS, имеющие браузерные IDE, а также классические CHIP-8 и SUPER-CHIP. По причине использования ESP8266, а не более мощного ESP32, платформе слегка не хватает мощности (и особенно памяти) для качественной эмуляции игровых платформ прошлого, однако есть и несколько эмуляторов — ZX Spectrum 48K, Game Boy, Dreamcast VMU.
Некоторые игры для ESPboy, работающие на Little Game Engine
Вероятно наиболее интересной частью ПО платформы является магазин приложений. Это не совсем магазин, так как приложения не продаются, а просто скачиваются, но суть та же — место, где выложены уже собранные, готовые к запуску проекты, которые можно загрузить на устройство, не прибегая к использованию Arduino IDE. Таких магазинов даже два. Один браузерный, WebAppStore, позволяющий загружать ПО в подключённое кабелем к компьютеру устройство прямо из веб-браузера (Chrome или Edge, у меня работает через раз), а другой встроен в большую часть приложений для устройства — при включении можно зажать кнопку A, и тогда вместо приложения появится интерфейс загрузки программ из Интернета через беспроводное подключение. При выборе нужной программы ESPboy перепрошивает сам себя и позволяет пользоваться этой новой программой, из которой также можно попасть обратно в список приложений.
WebAppStore для ESPboy в Google Chrome
Нужно отметить, что так как проект по большей части является детищем одного человека, во многом он ощущается больше как proof of concept, чем готовый потребительский продукт — тот самый дух экспериментов и DIY со всеми его особенностями. Поэтому устройство едва ли можно рассматривать в качестве практической игровой платформы для запуска тех же эмуляторов старых приставок, и, в зависимости от версии устройства, даже с самыми простыми вещами порой приходится повозиться (типа подключения кабеля и загрузки программ).
AppStore2 на ESPboy. Можно выбирать программы для загрузки по категориям и жанрам
Резюмируя вышеперечисленное, я бы сказал, что концептуально ESPboy пытается усидеть на всех стульях разом. Он и миниатюрное игровое устройство, и универсальная платформа для технического творчества, и STEM-устройство, и для простых пользователей, и для энтузиастов DIY, и сборник игр с аналогичных устройств. И это довольно неплохо с точки зрения уже вовлечённого пользователя, но с другой стороны, возможно, такой широкий посыл и несфокусированное объяснение сути проекта создают сложности с привлечением новых пользователей. Впрочем, проект в любом случае довольно успешен, у него даже есть клоны, повторяющие схемотехнику и совместимые программно, но с иным конструктивом — несколько японских (раз, два, три), польский, французский ESPgirl.
▍ Мой опыт
В тему конструирования устройств на микроконтроллерах я зашёл со стороны голых AVR ATtiny и ATmega (AT89/AT90 не застал), ISP-программаторов и ассемблера, а новомодный Arduino, как и в целом программирование микроконтроллеров на C, как истинный изобретатель велосипедов, довольно долго обходил стороной, считая, что это слишком просто и неинтересно. Но когда всё же случилось познакомиться с этой платформой, оказалось, что это очень удобно для прототипирования и отладки, и с тех пор она стала моим очевидным выбором в качестве стартовой точки для всех новых начинаний.
До того, как я узнал про существование ESPboy, я уже несколько лет знал про ESP8266. Он иногда встречался в самоделках Алекса Гайвера, и я всё собирался поэкспериментировать с этим контроллером на предмет полезности его для моих проектов, но никак не доходили руки. В 2019 году со мной связался Роман и попросил помочь со звуком в Little Game Engine, предложив предоставить экземпляр железки для экспериментов. Это был неплохой повод наконец позаниматься ESP8266, и я согласился.
С тех пор мы начали регулярно общаться, и я периодически помогал с разными проектами в области звука на ESPboy, в частности с адаптированием кода библиотек и игр для работы с имеющимся железом: у ESP8266 нет полноценного ЦАП, типично используется программный ШИМ или аппаратный sigma-delta модуль, а также другой набор таймеров, поэтому часто требуются некоторые переделки звукового кода.
ESPboy сыграл для меня роль отладочного экспериментального стенда. Я сделал для него порты некоторых своих биперных музыкальных движков, простейший эмулятор ZX Spectrum 48K, эмулятор чипа AY-3-8910 с проигрывателем формата PT3, адаптированного из библиотеки libayfly. Также я сделал версии пары своих музыкальных альбомов биперной музыки, System Beeps и Faulty Robots, и портировал популярный проект TZXduino для загрузки программ в ZX Spectrum через кассетный интерфейс.
Порт TZXduino с самодельным модулем для подключения загрузочного провода
С помощью ESPboy я делал первые наброски своего проекта hway, аппаратного плеера чиптюнов с реальным звуковым чипом AY-3-8910 (об этом тоже есть статья на Хабре), проверив идею с тактированием звукового чипа через i2s линию. Собственно, схема hway получилась очень похожей, в неё используется тот же ESP8266 в качестве основного контроллера, OLED-экран и расширитель портов для подключения звукового чипа. Я и далее продолжаю использовать ESPboy для прототипирования элементов собственных устройств, в частности, для экспериментов со звуковыми чипами, которые подключаю в виде самодельных плат расширения.
Тестовая плата для звукового чипа YM2151
Не могу сказать, что опыт работы с платформой был полностью положительным. Довольно часто возникают проблемы, связанные с инфраструктурой Arduino IDE при одновременном её использовании для других платформ и проектов. В частности, обновляются зависимые библиотеки и перестаёт работать ранее собиравшийся код старых чужих и собственных проектов, а его исправление отнимает время и силы. Есть некоторые проблемы совместимости между версиями (в ранних версиях был изменён пин выбора дисплея) и необходимость отдельной настройки библиотеки TFT_eSPI, которые сбиваются при её обновлении. В общем, это DIY как он есть.
▍ Версии
За всё это время у меня собралась небольшая коллекция из нескольких версий ESPboy, по которой интересно проследить развитие проекта.
Первая версия в виде готового устройства в DIY-эстетике. Корпус выполнен из трёх печатных плат, скреплённых в бутерброд с помощью монтажных столбиков. Верхняя и нижняя платы представляют собой крышки корпуса, на средней плате распаяны отдельные модули ESP8266, экрана, зарядки, а также прочие не модульные компоненты.
Первая версия ESPboy1
Из органов управления у ESPboy есть крестовина из отдельных кнопок и две основные кнопки действия, поначалу никак не обозначенные, со временем получившие названия ACT и ESC. В первой версии это обычные щёлкающие тактовые микрокнопки, которые нажимаются штоками из винтиков на пружинках, с запаянными гайками-толкателями снизу. Очень специфическая конструкция, не способствующая точности управления в динамичных играх, но визуально смотрится интересно.
Конструкция кнопок с винтиками и пружинками
Также у каждого ESPboy есть две дополнительные кнопки, расположенные в очень малозаметных местах слева и справа в верхней части корпуса. Этот тип кнопок показал себя очень ненадёжным, с пропадающим щелчком, и при первой встрече с ними я даже не понял, что это кнопки. Помимо кнопок есть движковый выключатель питания и также движковый выключатель звука. Регулировки громкости не предусмотрено, звук сам по себе очень тихий.
Вторая версия имеет аналогичный конструктив бутерброда печатных плат. Она была получена мной уже в виде набора для самостоятельной сборки. В набор входила основная печатная плата с уже распаянными кнопками и SMD-компонентами, в частности с MCP23017. Более крупные элементы и корпус требовалось собирать и паять самостоятельно.
Вторая версия ESPboy1
В этой версии сохранилось спорное решение с конструкцией кнопок, но вместо тактовых щёлкающих кнопок были использованы резиновые с тактильным ощущением нажатия без слышимого щелчка. Стало незначительно лучше. В остальном у версии всё те же проблемы с неудобством подключения проводов.
Особенностью этих двух версий являлось неудобное расположение разъёма USB для перепрограммирования ESP8266. Доступный снаружи разъём служит только для зарядки аккумулятора, а полное перепрограммирование по проводу (например, если выход в перепрошивку в загруженной программе отсутствует) предполагалось только беспроводное. Для разработки же нужно было разбирать корпус для доступа к разъёму Micro-USB, причём он перекрывал кнопки, и к тому же нужно было использовать узкий разъём. Да и для подключения к разъёму зарядки подходил не всякий кабель. Поэтому большую часть времени ESPboy проводил у меня в таком вот несобранном виде.
Расположение разъёма для программирования через Micro-USB
Версия третья, красивая и презентабельная, но тем не менее сохранившая эстетику DIY.
ESPboy v2, красивый, но уже потёртый за время эксплуатации
Это полностью собранная версия с рядом улучшений. Прежде всего, она получила симпатичный корпус из оргстекла, нарезанного слоями и соединённого в бутерброд. Также вместо отдельных модулей ESP8266 и зарядки все элементы распаяны на единой основной плате. В результате единственный разъём Micro-USB теперь совмещает функции зарядки аккумулятора и программирования контроллера, и для этого не требуется разбирать устройство и подбирать особые кабели. Очень удобно.
Для управления теперь используются резиновые кнопки, аналогичные предыдущей версии, но конструкция из винтиков и пружинок была упразднена, теперь нажатия происходят непосредственно пальцами на кнопки, управление стало значительно точнее и приятнее.
И ещё об одной версии я расскажу отдельно.
▍ Немного DIY
Из последних новостей проекта — выход новой DIY-версии, полностью на выводных компонентах и без излишеств, которую проще всего собрать самостоятельно из набора, или из самостоятельно заказанных печатной платы и компонентов. Как раз недавно я получил такой набор и собрал его во время подготовки текста к публикации.
Эта версия также имеет конструктив в виде бутерброда из печатных плат. Точнее, основная плата одна, и можно оставить устройство в таком виде. Однако с помощью монтажных столбиков можно добавить ему заднюю стенку из точно такой же, но не распаянной платы, чтобы не касаться пальцами стороны с пайкой и выводами компонентов. Между платами можно при желании разместить плоский Li-Ion аккумулятор и зарядный модуль. Впрочем, также возможен вариант с питанием от трёх батареек AAA и размещением отсека для батареек на задней стенке.
Набор компонентов перед сборкой
В качестве органов управления используются самые стандартные тактовые кнопки, движковый выключатель питания. На этот раз у устройства значительно более громкий динамик (если не отклеивать бумажную наклейку, с которой он продаётся, есть такой забавный момент) и есть аналоговый регулятор его громкости.
Я спаял всё по видеоинструкции без особых проблем примерно за полчаса. Качество платы хорошее, последовательность действий понятная. Самыми сложными моментами для человека, нечасто имеющего дело с пайкой, пожалуй, будет RGB-светодиод, у которого очень кучно расположены выводы, а также выводная гребёнка для экрана, которая паяется с одной стороны, а другая оказывается закрытой уже припаянным разъёмом расширения.
Расположение всех элементов подписано, ошибиться трудно
В принципе, можно не устанавливать светодиод, а также разъём расширения, обычный диод и блокировочный конденсатор по питанию — устройство будет работать и без этих компонентов. Регулятор громкости можно также исключить, замкнув соответствующие выводы на плате. В общем, есть возможности обойти сложные моменты, что хорошо подходит для любителей.
Я пошёл по пути повышенной сложности и внедрил в конструкцию аккумулятор. Для этого пришлось модифицировать платку зарядного модуля заменой одного резистора для выставления правильного тока заряда и обрезать её выступающую часть. Плата зарядного модуля была приклеена на двухсторонний скотч, аккумулятор же достаточно надёжно держится просто между верхней и нижней платами.
Размещение аккумулятора между двумя платами
Единственная проблема возникла только в конце сборки: устройство просто не заработало как надо. Игру удавалось загрузить, был звук, но вместо изображения белый экран, постоянно горящий светодиод, и наблюдалась какая-то не очень адекватная реакция на кнопки. С наскока, а именно осмотром на предмет замыканий, пропайкой всех соединений, промывкой от флюса, эту проблему решить не удалось. На следующий день я нашёл другую платку ESP8266, заменил её (пришлось отпаять и экран), и всё заработало. Внешний вид от перепайки экрана и контроллера слегка пострадал. Бывает и такое.
Готовое рабочее устройство
Так как у меня в комплекте было три платы, две обычные и одна экспериментальная, я планировал собрать не одно, а сразу два устройства: одно по предлагаемому автором конструктиву бутерброда из двух плат и с аккумулятором вместо батареек, другое на экспериментальной плате с батарейным отсеком и самодельным подобием корпуса. Однако на момент сборки у меня неожиданно не оказалось под рукой некоторых деталей (кнопок и столбиков нужной высоты, углового разъёма под расширение), чтобы сделать всё красиво, и пришлось отложить это дело до лучших времён.
Ещё с первой версии устройства я хотел сделать самодельный корпус с помощью 3D-печати, но тогда Роман опередил меня выпуском красивой версии в корпусе из оргстекла. Теперь же у меня появился шанс взять реванш, и я вырезал на лазере пару элементов также из оргстекла. Так как не удалось продемонстрировать эту задумку фотографией готового устройства, опишу её на словах. В переднюю панель из оргстекла вставляются круглые пластиковые кнопки диаметром 5 мм. Тактовые кнопки используются со штоком большой высоты, высота подгоняется до соответствия с верхней панелью. К задней сплошной панели приклеивается готовый батарейный отсек с крышкой и выключателем. Между передней панелью и платой ставится высокий столбик, а задняя прикручивается к нему вместе с платой через проставку (шайбу) одним винтиком.
Корпусные детали — две пластины из оргстекла, пластиковые кнопки, покупной батарейный отсек с крышкой
Эта ситуация, когда при сборке возникли разнообразные проблемы — неплохая демонстрация духа DIY (а вы подумали — реклама?). Не всё всегда идёт гладко и не у всех проблем есть быстрое, проверенное решение. В этом есть и своя романтика, героическое преодоление вновь создаваемых трудностей, и порой раздражающий фактор, и где-то здесь находится грань между самоделками и готовыми серийными устройствами больших, пусть даже китайских, корпораций.
▍ Заключение
Подводя итог, можно сказать, что самодельные портативки по большей части являются чудной, модной диковинкой, не решающей каких-то конкретных задач. Тем не менее, они могут послужить неплохой отправной точкой для освоения микроконтроллеров, изучения основ электроники и вычислительной техники для детей и взрослых, платформой для творчества, забавой для скучающих крутых инженеров и программистов. Также это возможность приобщиться к разработке в условиях ограниченных ресурсов, прямо как в старые добрые времена, но без хардкора в виде древнего ассемблера и подсчёта байт.
В статье не нашлось место для упоминания весьма успешного проекта Flipper Zero, так как на мой взгляд он всё же является собственным форматом устройства как по набору возможностей, так и по внешнему дизайну, и DIY он только в программной части. Тем не менее, это довольно интересное устройство, создатели которого, кажется, смогли-таки понять, кто же их целевая аудитория, и зачем ей нужно их устройство. Об этом проекте есть множество статей на Хабре — рекомендую тем, кому тема показалась интересной.
Автор: Александр Семенов