Lys Entertainment System
C++

Lys Entertainment System

Uma imitação peculiar de um sistema de console feita com Arduino/ESP8266

GitHub|
imagem

Uma protótipo peculiar de um console feito com Arduino/ESP32. É um projeto de hobby,
não um produto de verdade. A ideia final é um pequeno console portátil que rode meus próprios
jogos, com som e uma tela colorida. Ainda está muito longe disso. Ele deve
rodar jogos da era NES e SNES sem problemas. Alcançar resoluções mais altas é o que
ainda está por vir em uma placa com PSRAM.

Tudo se resume à RAM. O Arduino Mega 2560 em que ele roda atualmente tem apenas 8 KB de
SRAM. Isso não é suficiente para armazenar um framebuffer colorido, então, nessa placa, ele permanece apenas com texto.
A próxima plataforma é um ESP32 WROOM, que salta para cerca de 520 KB de SRAM e um
processador dual-core rápido. Isso acomoda um framebuffer de 240x240 (aproximadamente 115 KB) e roda
jogos de verdade nessa resolução. O WROOM não possui PSRAM, portanto não consegue armazenar os
buffers de quadro muito maiores que uma tela de resolução mais alta exigiria. Um ESP32-WROVER ou
ESP32-S3 resolve isso posteriormente com PSRAM de vários megabytes e armazenamento integrado, o que
é o que uma tela com resolução superior a 240p precisará.

Status

Em fase inicial e inacabado. No momento, ele inicializa, detecta o botão liga/desliga, reproduz música
por meio de um mecanismo de melodia não bloqueante e exibe texto no LCD. Ainda não há jogos
disponíveis.

Atualmente, ele roda em um Arduino Mega com um LCD de caracteres 16x2, que é o que o
código tem como alvo. A próxima plataforma já foi definida: um ESP32 WROOM controlando uma tela IPS ST7789 de 1,54 polegadas
com resolução de 240x240 via SPI. Ambos os componentes operam a 3,3 V e se conectam sem
necessidade de conversão de nível, ao contrário do LCD atual de 5 V. Essas peças estão a caminho, e
nada será portado até que elas cheguem.

Os jogos serão hospedados no lyszt.net e baixados para a placa via Wi-Fi. Na
primeira versão, eles ficarão armazenados na memória flash integrada do ESP32.

Hardware

  • MCU: Arduino Mega 2560 (ATmega2560) por enquanto
  • Tela: LCD de caracteres 16x2 via I2C (endereço 0x27)
  • Áudio: buzzer passivo no pino 3
  • Entrada:
    • botão liga/desliga no pino 2 (INPUT_PULLUP, com supressão de ressalto)
    • botões direcionais: para cima / para baixo / para a esquerda / para a direita; por enquanto são apenas botões simples,
      ainda não conectados a nada
    • botões de ação: A / B, a mesma situação, ainda não conectados

Planejado (próxima plataforma)

  • MCU: ESP32 WROOM (3,3 V, dual core, ~520 KB de SRAM)
  • Tela: IPS ST7789 de 1,54 polegadas, 240x240, via SPI
  • Armazenamento: jogos na memória flash integrada, baixados via Wi-Fi
  • Mais adiante: ESP32-WROVER ou ESP32-S3 para capacidade de PSRAM além de 240p

Compilação

Projeto PlatformIO, framework Arduino. O projeto propriamente dito está localizado em
Lys Entertainment System/.

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

Layout

O código-fonte está em Lys Entertainment System/src/:

  • main.cpp — ponto de entrada: conexões, botão liga/desliga, loop principal.
  • system/ — o núcleo System; controla o estado de energia, o LCD e o áudio.
  • sounds/ — áudio, dividido em dados e lógica:
    • notes.h — constantes de afinação.
    • songs.{h,cpp} — dados musicais (a estrutura Song e as definições de melodia).
    • sounds.{h,cpp} — o mecanismo de melodia não bloqueante e a API de som.
    • audio_manager.{h,cpp} — wrapper orientado a objetos (OO) em torno do mecanismo.
  • lcd/ — auxiliar de texto para o LCD.
  • utils/ — auxiliares reutilizáveis (por exemplo, um wait não bloqueante).