Возможно, вы слышали про дешёвый жёлтый дисплей, он же CYD (Cheap Yellow Display). Если нет, то это плата с ESP32, с дисплеем, жёлтая и, сюрприз, дешёвая. У платы достаточно активное сообщество, хотя готовых проектов не так уж много. Но на Instructables мне встретился один, который использует эту плату для создания ретро-консоли. При этом она получилась приятной на вид и рекомендуется самим сайтом (то есть имеет метку featured). Поэтому я сразу захотел собрать её.
В данной статье расскажу о процессе создания этой консоли полностью в домашних условиях, который не обошёлся без небольшой и, как оказалось, простой головоломки. Покажу, как она работает, и расскажу, сколько действительно она стоит. Если вы размышляли, что бы такое собрать самому, то, возможно, вам будет интересно почитать про данный проект.
Рекомендации к чтению
Воспринимайте эту статью больше как дополнение к основной инструкции по сборке ретро-консоли. В моей статье больше будет рассказано про проблемы и особенности, с которыми столкнулся я, но без подробных инструкций, как повторить проект.
Статья состоит из четырёх частей: введение, разработка и сборка, обзор (с видео), выводы. Вы можете смело переходить к тому разделу, который считаете более интересным.
❯ Оглавление
❯ Введение
Началось всё, на самом деле, просто. В какой-то момент мне в рекомендациях стали попадаться разные гаджеты, один из которых был Cardputer. Это небольшое интересное устройство на ESP32, но о нём не сегодня. Просто потом я как-то заинтересовался больше ESP32 и гаджетами, поэтому очень быстро наткнулся на такое устройство, как Cheap Yellow Display (CYD), или дешёвый жёлтый дисплей.

Повторюсь, но по своей сути CYD это устройство с ESP32, с экраном, в желтом цвете. Оригинальный CYD имел кодовое название 2432S028R, точно не знаю как оно расшифровывается, но скорее всего 028 означаете 2,8 дюйма диагональ экрана, а R в конце — это резистивный тачскрин. В нем используется классическая ESP32, TFT экран 320х240 и если говорить о цене, то его легко можно приобрести за 600 рублей (но с долгой доставкой).
Как вы могли догадаться, с популярностью данного устройства появились и другие модели, например, с диагональю 3,5 и 5 дюймов, но также и с емкостным тачскрином (в конце стоит C), а некоторые даже другой микроконтроллер ESP32-S3. Поэтому, при желании есть из чего выбирать. В интернете нет полного списка всех моделей CYD, но я нашел лайфхак — зайти на проект M5Launcher и выбрать CYD, после чего появится понятный список.
Про другие модели я тогда ещё не знал, да интересно по большей счету оригинальное устройство. Поэтому в данной статье будет разговор о 2432S028R и если вы захотите повторить проект из статьи на другом устройстве, то оно может не заработать.
Из интересного, название CYD появилось, кажется из вот этого ролика на YouTube. Автор этого же канала, создал проект на Github, в котором собрал всю необходимую информацию о данном устройстве (даже принципиальные схемы имеются). Думаю, если вы интересовались, то уже посещали эти ссылки.
Одна из первых мыслей, которая меня посетила, это узнать какие есть готовые проекты на этой плате. Сходу находится вот этот список с готовыми проектами для этой платы, но больше всего меня привлекло внимание проект ретро-консоли на Instructables.

Первое, что бросалось в глаза, — то, что консоль выглядит приятно. Это не куча проводов с макетной платой и большими кнопками, какие часто попадаются в сети. Ответ, как мне кажется, находится в том, что для данного проекта используется своя печатная плата. А с учётом того, что CYD сам по себе законченное компактное устройство, то если соединить эти два компонента, получается плотная компоновка. И главное, всё это обёрнуто в корпус, напечатанный на 3D-принтере.
С корпусом проблем не должно быть: у меня есть 3D-принтер, и его можно распечатать. А вот печатную плату заказывать никак не хочется, но я посмотрел и сделал вывод, что печатную плату можно сделать самому на фрезерном станке. Только есть один нюанс: принципиальной схемы или разводки печатной платы на странице проекта нет, но есть же Gerber-файл. Поэтому должно получиться, если в него подглядеть.
❯ Разработка и сборка
❯ Детали
Вот перечень материалов для созданиях данной консоли:
CYD.
Расширитель выводов PCF8575.
Провод с разъемом JST 1,25 мм с 4-мя выводами (мое дополнение: ещё 2-х контактный).
Модуль TP4056 c USB Type-C.
SMD кнопка (4х4x1.5mm).
Переключатель питания (SS-12F23).
Винты M3 на 16 мм.
Динамик (8 Ом).
PSRAM.
Резисторы 0603, 22кОм и 47кОм (не пригодились).
Литиевая батарея 503035 3.7В.
Резисторы 1206, 0R (мое дополнение).
Коротко распишу каждый пункт и то, что я с ним сделал.
CYD
Брать стоит версию 2432S028R. Возможно версия с емкостным экраном тоже подойдет, но можно не переплачивать, т.к. вместо тачскрина все равно будут кнопки. Как вы понимаете, если вы возьмете, например, CYD с экраном отличным от 2,8 дюйма, то в корпус он не поместится.
PCF8575
В CYD мало портов ввода/вывода или другими словами мало доступных для подключения выводов. Но нашлось интересно решение, использовать плату-расширения, которая работает по I2C, потому что как раз разъем для подключения I2C есть на плате. На этом модуле есть 16 GPIO.
Разъемы JST
На плате есть два разъема, один для подключения I2C устройства и одно для подключения динамика. Оба JST с шагом 1,25мм, один с 4-мя контактами, другой с 2-мя. Я не стал искать легкого пути и решил обжать эти разъемы самостоятельно. Для этого купил вот этот наборчик разъемов.

Обжимаются очень сложно, если есть вариант взять готовый, то лучше так сделать. У меня есть кримпер, так он такие маленькие не обжимает, пришлось припаивать и обжимать плоскогубцами. На один удачно обжатый таким образом разъем у меня по началу приходилось две, а то и три попытки.
Модуль TP4056
Народный модуль заряда, но есть нюанс: он с USB Type-C. Если возьмёте другой, то размеры могут не совпасть — надо будет подправить разводку платы.
Не забываем заменить резистор PROG. В модуль обычно устанавливают резистор на 1,2 кОм, и получается ток зарядки 1 А. Я часто ставлю 2,4 кОм, и тогда получается ток зарядки 0,5 А.
SMD кнопка
Кнопка, как кнопка. Когда-то я купил вот этот наборчик, и там как раз оказалось ровно 10 кнопок.

Выключатель питания
Большой выключатель питания.
Винты M3
И тут мне опять помог наборчик, но уже с винтами. Винты вкручиваются прямо в пластик, без каких либо гаек.

Динамик
В инструкции предлагалось использовать один динамик, но у меня уже был очень дешевый и простой 8-омный динамик, поэтому я взял его. Звук, конечно, не очень, но не совсем плохо.
PSRAM
Для работы ретро-консоли нужно будет припаять отдельную микросхему с 4Мб оперативной памяти. Брал ESP-PSRAM64. Инструкции по добавлению этой микросхемы можете почитать в инструкции проекта или на странице в Github.
0603 резисторы
Эти резисторы нужны для того, чтобы улучшить характеристики звукового усилителя. Например, на плате R8 и R7 могут быть 0 Ом резисторы, тогда их нужно будет заменить, но у меня все было хорошо и эти резисторы не пригодились.
Литиевый аккумулятор
У меня не нашлось аккумулятора 503035, но здесь главное, чтобы высота была не больше 5мм, а такой аккумулятор у меня уже был, хоть и в два раза меньше (на 300 mAh), но все равно.
1206 резисторы
Эти резисторы единственное дополнение, которое пришлось мне добавить. 0 Ом резисторы я использую как перемычки на печатной плате.
❯ Ещё детали
Эти детали не упоминаются в инструкции, но их можно привести для общей картины:
SD карта
Двухсторонний скотч
Провода
Пластик
Коротко о каждой:
SD карта
Пробовал на многих проектах с ESP32, где нужна SD карта и везде все что больше 2Гб, не видит. M5Launcher видит, а вот Bruce или другие прошивки (Retro-Go не исключение) не видят, что на Cardputer, что на CYD. Поэтому берите лучше 2Гб SD карту.
Двухсторонний скотч
Лучше тоньше, если взять толстый, то крышка корпуса может не закрыться.
Провода
Для разъемов JST провода должны быть очень тоненькими, а для подключения питания, наоборот толстые.
Пластик
Минимум 2 цвета: один на корпус, другой на кнопки.
❯ Печатная плата
Теперь перейдем к, как мне кажется, самому интересному для меня части — разработка печатной платы. Она такая потому, что эта как последний кусочек головоломки, после которой вся картина становится целой и дает право, чтобы начать заниматься проектом.

Напомню, что в инструкции предлагалось заказать изготовление печатной платы и приложен файл Gerber. Мне же хочется её сделать самому на фрезерном станке, но ключевое здесь то, что до этого я ещё не пробовал восстанавливать принципиальную схему и разводку по Gerber файлу. Поэтому гадал можно ли это сделать и как оно получится у меня.

Для проектирования печатных плат я пользуюсь EasyEDA, вот только в ней нельзя открывать Gerber файлы и использовать их в своих проектах. Но решение нашлось быстро, потому что в KiCad можно открыть Gerber файл для просмотра и экспортировать увиденное в файл разводки. Потом я этот файл разводки импортировал в EasyEDA и у меня получилось создать печатную плату подглядывая в тот файл разводки.


По принципиальной схеме нечего добавить — в основном одни кнопки.
А вот по разводке есть пара нюансов. Так как я делаю плату на фрезерном станке, то выставил безопасное расстояние 0,27 мм, потому что приблизительно столько у меня получается без проблем снимать фрезой. Исходя из этого поставил ширину дорожек 0,4 мм. У этого есть несколько причин: они фрезеруются без проблем, в отличие от 0,2 мм (какие были в оригинальной инструкции), и нельзя поставить больше, так как дорожка должна проходить между отверстиями.
Ещё именно на разводке добавил резисторы 0R в виде перемычек — получилось 4 штуки. Этот способ мне подсказали на Хабре в комментариях к прошлой моей статье, и теперь я часто им пользуюсь.

Во FlatCAM (приложении для создания управляющей программы для фрезера) я поставил плату вертикально так, чтобы уместилось две платы на лист текстолита 100×150 мм, и решил снять всю медь. На скриншоте всё, что синее, снимается. Правда, я не заметил, как осталось два пустых поля, но ничего — я даже не стал их снимать вручную, так как они не мешают.
Фрезеровка заняла у меня где-то 6 часов: 1,5 часа — изолированный слой (указанная толщина фрезы 0,27 мм), 1,2 часа — промежутки между изолированным слоем и слоем без меди (толщина 0,27 мм), 2,5 часа — слой без меди (толщина 0,9 мм). Возможно, так долго, потому что скорость в этот раз я уменьшил на 20%, так как текстолит оказался прочнее обычного.


После станка плату пришлось дорабатывать чертилкой, так как во многих местах медь не счистилась. Но конечный результат уже вышел хорошо.

Здесь можно видеть шелкографию. Много мест, где не отпечаталось, но я обычно так и оставляю, если все надписи можно прочитать или догадаться, что там написано. В противном случае надо было бы переделывать её. А так — плата же в корпусе, шелкографию можно и не делать.
Ещё вы могли обратить внимание, что текстолит серого цвета. Это я недавно заказывал дешёвый текстолит из Китая. Мне очень нравится, как он выглядит, и шелкография ложится приятно, но почему-то фрезеруется плохо и пыли больше (а может, это мой станок потрепался?). Поэтому в будущем от него откажусь.
Рассуждения о страхах при передачи Gerber файлов
На самом деле интересный вопрос. Допустим, вы заказываете платы на стороне и отдаёте Gerber-файл — ведь ничего страшного нет? Оказалось, что в целом восстановить печатную плату по Gerber-файлу более чем реально, и обеспокоенность этим оправдана.
Но на самом деле об этом никто сильно не переживает. На то есть причины. Восстановить принципиальную схему сложно, так как не до конца известны компоненты. Другими словами, вместо одних компонентов могут «пролезть» другие. Особенно это чревато конденсаторами, резисторами, которые никак не подписаны (но если заказывать сборку, то и эту информацию можно узнать).
Другая причина — нет никакой сопроводительной документации о ПО, о том, что это за плата и где она будет использоваться.
Но в целом этот вопрос меня давно волновал. А что вы по этому поводу думаете?
❯ 3д печать
Перед тем как приступать к сборке, стоит рассказать про корпус на 3D-принтере.
Файлы моделей можете посмотреть на Thingiverse. Всего имеется два вида корпуса, один, который нужно разбирать, чтобы перепрограммировать, другой, наоборот, с разъемом под USB от CYD и место для кнопки BOOT. Я выбрал второй вариант. Главное понимайте, что если вставить одновременно в разъем питания провод и в разъем USB от CYD, то может произойти что-то неприятное, так как никаких защит нет. Поэтому отключаете питание и вставляете USB провод от компьютера.
При печати возникли некоторые сложности, кнопка BOOT плохо печаталась, слипалась на первом слое, пришлось поднять Z offset на своем принтере, стало лучше, но все равно не очень. Она плохо нажимается, но все же нажимается. У меня плата прошивается и без нажатия на BOOT, но один раз пришлось её нажать, так как до этого была неудачная операция прошивки.
Другая проблема, что кнопки туго влезали в свои места, решается масштабированием кнопок в 0,975 раз. Меньше лучше не стоит, они у меня и так немного, но болтаются.
❯ Сборка
Из сборки, самое сложное, кроме обжимания JST с шагом 1,25мм, это припаять PSRAM. Там надо будет отпаять светодиод, перерезать две дорожки, припаять на посадочное место микросхему и ещё припаять два проводка. Получается так, что CYD для полноценной работы придется дорабатывать, но как по мне это добавляет больший задор.
Ещё есть нюанс, лучше чтобы на верхнем слое печатной платы припаянные разъемы не заходили за высоту кнопок, а они очень тоненькие.
Когда вы будете припаивать провода к разъемам S1 и S3, то возникнет вопрос откуда автор узнал, что они значат? Ответ, как потом я понял, очень простой, в репозитории CYD лежит готовая принципиальная схема, на которой все подписано.

❯ Retro-Go
Теперь пришло время приступить к программной части, а именно к установке Retro-Go. Retro-Go это платформа с эмуляторами, очень популярная и много что поддерживается, эдакий RetroArch для встраиваемых систем на ESP32. Создатель инструкции CYD ретро-консоли добавил поддержку этой платы в Retro-Go.
Теперь осталось прошить и запустить её. Запускаю и у меня на экране полоски. Видно, что экран не определился. Придется пересобирать программу самому.

Для того, чтобы пересобрать Retro-Go нужно установить ESP-IDF. Я установил последний и на самом деле компиляция очень простая, надо зайти в папку retro-go и выполнить python rg_tool.py --target=cyd release launcher retro-core prboom-go gwenesis. Эту команду подсмотрел в Docker файле.
После того, как скомпилировал сам прошивку, зашил её и убедился, что полоски остались, стал разбираться как это исправить. Могу сказать, что кнопки заработали сразу, а звука не было, но позже я узнал, что звука в меню нет, только в играх.
Пришлось править файл config.h:
#define ST7789_MADCTL 0x36 // Memory Access Control #define ST7789_MADCTL_MV 0x20 #define ST7789_MADCTL_MX 0x40 #define ST7789_MADCTL_MY 0x80 #define ST7789_MADCTL_RGB 0x00 #define ST7789_MADCTL_BGR 0x08 #define RG_SCREEN_INIT() \ ILI9341_CMD(ST7789_MADCTL, (ST7789_MADCTL_BGR | ST7789_MADCTL_MY | ST7789_MADCTL_MX)); \ ILI9341_CMD(0xC0, 0x1B); /* Power control //VRH[5:0] */ \ ILI9341_CMD(0xC1, 0x12); /* Power control //SAP[2:0];BT[3:0] */ \ ILI9341_CMD(0xC5, 0x32, 0x3C); /* VCM control */ \ ILI9341_CMD(0xC7, 0x91); /* VCM control2 */ \ ILI9341_CMD(0xB2, 0x0C, 0x0C, 0x00, 0x33, 0x33); /* Porch Setting (0x0C, 0x0C=Std or 0x0F, 0x0F=Slow */ \ ILI9341_CMD(0xC6, 0x03); /* ST7789 Frame Rate Control (0F=60, 07 to 00=75 to 119, 6Hz steps) */ \ ILI9341_CMD(0xB6, 0x0A, 0x82); /* Gate Scan Direction (82=Std, A2=Inv, 22=Alt) */ \ ILI9341_CMD(0xF6, 0x21, 0x00); /* Interface Control (01=Std, 21=Interleave */ \ ILI9341_CMD(0xE0, 0xD0, 0x00, 0x05, 0x0E, 0x15, 0x0D, 0x37, 0x43, 0x47, 0x09, 0x15, 0x12, 0x16, 0x19); \ ILI9341_CMD(0xE1, 0xD0, 0x00, 0x05, 0x0D, 0x0C, 0x06, 0x2D, 0x44, 0x40, 0x0E, 0x1C, 0x18, 0x16, 0x19); \
Первую ошибку я исправил достаточно быстро, т.к. на моем фото с дефектом вы могли заметить, что есть выраженные полоски. Я сразу понял, что это относится к Interleave (чередование). Поставил и экран ожил, но текст был верх ногами.
В итоге я нашел даташит по ILI934 и узнал, что по команде 0x36 можно инвертировать направление строк и столбцов. Поменял и все заработало.
Хотя, что-то было странное, оказывается цвета были инвертированы, убрал нужную строчку и все уже заработало правильно.
Ещё наверно надо сказать немного слова про BIOS файлы, они нужны для эмуляции. Никто их в открытую не распространяет, но есть занятный лайфхак, который я использую — эти файлы можно взять с SD карты, которая идет в комплекте с ретро-консолью, например, r36s. Их там пока кладут охотно.
❯ Обзор
Сборка прошла успешно и приставка теперь полностью функционирует. Давайте посмотрим как оно работает, вдруг вам интересно на что оно способно.
Я записал для вас видео, чтобы вы могли все посмотреть сами, но текстом приведу свои выводы.
Лучше всего работает или эмулируется NES или Денди. Разрешение её игр 256×240 или 256×224, масштабирование можно убрать и это будет почти на полный экран. Другими словами, выглядит без искажений, но самое главное не тормозит. Это скорее всего потому, что она 8-ми битная.
Лучше всего картинка это у Sega Mega Drive у неё как раз разрешение 320х240, но умеренно подтормаживает и это если не включен звук. Звук, кстати, выключен по-умолчанию, а с включенным звуком тормозит очень сильно, играть невозможно.
Хуже всего работает SNES, выглядит может быть и красиво, но тормозит ужасно как со звуком, так и без.
Лучше всего по производительности это эмуляторы Game Boy и Game Boy Color. Работают быстро и шустро, но разрешение у них заметно меньше (160x144), если такое выставить, то будет еле все видно. Поэтому без масштабирования играть никак, оно хоть и искажает немного, но играть приятно, сильного дискомфорта нет.
А вот DOOM работает без нареканий, но это скорее всего из-за того, что не эмулируется. Поэтому если писать игру под эту приставку, то можно получить достаточно хороший результат, но это по большей части про 2D-игры.
Сколько приставка работает от одного заряда?
У меня вышло около 2-х часов и 20 минут на полном заряде на 300 мАч литьевом аккумуляторе. Я думал будет в два или в три раза меньше.
Непонятный артефакт

Пока играл, обнаружил, что если бежать персонажем, то при передвижении камеры вправо или влево, появляются вертикальные полоски. Может быть эмулятор, может быть код работы с дисплеем, точно не знаю.
❯ Себестоимость
Давайте ради забавы посчитаем во сколько это обошлось. Действительно ли дешево получилось?

В итоге получаем, что цена за одно изделие (или расходы) — 1225 рублей. Если немного ещё докинуть, то можно было бы купить R36S! Оно может быть и дешёво, но на грани. При этом в таблицу я вписывал самое дешёвое комплектующее.
Другая цифра — 3983 рубля. Это если покупать полный комплект деталей на все случаи, например, 2 килограмма пластика (потому что нужно 2 цвета), а использовать из него только 50 грамм. Остальное, думаю, вы можете сами развить. Например, что можно ещё посчитать и включить 3D-принтер, фрезерный станок, электричество или личное время.
❯ Выводы
Этот проект было приятно повторить, потому что он идеально подходил к моему инструментарию: всё необходимое для создания печатной платы или пластикового корпуса уже имелось. Но главное — конечный результат приятен. Можно взять приставку с полки и начать играть либо достать SD-карту и записать новые игры. Она не занимает много места, и её удобно брать с собой — то есть такое же отношение, как к полноценной приставке. Но назвать эту приставку дешёвой всё же нельзя, а так я её назвал только потому, что используется CYD.
Получившаяся приставка больше близка к DIY-самоделкам, чем к полноценным приставкам. В основном потому, что у неё есть два USB-разъёма, и можно навредить, если одновременно подсоединить оба. Решается это, конечно, просто — печатается корпус без доступа ко второму USB. Это наиболее существенная проблема, но суть не меняется. Можно найти и другие: например, не подписаны кнопки, никак не узнать о состоянии батареи или мало эмулирующих платформ, которые не тормозят. Главное, что она удивляет, так как от самоделок рассчитываешь, что про неё можешь сразу забыть, как только сделал, а тут с удовольствием хочется достать с полки и проверить теорию — как на ней запустится та или иная игра.
CYD однозначно интересное устройство, которое можно пустить на различные самоделки. Например, часто возникает желание выводить какую-нибудь информацию из Home Assistant на дисплей. Возможно, ещё к ней вернусь, но не раньше чем сформируется проект под неё.
И заходите в мою группу Планета M039 в ВК, возможно вы там найдете что-то для себя тоже.
Все файлы проекта можете найти в репозитории cyd-retro-console (прошивка находится в секции Release).
Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале ↩

4external
а почему у корпуса с 3д принтера есть "паттерн", а у Instructables - шероховатый ?
m039 Автор
Это металлическая пластина для нагревательного стола, они бывают шероховатые, а я увидел с узором и взял себе такую.
brammator
мне, когда баловался печатью, очень понравилась фактура от бумажного скотча.
m039 Автор
А я только эти две пластины встречал, а что-то похожее на скотч не видел. Жалко. Сейчас еще раз посмотрел в магазине, действительно их много, но они не охотно попадают в поиске, еще не под каждый принтер, но я это может вскольз сейчас посмотрел.