
Незвичайна імітація консолі, створена на Arduino/ESP32. Це хобі‑проект, а не справжній продукт. Підсумкова ідея — невеликий портативний пристрій, який відтворюватиме мої власні ігри з звуком і кольоровим дисплеєм. Поки що це далеко не так. Він повинен комфортно запускати ігри епохи NES і SNES. Підвищення роздільної здатності можливе лише на платі з PSRAM.
Все залежить від RAM. Arduino Mega 2560, на якому працює проект сьогодні, має лише 8 КБ SRAM. Це не дозволяє зберігати кольоровий буфер кадрів, тому на цій платі він залишається лише текстовим. Наступна платформа — ESP32 WROOM, який має приблизно 520 КБ SRAM і швидкий двоядерний процесор. Це достатньо для 240×240 буфера кадрів (приблизно 115 КБ) і дозволяє запускати справжні ігри з такою роздільною здатністю. WROOM не має PSRAM, тому не може підтримувати набагато більші буфери кадрів, які потрібні для екранів з вищою роздільною здатністю. ESP32‑WROVER або ESP32‑S3 забезпечують це пізніше, маючи мульти‑мегабайтовий PSRAM і вбудовану пам’ять, що потрібна для екранів понад 240p.
Статус
Ранній і незавершений. Зараз він завантажується, читає кнопку живлення, відтворює музику через неблокуючий движок мелодій і показує текст на LCD. Ігор ще немає.
Сьогодні він працює на Arduino Mega з 16×2 символьним LCD, що відповідає цільовому коду. Наступна платформа визначена: ESP32 WROOM, що керує 1,54‑дюймовим 240×240 IPS ST7789 дисплеєм через SPI. Обидва пристрої працюють на 3,3 В і підключаються без рівнівого переходу, на відміну від поточного 5 В LCD. Ці компоненти вже в дорозі, і нічого не портовано, поки вони не прибудуть.
Ігри будуть розміщені на lyszt.net і завантажуватимуться на плату через WiFi. Для першої версії вони зберігаються у внутрішній флеш-пам’яті ESP32.
Обладнання
- MCU: Arduino Mega 2560 (ATmega2560) на даний момент
- Дисплей: 16×2 I2C символьний LCD (адреса
0x27) - Аудіо: пасивний бузер на піні 3
- Вхід:
- кнопка живлення на піні 2 (
INPUT_PULLUP, дебаунсована) - напрямкові кнопки: вгору / вниз / ліво / право, наразі просто кнопки, ще не підключені
- діючі кнопки: A / B, те саме, ще не підключені
- кнопка живлення на піні 2 (
Планується (наступна платформа)
- MCU: ESP32 WROOM (3,3 В, двоядерний, ~520 КБ SRAM)
- Дисплей: 1,54‑дюймовий 240×240 IPS ST7789 через SPI
- Пам’ять: ігри у внутрішній флеш, завантажуються через WiFi
- Пізніше: ESP32‑WROVER або ESP32‑S3 для PSRAM, що забезпечує простір понад 240p
Побудова
Проект PlatformIO, Arduino framework. Фактичний проект розташований у Lys Entertainment System/.
platform = atmelavr
board = megaatmega2560
framework = arduino
lib_deps = marcoschwartz/LiquidCrystal_I2C
Розташування
Код знаходиться у Lys Entertainment System/src/:
main.cpp— точка входу: підключення, кнопка живлення, головний цикл.system/— ядроSystem; відповідає за стан живлення, LCD і аудіо.sounds/— аудіо, розділене на дані та логіку:notes.h— константи тонів.songs.{h,cpp}— дані музики (структураSongі визначення мелодій).sounds.{h,cpp}— неблокуючий движок мелодій і API звуку.audio_manager.{h,cpp}— об’єктно‑орієнтований обгортка навколо движка.
lcd/— допоміжний модуль для тексту LCD.utils/— повторно використовувані допоміжні функції (наприклад, неблокуючийwait).
