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

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
- botão liga/desliga no pino 2 (
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 emLys 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úcleoSystem; 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 estruturaSonge 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, umwaitnão bloqueante).
