Recalbox embarque le pilote mk_arcade_joystick_rpi, qui transforme des boutons câblés sur le port GPIO d'un Raspberry Pi en véritables manettes vues par le système. Si vous montez un bartop, une borne d'arcade ou un stick portable, vous n'avez pas besoin d'investir dans un encodeur USB : quelques fils suffisent.
Le pilote gère jusqu'à deux contrôleurs, chacun composé d'un joystick 4 directions et de 9 boutons.
Le GPIO n'est pas pris en charge sur Raspberry Pi 5 : sur cette carte, passez par un encodeur USB. Ce tutoriel concerne les Raspberry Pi 3, 4 et Zero 2.
Prenons l'exemple d'un panel à 7 boutons disposés ainsi :
. ↑ Ⓨ Ⓧ Ⓛ
← → Ⓑ Ⓐ Ⓡ Ⓗ
↓
Avec :
Ⓡ = Gâchette droite = TR | Ⓛ = Gâchette gauche = TL | Ⓗ = HK = Hotkey
Chaque bouton se branche entre la broche GPIO qui lui est assignée et une masse (GND). Aucune résistance externe n'est nécessaire : le pilote active les résistances de tirage internes (internal pull-ups) du Raspberry Pi.

Dans recalbox.conf, passez la clé suivante à 1 :
controllers.gpio.enabled=1
Redémarrez : les manettes GPIO sont configurées prêtes à l'emploi, dans l'interface comme dans les émulateurs. Il n'y a pas besoin de passer par le configurateur de manettes.
controllers.gpio.enabled=1a la priorité surcontrollers.db9.enabledetcontrollers.gamecon.enabled: ces deux-là ne seront pas chargés tant que le pilote arcade est actif.
La clé controllers.gpio.args passe les paramètres au pilote. Par défaut :
controllers.gpio.args=map=1,2
map=1 déclare un seul contrôleur, map=1,2 en déclare deux (brochages standard 1 et 2).
Pour un brochage personnalisé, utilisez map=5 (un contrôleur) ou map=5,6 (deux contrôleurs) et donnez la liste des GPIO dans l'ordre Y-, Y+, X-, X+, start, select, a, b, tr, y, x, tl, hk :
controllers.gpio.args=map=5,6 gpio=4,17,27,22,10,9,25,24,23,18,15,14,2 gpio2=11,5,6,13,19,26,21,20,16,12,7,8,3
Deux points de vigilance :
-1 désactive l'entrée correspondante (par exemple si votre panel n'a pas de bouton Hotkey).Le pilote sait également lire des boutons branchés sur un ou deux composants MCP23017 sur le bus I²C, et les mélanger avec des boutons câblés en direct. On déclare alors les adresses I²C dans map :
controllers.gpio.args=map=0x20,0x21,5,6 gpio=4,17,27,22,10,9,25,24,23,18,15,14,-1 gpio2=11,5,6,13,19,26,21,20,16,12,7,8,-1
Une fois redémarré, contrôlez les entrées avec le testeur de manettes intégré, ou en SSH avec sdl2-jstest --list.
Si rien n'apparaît, vérifiez dans les journaux que le module a bien été chargé :
grep CONTROLLERS /recalbox/share/system/logs/recalbox.log