Lys Entertainment System
C++

Lys Entertainment System

Strana imitazione di una console realizzata con Arduino/ESP8266

GitHub|
immagine

Una strana prototipazione di una console realizzata con Arduino/ESP32. Si tratta di un progetto amatoriale,
non di un prodotto vero e proprio. L’idea finale è quella di un piccolo dispositivo portatile in grado di riprodurre i miei
giochi, con audio e display a colori. Per ora siamo ancora molto lontani da questo obiettivo. Dovrebbe
essere in grado di eseguire senza problemi i giochi dell’era NES e SNES. Il passaggio a risoluzioni più elevate è ciò che
ci si aspetta da una scheda dotata di PSRAM.

Tutto dipende dalla RAM. L’Arduino Mega 2560 su cui gira oggi ha solo 8 KB di
SRAM. Non è sufficiente per gestire un framebuffer a colori, quindi su quella scheda rimane solo testo.
La piattaforma successiva è un ESP32 WROOM, che arriva a circa 520 KB di SRAM e un
veloce dual core. Questo permette di gestire un framebuffer da 240x240 (circa 115 KB) e di far funzionare veri e propri
giochi a quella risoluzione. Il WROOM non ha PSRAM, quindi non può contenere i
framebuffer molto più grandi che sarebbero necessari per uno schermo a risoluzione più alta. Un ESP32-WROVER o
un ESP32-S3 risolveranno questo problema in seguito grazie a PSRAM da diversi megabyte e memoria integrata, che
è ciò di cui avrà bisogno uno schermo con risoluzione superiore a 240p.

Stato

In fase iniziale e incompleta. Al momento si avvia, rileva il pulsante di accensione, riproduce musica
tramite un motore melodico non bloccante e visualizza testo sul display LCD. Non esistono ancora
giochi.

Attualmente funziona su un Arduino Mega con un display LCD a caratteri 16x2, che è ciò a cui il
codice è destinato. La piattaforma successiva è stata scelta: un ESP32 WROOM che pilota un display IPS ST7789 da 1,54 pollici
a 240x240 tramite SPI. Entrambi i componenti funzionano a 3,3 V e si accoppiano senza
bisogno di level-shifting, a differenza dell’attuale LCD a 5 V. Questi componenti sono in arrivo e
non verrà effettuato alcun porting fino al loro arrivo.

I giochi saranno ospitati su lyszt.net e scaricati sulla scheda tramite Wi-Fi. Per la
prima versione risiederanno nella memoria flash integrata dell’ESP32.

Hardware

  • MCU: Arduino Mega 2560 (ATmega2560) per ora
  • Display: LCD a caratteri 16x2 I2C (indirizzo 0x27)
  • Audio: cicalino passivo sul pin 3
  • Ingressi:
    • pulsante di accensione sul pin 2 (INPUT_PULLUP, con antirimbalzo)
    • pulsanti direzionali: su / giù / sinistra / destra, per ora sono semplici pulsanti,
      non ancora collegati a nulla
    • pulsanti di azione: A / B, stessa situazione, non ancora collegati

In programma (prossima piattaforma)

  • MCU: ESP32 WROOM (3,3 V, dual core, ~520 KB di SRAM)
  • Display: IPS ST7789 da 1,54 pollici, 240x240, tramite SPI
  • Memoria: giochi nella memoria flash integrata, scaricabili tramite Wi-Fi
  • In seguito: ESP32-WROVER o ESP32-S3 per avere margine di PSRAM oltre i 240p

Compilazione

Progetto PlatformIO, framework Arduino. Il progetto vero e proprio si trova nella cartella
Lys Entertainment System/.

platform  = atmelavr
board     = megaatmega2560
framework = arduino
lib_deps  = marcoschwartz/LiquidCrystal_I2C

Layout

Il codice sorgente si trova in Lys Entertainment System/src/:

  • main.cpp — punto di ingresso: cablaggio, pulsante di accensione, ciclo principale.
  • system/ — il nucleo System; gestisce lo stato di alimentazione, il display LCD e l’audio.
  • sounds/ — audio, suddiviso in dati e logica:
    • notes.h — costanti di altezza tonale.
    • songs.{h,cpp} — dati musicali (la struttura Song e le definizioni delle melodie).
    • sounds.{h,cpp} — il motore delle melodie non bloccante e l’API audio.
    • audio_manager.{h,cpp} — wrapper OO attorno al motore.
  • lcd/ — funzioni di supporto per il testo sul display LCD.
  • utils/ — funzioni di supporto riutilizzabili (ad es. un wait non bloccante).