Еще одна интерпретация легендарного Doom, портированная на микроконтроллер ESP32.

История создания
Идея собрать карманную консоль возникла после глубокого анализа существующих решений. Вдохновившись этим проектом, я обнаружил ряд слабых мест: использование редких комплектующих, вроде специфических джойстиков с I2C-интерфейсом, что неоправданно усложняло сборку и повышало бюджет. Кроме того, хотелось добавить полноценный звук и реализовать поддержку различных игровых уровней.
Техническое задание
Ключевые критерии для устройства: компактный форм-фактор, 2,8-дюймовый дисплей, встроенный аудиовыход мощностью 1 Вт и удобный доступ к слоту microSD для быстрой смены контента без разборки корпуса. В качестве системы управления — классические тактовые кнопки, питание от Li-ion аккумулятора емкостью порядка 1000 мАч.
Электрическая схема

Сердцем системы выступает ESP32 Wrover DevKit с 4 МБ PSRAM. В качестве средства вывода выбран SPI-дисплей ILI9341 (2,8 дюйма), за усиление аудио отвечает модуль на базе NS8002. Поскольку прямое питание от литиевого аккумулятора нецелесообразно, предусмотрен DC-DC преобразователь (использован стандартный на 5В), а 3,3В для карты памяти формируется средствами самого МК.
Компоненты
|
Наименование |
Описание |
Кол-во |
|
МК |
ESP32 Wrover DevKit SPI 4Mb |
1 |
|
LCD |
ILI9341 2,8“ SPI |
1 |
|
MicroSD |
Слот для MicroSD |
1 |
|
DC-DC |
Модуль преобразователя 3.7В => 5В |
1 |
|
NS8002 |
Аудиоусилитель, 3Вт |
1 |
|
Динамик |
FBF28-6F, 8 Ом, 1.5Вт |
1 |
|
АКБ |
Li-ion LP803040 1200mAh |
1 |
|
Переключатель |
Движковый, SS12F20G3 |
2 |
|
Резистор |
SMD 0805, 10 кОм |
6 |
|
Резистор |
DIP 0.125 Вт, 100 кОм |
1 |
|
Конденсатор |
100 мкФ, 6.3×5мм |
2 |
|
Конденсатор |
100 нФ, 0805 |
4 |
|
Разъем |
Гнездо PBS-20, 2.54 мм |
1 |
|
Джойстик |
5-позиционный навигационный модуль |
1 |
|
Кнопки |
Тактовые 12х12 с колпачками |
2 |

Особенности сборки:
-
Выбор Wrover обусловлен наличием достаточного объема PSRAM; встроенный ЦАП позволяет реализовать звуковые эффекты.
-
Дисплей ориентирован на драйвер ILI9341, но прошивка легко адаптируется под популярный ST7789.
-
Управление перемещением реализовано через навигационный модуль, заменяющий полноценный джойстик.
-
Предусмотрен физический тумблер для быстрого отключения аудиопотока.
Монтаж и программная часть
Печатная плата была разработана в Sprint-Layout и изготовлена методом ЛУТ в домашних условиях. При разводке пришлось прибегнуть к перемычкам, чтобы обеспечить доступ к портам USB и слоту карты памяти.
Прошивка осуществляется через среду Espressif ESP-IDF. Используется проверенный проект порта PRBOOM для ESP32.
git clone https://github.com/espressif/esp-idf.git
cd esp-idf
./install.sh
source ./export.sh
Команды для развертывания проекта:
git clone https://github.com/jkirsons/doom-espidf
cd doom-espidf
esptool --chip esp32 --port /dev/ttyUSB0 --baud 115200 --before default_reset --after hard_reset \ write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 \ build/bootloader/bootloader.bin 0x10000 build/esp32-doom.bin 0x8000 build/partitions.bin
Для кастомизации пинов или параметров дисплея воспользуйтесь командой `make menuconfig` перед сборкой.
Для игры потребуются стандартные файлы `prboom.wad` и `doom.wad` (WAD-архивы), которые необходимо записать в корень microSD. При возникновении проблем с запуском (белый экран), воспользуйтесь Serial-монитором для отладки файловой системы.
Конструкция корпуса
Для печати на 3D-принтере спроектирован корпус, учитывающий габариты всех компонентов.

Нюансы сборки корпуса:
-
Дисплей жестко фиксируется в рамке; углы матрицы можно слегка подточить для идеальной посадки.
-
Отверстия для выключателей и разъема заряда удобнее вырезать жалом паяльника, дорабатывая поверхность надфилем.
-
Кнопки «Огонь» и «Действие» монтируются на отдельном фрагменте макетной платы.
-
Для надежной фиксации элементов внутри рекомендуется использовать термоклей, а для внешних декоративных панелей — дихлорэтан.
Итог
Данный проект — отличный способ применить навыки схемотехники и программирования на практике. Весь авторский контент (модели и чертежи) доступен по ссылке. Надеюсь, этот опыт вдохновит вас на создание собственной игровой платформы.


