Índice
-
Instalación sistema operativo en Raspberry Pi
-
Instalación de dependencias en Raspberry Pi
-
Estructura de archivos y directorios
-
Scripts usados en Raspberry Pi
-
mostrar_rom_wrapper.sh -
recibir_rom.sh
-
-
Servicio systemd para automatizar el script
-
Configuración en Windows para enviar el nombre de la ROM
-
Script
launch_rom_with_image.bat -
Configuración en CoinOPS para usar el script
-
-
Funcionamiento y flujo de trabajo
-
Notas finales
1. Instalación sistema operativo en Raspberry Pi
-
Descargar e instalar Raspberry Pi OS Lite (versión recomendada para este proyecto)
-
Realizar la configuración inicial (wifi, usuario, password…)
-
Actualizar sistema:
sudo apt update && sudo apt upgrade -y
2. Instalación de dependencias en Raspberry Pi
Instalar herramientas necesarias:
sudo apt install fbi socat nmap -y
-
fbi: para mostrar imágenes en la consola
-
socat: para escuchar conexiones TCP
-
nmap: incluye
ncatpara Windows (será usado en cliente Windows)
3. Estructura de archivos y directorios
/home/arcade/ ├── caratulas/ │ ├── logo.jpg # Imagen logo por defecto │ ├── aliens.jpg # Imagen de ejemplo para la ROM aliens │ └── otras_roms.jpg # Más imágenes para otras ROMs ├── mostrar_rom_debug.log # Log de depuración /usr/local/bin/ ├── recibir_rom.sh # Script para recibir nombre ROM y mostrar imagen ├── mostrar_rom_wrapper.sh # Script que muestra imagen según ROM recibida /etc/systemd/system/ └── recibir_rom.service # Servicio systemd para ejecutar recibir_rom.sh
4. Scripts usados en Raspberry Pi
mostrar_rom_wrapper.sh
#!/bin/bash
ROM="$1"
ROM=${ROM//\"/} # <--- Elimina comillas del nombre recibido
DEBUG_LOG="/home/arcade/mostrar_rom_debug.log"
TTY="/dev/tty1"
CARATULAS="/home/arcade/caratulas"
IMG="$CARATULAS/${ROM}.jpg"
LOGO="$CARATULAS/logo.jpg"
FBI_PID_FILE="/tmp/fbi_logo.pid"
# Detener el logo mostrado con fbi
if [[ -f "$FBI_PID_FILE" ]]; then FBI_PID=$(cat "$FBI_PID_FILE") sudo kill "$FBI_PID" 2>/dev/null rm -f "$FBI_PID_FILE"
fi
# Mostrar imagen de la ROM o el logo si no existe
if [[ -f "$IMG" ]]; then echo "$(date) Recibido: $ROM → $IMG" >> "$DEBUG_LOG" sudo fbi -T 1 -noverbose -a "$IMG" > /dev/null 2>&1 &
else echo "$(date) Imagen no encontrada: $IMG. Mostrando logo." >> "$DEBUG_LOG" if [[ -f "$LOGO" ]]; then sudo fbi -T 1 -noverbose -a "$LOGO" > /dev/null 2>&1 & fi
fi
recibir_rom.sh
#!/bin/bash PORT=12345 LOGO="/home/arcade/caratulas/logo.jpg" TTY="/dev/tty1" FBI_PID_FILE="/tmp/fbi_logo.pid" # Esperar a que termine el arranque completo (evita que el logo desaparezca) sleep 5 # Mostrar el logo al inicio con fbi if [[ -f "$LOGO" ]]; then sudo fbi -T 1 -noverbose -a "$LOGO" > /dev/null 2>&1 & echo $! > "$FBI_PID_FILE" fi # Escuchar por nuevas ROMs socat TCP-LISTEN:$PORT,reuseaddr,fork SYSTEM:'/usr/local/bin/mostrar_rom_wrapper.sh $(cat)'
5. Servicio systemd para automatizar el script
Archivo /etc/systemd/system/recibir_rom.service:
[Unit] Description=Servicio para recibir nombre de ROMs y mostrar su imagen After=network.target [Service] ExecStart=/usr/local/bin/recibir_rom.sh Restart=always User=root [Install] WantedBy=multi-user.target
Para habilitar y arrancar el servicio:
sudo systemctl daemon-reload sudo systemctl enable recibir_rom.service sudo systemctl start recibir_rom.service
6. Configuración en Windows para enviar el nombre de la ROM
launch_rom_with_image.bat
@echo off set ROM_NAME=%1 :: Log local echo Enviado: %ROM_NAME% >> c:\temp\rom_debug.log :: Enviar el nombre de la ROM a la Raspberry Pi echo %ROM_NAME% | "C:\Program Files (x86)\Nmap\ncat.exe" 192.168.1.138 12345 :: Lanzar el emulador directamente y esperar a que termine "E:\Deluxe 4x3\emulators\mame\mame64nocfg.exe" %1 -rompath "E:\Deluxe 4x3\emulators\mame\roms" :: Una vez cerrado el emulador, mostrar logo echo logo | "C:\Program Files (x86)\Nmap\ncat.exe" 192.168.1.138 12345 echo Enviado: logo (tras salir del juego) >> c:\temp\rom_debug.log
Configuración en CoinOPS (RetroFE)
En el archivo de configuración .conf del emulador (ejemplo mame.conf):
executable = E:\Deluxe 4x3\scripts\launch_rom_with_image.bat arguments = "%ITEM_NAME%" LEDBlinkyEmulator = mame
7. Funcionamiento y flujo de trabajo
-
Al iniciar la Raspberry Pi, se muestra el
logo.jpgdurante el arranque y espera conexiones en el puerto 12345. -
Desde Windows, cuando se selecciona un juego en CoinOPS, se ejecuta
launch_rom_with_image.batenviando el nombre del juego (ROM) a la RPi víancat. -
El script en la RPi recibe el nombre de la ROM, para mostrar la imagen correspondiente (
aliens.jpg,19xx.jpg, etc.) o ellogo.jpgsi no existe la imagen de la ROM. -
Se lanza el emulador con la ROM seleccionada.
-
Al cerrar el emulador, se envía el comando para mostrar de nuevo el logo en la RPi.
8. Notas finales
-
Se recomienda tener la carpeta
/home/arcade/caratulasbien organizada con imágenes en formato JPG y con nombres idénticos a los nombres de las ROMs. -
El archivo de log en Raspberry Pi permite depurar posibles problemas (
/home/arcade/mostrar_rom_debug.log). -
En Windows, instalar Nmap para disponer de
ncat.exeen la ruta especificada. -
Ajustar las rutas en el script
.baty en la configuración del emulador según tu instalación. -
El script elimina las comillas del nombre de la ROM para evitar problemas al recibirlo desde CoinOPS.
SrRubio
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.