Créditos a
@Yahmez y
@meleuAl lío, vamos a meter una raspberry dentro de un dock de NeoGeoX de una forma facilísima y otra un poco más elaborada pero que vale la pena, eso sí, para la parte avanzada necesitas herramientas como soldador y estaño.
Lista de la compra:
Para la parte fácil sólo necesitas:
- Una raspberry Pi
- Una micro SD de al menos 16 GB (mirad que no sea de los chinos)
- Un dock de Neo Geo X
- Un transformador con clavija de 4x1.7 mm (como los de Orange Pi)
- El pack de cables que se ofrece en aliexpress
Para la parte avanzada:
- 1x diodo 1N4148
- 1x condensador electrolítico de mínimo 220uF 10v
- Pololu 2810 o 2811
- Cables con terminación dupon (recomendado para conectar al GPIO)
Parte fácil:
Usar los cables de aliexpress y encender. FIN
¿Problemas? Básicamente dos, que el botón menú del dock esta de adorno y el más importante que es que la Raspberry HAY QUE APAGARLA DESDE EL MENÚ con el riesgo que conlleva apagarla desde el interruptor directamente.
Parte elaborada:
Desmontamos el dock POR COMPLETO.
Localizamos el interruptor de encendido y desoldamos las dos puntas del cable que va al interruptor.
Empalmamos las dos puntas, dejando el cable directo hacia el hub USB del dock.
Desde el propio hub sacamos un cable de masa GND (el cable negro) hacia el punto medio del interruptor de encendido (tiene tres terminaciones).
Desde la terminación de la izquierda (la que corresponde a la posición ON) llevamos un cable al punto del switch Pololu que he llamado 6.
Desde la terminación de la derecha (posición OFF) sacamos un cable con terminación dupon que irá conectado a uno de los terminales del GPIO de la RPi (GPIO 27).
En las conexiones del dock (dnde se conectan el HDMI y el auio también), localizamos el cable rojo y negro de alimentación y lo desoldamos, llevando estos cables a las terminaciones Vout (rojo) y GND (negro) del 2810.
Hacemos lo propio con las conexiones Vin del 2810 llevando un cable desde Vin y GND hacia donde estaban los cables que hemos quitado antes (la alimentación del dock).
Sólo nos falta el script.
En mi caso como tenía preparada ya retropie para el mod de nespi he usado la nomenclatura y direcciones del tutorial original.
Un archivo llamado nespi.py en la ruta home/pi/bin/button
Yo uso putty para conectarme via SSH...
Usuario: pi
Password: raspberry
Creamos las carpetas:
mkdir -p /home/pi/bin/button
Creamos el archivo:
sudo nano /home/pi/bin/button/nespi.py
Añadimos nuestro código (botón derecho del ratón) y guardamos con Ctrl+X:
#!/usr/bin/python
import RPi.GPIO as GPIO
import os, time
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Reset switch
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Power switch
GPIO.setup(22, GPIO.OUT) #ON control
GPIO.output(22, GPIO.HIGH)
def exitEmulator(channel):
print('exitEmulator')
pids = [pid for pid in os.listdir('/proc') if pid.isdigit()]
for pid in pids:
try:
commandpath = open(os.path.join('/proc', pid, 'cmdline'), 'rb').read()
if commandpath[0:24] == '/opt/retropie/emulators/':
os.system('kill -QUIT %s' % pid)
print('kill -QUIT %s' % pid)
except IOError:
continue
GPIO.add_event_detect(17, GPIO.FALLING, callback=exitEmulator, bouncetime=500)
while True:
if (GPIO.input(27)):
time.sleep(0.25)
else:
print ("Shutting down...")
os.system("sudo shutdown -h now")
break
NOTA: si queréis que los metadata se guarden al salir hay que cambiar
os.system("sudo shutdown -h now") por
os.system("sudo killall emulationstation && sleep 2s && sudo shutdown -h now")Yo no lo hago porque voy a dejar retropie en modo kiosk y no quiero que se vea el texto que sale al salir (si alguine sabe cómo ocultarlo que haga el favor).
Ahora hay que hacer que el código se ejecute al incio:
sudo nano /etc/rc.local
Insertamos lo siguiente una linea ANTES de
exit 0:
python /home/pi/bin/button/nespi.py &
Nota, a veces el archivo rc.local empieza por una linea en blanco, de ser así hay que eliminarla porque si no jamás será leido por el sistema.
Guardad con Ctrl+X
Sólo nos queda hacer ejecutable el archivo rc.local
sudo chmod u+x /etc/rc.local
Para saber si lo tenemos bien planteado, el texto del archivo ahora sale en colores mientras que antes era todo gris... podéis comprobarlo con
sudo nano /etc/rc.local
Botón MENÚ:
Es fácil, basta con poner un interruptor/pulsador llevando una de sus patas a GND y la otra a GPIO 17.
Ojo, que la nomencaltura de los GPIO no se corresponde con el número de pin...
GND - PIN9
GPIO17 - PIN11
GPIO27 - PIN13
GPIO22 - PIN15
Para poner un led de encendido basta con coger 3.3v del GPIO y montar un led con una resistencia de 220 Ohm.