Galagino: Mini máquina Arcade con ESP32

Autor: oscar gonzalez

Galagino: Mini máquina Arcade con ESP32

Tiempo de lectura: 14 minutos

Construye una máquina arcade miniatura con ESP32 y Pantalla LCD

Galagino: Mini máquina Arcade con ESP32

  • 2

0 Principiante

Software

Cómo instalar Galagino en ESP32

Para que todo funcione, necesitas cargar el software de Galagino en la placa ESP32 y eso requiere de cierta preparación que veremos en esta página.

Primero, debes descargar los archivos del repositorio de Github. Para eso hice un "Fork" del repositorio original para que si en algún momento el autor hace alguna modificación, por lo menos exista una versión congelada que sea coherente con este tutorial y que puedas descargar sin preocuparte.

Aquí está todo lo necesario para cargar el emulador en el ESP32. Ten en cuenta que es necesario utilizar el IDE de Arduino, ya que si usas PlatformIO, puede que tengas errores y el propio autor lo advierte.

Otra cosa importante a tener en cuenta es que los "core" para ESP32 parece tener algún problema con la interfaz I2S/DAC a partir de la versión 2.0.9, así que es necesario usar el "core" 2.0.9 o inferior

Para eso, debes ir al gestor de placas y buscar "ESP32", asegurándote de tener la 2.0.9 instalada que fue la que yo usé para cargar el emulador.

ESP32 Core version 2.0.9 para Galagino

ESP32 Core version 2.0.9 para Galagino

Configuración del emulador

No necesitas tocar nada del código, aunque puedes tocar alguna cosa si quieres. El fichero principal que debes abrir es config.h, donde podrás activar o desactivar los juegos que quieres tener en la máquina, en función de las ROMS que tengas (eso lo veremos más abajo).

En concreto, estas son las líneas importantes para eso y que puedes comentar poniendo "//" (sin comillas) justo delante si quieres desactivar algún juego. Yo los he puesto todos, pero aquí abajo verás un ejemplo de cómo dejarlos todos menos el 1942:

// disable e.g. if roms are missing
#define ENABLE_PACMAN
#define ENABLE_GALAGA
#define ENABLE_DKONG
#define ENABLE_FROGGER
#define ENABLE_DIGDUG
//#define ENABLE_1942

A partir de aquí, ya no es necesario tocar nada más. En ese mismo fichero (config.h), tienes algunos parámetros más por si quieres ajustar algo. 

Uno que he visto que puede ser interesante tocar sin romper nada, es el brillo de la tira LED. Por defecto tiene un valor de 50 (rango de 0 a 255) y puedes subirlo o incluso bajarlo un poco más por si quieres ahorrar más batería y tener más tiempo de juego. Cuanto más alto el valor, menos durará la batería, ya que es, de lejos, lo que más energía consume de todo el proyecto.

Si lo dejas a cero, quedará desactivada la tira de LED, pero por supuesto no será tan vistoso. 

Recuerda siempre que donde hay un LED hay alegría.

#define LED_BRIGHTNESS 50   // range 0..255

Ahora solo nos falta preparar las ROMS. Por motivos obvios, no puedo ponerte un enlace de descarga aquí y tendrás que buscarlas tú mismo. Luego prepararemos los archivos para poder compilar y cargar todo en la placa ESP32.

Preparar el código y cargar las ROMS

Primero necesitas las ROMS, ya que el repositorio de Github solo incluye el emulador, no las roms. Eso es importante que lo sepas y como te he dicho antes, no puedo facilitar su descarga aquí. Pero no te preocupes, se encuentran muy fácil haciendo una búsqueda en Bing como estas: 

(Ojo, no son enlaces de descarga, solo son búsquedas en Bing)

Normalmente en los primeros resultados de búsqueda puedes encontrar varias páginas con las roms. Una vez descargadas, debes descomprimir todos los archivos en el directorio /roms de Galagino.

OJO: Los ficheros de todas las roms hay que descomprimirlos todos juntos dentro del directorio /roms.

También vas a necesitar el emulador Z80 de Marat Fayzullin que también debes copiar en el mismo directorio que las roms pero sin descomprimir (deja el archivo .zip tal cual).

Una vez hecho eso, vas a /galagino/romconv/ y debes ejecutar el archivo romconv_win.sh si usas Windows o romconv.sh si usas Linux. Ten en cuenta de que en Windows, necesitas tener instalado Python3 para que funcione y como normalmente eso en Windows es un lío, yo lo he hecho con Linux.

En mi caso y previo a este paso, tuve que instalar una dependencia llamada imageio de Pyhton para que el script pueda convertir los logos. Eso se hace con pip3 install imageio desde la consola.

Luego ejecutas el script romconv.sh y debes ver un mensaje como este:

Preparación de los archivos con romconv.sh

Preparación de los archivos con romconv.sh

Si ha ido todo bien, ahora ya puedes cargar el programa en la placa ESP32 con el IDE de Arduino y no debe mostrar ningún error. Recuerda que las placas del tipo NodeMCU con ESP32, para poder programarlas es necesario pulsar el botón RESET o BOOT de lo contrario no funciona. 

Con esto ya tienes todo el software que necesitas para usar tu máquina arcade miniatura.

¡A disfrutar!

Cargar Galagino en ESP32

Cargar Galagino en ESP32

Notas sobre el software

Gracias a Manuel Otero, comentarte también que hay algunos requisitos sobre las versiones de las librerías para que todo funcione. Aparte de usar la versión correcta del core de ESP32 que menciono arriba, pongo aquí las versiones que he usado para que compruebes si son las mismas, ya que es posible que si usas versiones superiores, no funcione.

  • Arduino IDE: v2.3.6
  • FastLED: v3.9.20

Por otro lado, el sketch utiliza prácticamente toda la flash y RAM disponible de la placa (99%). Eso es normal si usas todos los juegos. En mi caso, este es el resultado tras compilar el programa con todas las ROMS activadas:

El Sketch usa 1300065 bytes (99%) del espacio de almacenamiento de programa. El máximo es 1310720 bytes.
Las variables Globales usan 25656 bytes (7%) de la memoria dinámica, dejando 302024 bytes para las variables locales. El máximo es 327680 bytes.

También mencionar que el juego 1942 suena mucho más alto y con sonido algo distorsionado comparado con los otros juegos. ¿Tiene solución? Pues no lo sé. Quizá si te aventuras a indagar en el código del emulador puedas solucionarlo, pero sinceramente, yo no lo voy a hacer. Si descubres algo sobre este asunto, no dudes en decírmelo y actualizaré el tutorial.

También decirte que a mí me funcionan todos los juegos, salvo el DigDug que a mí no me funciona. Arranca y se cierra nada más se inicia. No sé si puede ser debido a la ROM que esté mal (o no sea la versión correcta), o que debido a que la memoria del ESP32 está muy llega que no llegue a iniciarse correctamente. 

Yo tengo el juego igualmente activado, aunque puede que simplemente lo quite y de paso libero espacio de flash para que la placa vaya más suelta.

Un buen truco (que no sabía) y que me comenta Manuel, es que puedes voltear la pantalla verticalmente si lo necesitas. Eso se hace en a línea 43 del fichero config.h comentando esta línea:  #define TFT_VFLIP 

Ten en cuenta también que elegir la placa correcta en el IDE de Arduino es importante. Yo he usado la ESP32 Dev Module usando este core: 

  • https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

Si no sabes cómo instalar los Core en el IDE de Arduino, revisa este tutorial.