Lys Entertainment System
Vreemde imitatie van een consolesysteem, gemaakt met Arduino/ESP8266

Een vreemd prototype van een consolesysteem, gemaakt met Arduino/ESP32. Het is een hobbyproject,
geen echt product. Het uiteindelijke idee is een klein handheld-apparaatje waarop ik mijn eigen
spellen kan spelen, met geluid en een kleurenscherm. Zo ver is het nog lang niet. Het zou
spellen uit het NES- en SNES-tijdperk soepel moeten kunnen draaien. Het streven naar hogere resoluties is iets wat
nog moet gebeuren op een bord met PSRAM.
Het komt neer op RAM. De Arduino Mega 2560 waarop het momenteel draait, heeft slechts 8 KB
SRAM. Dat is niet genoeg voor een kleurenframebuffer, dus op dat bord blijft het bij tekst alleen.
Het volgende platform is een ESP32 WROOM, die uitkomt op ongeveer 520 KB SRAM en een
snelle dual-coreprocessor. Dat biedt ruimte voor een framebuffer van 240x240 (ongeveer 115 KB) en draait echte
spellen op die resolutie. De WROOM heeft geen PSRAM, dus kan hij de veel
grotere framebuffers niet aan die een scherm met hogere resolutie nodig zou hebben. Een ESP32-WROVER of
ESP32-S3 lost dat later op met meerdere megabytes aan PSRAM en ingebouwde opslag, wat
nodig is voor een scherm met een resolutie hoger dan 240p.
Status
Vroeg stadium en nog niet voltooid. Op dit moment start het op, detecteert het een aan/uit-knop, speelt het muziek
af via een non-blocking melodie-engine en toont het tekst op het LCD-scherm. Er zijn
nog geen spellen beschikbaar.
Momenteel draait het op een Arduino Mega met een 16x2-karakter-LCD, waar de
code op is gericht. Het volgende platform staat vast: een ESP32 WROOM die via SPI een 1,54 inch
240x240 IPS ST7789-scherm aanstuurt. Beide onderdelen werken op 3,3 V en kunnen zonder
niveauverschuiving worden gekoppeld, in tegenstelling tot het huidige 5 V LCD-scherm. Die onderdelen zijn onderweg, en
er wordt niets geport totdat ze zijn aangekomen.
Spellen worden gehost op lyszt.net en via wifi naar het bord gedownload. Voor de
eerste versie staan ze in het ingebouwde flashgeheugen van de ESP32.
Hardware
- MCU: voorlopig Arduino Mega 2560 (ATmega2560)
- Display: 16x2 I2C-teken-LCD (adres
0x27) - Audio: passieve zoemer op pin 3
- Invoer:
- aan/uit-knop op pin 2 (
INPUT_PULLUP, debounce toegepast) - richtingsknoppen: omhoog / omlaag / links / rechts, voorlopig gewoon knoppen,
nog nergens op aangesloten - actieknoppen: A / B, hetzelfde verhaal, nog niet aangesloten
- aan/uit-knop op pin 2 (
Gepland (volgend platform)
- MCU: ESP32 WROOM (3,3 V, dual-core, ~520 KB SRAM)
- Display: 1,54 inch 240x240 IPS ST7789 via SPI
- Opslag: games in ingebouwd flashgeheugen, gedownload via wifi
- Later: ESP32-WROVER of ESP32-S3 voor PSRAM-ruimte boven 240p
Bouw
PlatformIO-project, Arduino-framework. Het eigenlijke project staat onderLys Entertainment System/.
platform = atmelavr
board = megaatmega2560
framework = arduino
lib_deps = marcoschwartz/LiquidCrystal_I2C
Indeling
De broncode staat in Lys Entertainment System/src/:
main.cpp— startpunt: bedrading, aan/uit-knop, hoofdlus.system/— deSystem-kern; beheert de stroomstatus, het LCD-scherm en de audio.sounds/— audio, opgesplitst in data en logica:notes.h— toonhoogteconstanten.songs.{h,cpp}— muziekgegevens (deSong-structuur en melodiedefinities).sounds.{h,cpp}— de non-blocking melodie-engine en geluids-API.audio_manager.{h,cpp}— OO-wrapper rond de engine.
lcd/— hulpprogramma voor LCD-tekst.utils/— herbruikbare hulpprogramma’s (bijv. een niet-blokkerendewait).
