Lys Entertainment System
C++

Lys Entertainment System

Дивний макет консолі, створений на Arduino/ESP8266

GitHub|
зображення

Незвичайна імітація консолі, створена на 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, те саме, ще не підключені

Планується (наступна платформа)

  • 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).