Controles por GPIO en Raspberry Pi
@Re_tuxEn este tuto explicaremos como conectar los controles al GPIO y configurarlos.
Para la conexion seguiremos el siguiente esquema, teniendo en cuenta que los comunes tienen que ir puenteados a GND (Ground) a cualquiera de ellos, incluso a varios puedes conectar. La cuestion es que cada interruptor tenga un GND y el especificado en el esquema para el boton en cuestion. Por ejemplo, para UP del jugador 1, necesitas conectar al interruptor de UP el pin 7 y el otro a un GND cualquiera, de la placa o puenteado de otro interruptor de su GND.


Como pone ahí el Joystick 1 los de color verde y el azul el 2. Este esquema es viendo la raspberry de frente con el gpio a nuestra derecha, tal que así:

Una vez cableado y repasado que todo está correcto continuamos con la parte de software.
Nos vamos a retropie, retropie-setup, y entramos en manage packages, driver y instalamos el mkarcadejoystick




y veremos que no da ningún error:

Una vez terminado, salimos con back, back, back, exit.
En caso de que tengas 1 solo control puedes ir a mapearlo ya, como siempre.
Si tienes 2 controles, en el terminal (por ssh o pulsando F4) escribimos lo siguiente:
sudo nano /etc/modprobe.d/mk_arcade_joystick_rpi.conf

Añadimos ,2 al final de la linea parq que quede options mk_arcade_joystick_rpi map=1,2

Guardamos pulsando Control+X, aceptamos con Y y pulsamos enter. Así nos queda guardado.
Reiniciamos.
Ahora nos vamos al menú de emulationstation para mapear (o mapeamos si nos lo pide al principio), mapeamos nuestro joystick y botones a gusto primero el 1 luego desde configure input ya hecemos el 2. Yo lo que hice es borrar mapeados desde la opción de borrar mapeados en retropie, reset mapeado y así solo tengo ese control mapeado, sin teclado.
El usuario Ruben San Juan no le funcionaba el jugador 2, no le dejaba mapearlo y ha encontrado la solucion, mapear primero el jugador 2 y luego el 1.
Fuente: https://github.com/recalbox/mk_arcade_joystick_rpi
Hasta aquí estaria listo. Lo que hay a continuación sería para el que quisiera usar el GPIOnext, NO ES NECESARIO.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Empezamos desinstalado rpi.gpio
sudo apt-get remove python-rpi.gpio
Pulsamos Y y aceptamos cuando nos lo pregunte.
sudo rm /usr/local/lib/python3.4/dist-packages/RPi.GPIO-0.5.11.egg-info
sudo rm /usr/local/lib/python2.7/dist-packages/Rpi.GPIO-0.5.11.egg-info
sudo rm -R RPi.GPIO-0.5.11/
Procedemos a la instalación de GPIONEXT
git clone https://github.com/mholgatem/GPIOnext.git
bash GPIOnext/install.sh
Al terminar nos preguntará:

Pulsamos Y para aceptar.

Aquí seleccionamos lo que queremos mapear, seleccionamos el primero.

Seleccionamos 1 (en la imagen pone 0 pero es 1 lo que se necesita seleccionar)

Una vez aquí seleccionamos con la barra de espacio los botones que tiene nuestra máquina. En mi caso tengo 6 botones de juego y 2 para el select y start, por lo que selecciono como en la siguiente imagen.

Pulsamos enter y nos irá preguntando botón por botón.

Los iremos pulsando uno a uno con una pulsación prolongada hasta que aparezca su numeracion.

Al terminar nos volverá al primer paso, donde seleccionamos el joypad2 en caso de tener un segundo, si solo tenemos 1 seleccionamos exit.

En unsos segundos ya funciona correctamente. En caso de que no funcione:
gpionext start
sudo reboot