Le pilote gamecon_gpio_rpi permet de brancher des manettes de consoles rétro directement sur le port GPIO d'un Raspberry Pi. Jusqu'à quatre manettes peuvent être utilisées en même temps, parmi les types suivants :
Ce pilote est dérivé du Gamecon d'origine mais utilise des paramètres et un brochage différents : il n'y a aucune garantie de fonctionnement, et vous procédez à vos risques et périls.
Ce tutoriel ne convient pas au Raspberry Pi 5, dont le GPIO n'est pas pris en charge. Il concerne les Raspberry Pi 3, 4 et Zero 2.
Les broches P1-01 (3,3 V) et P1-06 (masse) alimentent l'ensemble des manettes branchées : elles sont communes. Même si les manettes NES et SNES fonctionnent nominalement en 5 V, elles s'accommodent du 3,3 V — il n'y a donc pas besoin de convertisseur de niveau sur les broches de données.
L'intensité maximale disponible (environ 50 mA) suffit à alimenter quatre manettes, à condition d'utiliser une alimentation Raspberry Pi de qualité pour éviter toute chute de tension.
Les broches de données P1-03, P1-05, P1-07 et P1-26 (GPIO 0, 1, 4 et 7) sont indépendantes : chaque manette en utilise une seule.
- Les broches P1-03 et P1-05 correspondent à GPIO 2 et GPIO 3 sur les cartes de révision 2 — à prendre en compte au moment de configurer le pilote.
- Les broches P1-19 et P1-23 (GPIO 10 et 11) sont les signaux communs à toutes les manettes NES / SNES.
- Les broches P1-08, P1-10 et P1-12 (GPIO 14, 15 et 18) sont les signaux communs à toutes les manettes PSX / PS2.
| Broche Raspberry Pi | Broche manette SNES | Broche manette NES |
|---|---|---|
| P1-01 (3,3 V) | 1 (alimentation 5 V) | 1 (alimentation 5 V) |
| GPIO 10 | 2 (clock) | 5 (clock) |
| GPIO 11 | 3 (latch) | 6 (latch) |
| GPIOxx | 4 (data) | 7 (data) |
| P1-06 (GND) | 7 (masse) | 4 (masse) |
| Broche Raspberry Pi | Broche manette GameCube |
|---|---|
| P1-01 (3,3 V) | 6 (alimentation 3,43 V) |
| GPIOxx | 3 (data) |
| P1-06 (GND) | 2 et 5 (masse) |
| Broche Raspberry Pi | Broche manette PSX / PS2 |
|---|---|
| P1-01 (3,3 V) | 5 (VCC) |
| GPIO 14 | 2 (command) |
| GPIO 15 | 6 (ATT) |
| GPIO 18 | 7 (CLK) |
| GPIOxx | 1 (data) |
| P1-06 (GND) | 4 (masse) |
Dans chaque tableau, GPIOxx désigne la broche de données propre à cette manette, choisie parmi les broches indépendantes et déclarée dans la configuration du pilote ci-dessous.




Dans recalbox.conf, activez le pilote :
controllers.gamecon.enabled=1
Le pilote Gamecon n'est chargé que si
controllers.gpio.enabledetcontrollers.db9.enabledvalent0. Ces trois pilotes GPIO sont exclusifs.
Puis déclarez le type de manette branché sur chaque broche de données, dans l'ordre <pad1/GPIO0>,<pad2/GPIO1>,<pad3/GPIO4>,<pad4/GPIO7>,<pad5/GPIO2>,<pad6/GPIO3> :
controllers.gamecon.args=map=0,0,1,6
Les types disponibles :
| Valeur | Manette |
|---|---|
0 |
aucune manette branchée |
1 |
SNES |
2 |
NES |
3 |
GameCube |
6 |
N64 |
7 |
PSX / PS2 |
8 |
PSX DDR (tapis de danse) |
9 |
souris SNES |
L'exemple map=0,0,1,6 déclare une manette SNES sur GPIO 4 et une manette N64 sur GPIO 7.
pad1etpad2ne servent que sur une carte de révision 1 ;pad5etpad6seulement sur une révision 2 — sur ces cartes, mettezpad1etpad2à0.- Les manettes PSX / PS2 nécessitent une résistance de tirage :
pad5(GPIO 2) etpad6(GPIO 3) en possèdent une intégrée.
L'index final des manettes (celui vu par les émulateurs) est attribué séquentiellement, en partant de 0, dans l'ordre de la déclaration : dans l'exemple ci-dessus, la SNES est la manette 0 et la N64 la manette 1.
Après redémarrage, vérifiez que le module a bien été chargé :
grep CONTROLLERS /recalbox/share/system/logs/recalbox.log
Pour chaque manette N64, en SSH :
jscal -s 4,1,0,0,0,6972137,6972137,1,0,0,0,6547006,6468127,1,0,0,0,536854528,536854528,1,0,0,0,536854528,536854528 /dev/input/jsX
Remplacez jsX par le périphérique de votre manette (js0, js1…).
Le pilote interroge les manettes PSX toutes les 10 µs, ce qui minimise la latence. Dans de rares cas, cela ne suffit pas pour obtenir une lecture stable : ajoutez alors le paramètre psx_delay= (valeur en microsecondes, entre 1 et 50) aux arguments du module.
Le fil d'origine du pilote sur le forum Raspberry Pi (en anglais). Merci à marqs pour le pilote et pour nous avoir autorisés à reprendre sa documentation.