Blog Widget by LinkWithin

10 mars 2015

[DIY] Une mini console Retro-Gaming à base de Raspberry Pi


Pour vous les geeks nostalgiques, je vous propose cet article illustrant la construction DIY d'une console à base de Raspberry Pi spécialisée dans l'émulation d'anciens système.


1) Liste des courses


Au niveau matériel, pas grand chose : 

- Un Raspberry Pi modèle B ou B+ (le modèle A fonctionne aussi mais moins de RAM à partager avec le GPU) que vous pouvez vous procurer, entre autres, chez Farnell
- Une carte SD d'au moins 4Go, la capacité idéale étant définie par votre collection de jeux ;)
- un alimentation USB 5v (type chargeur de téléphone)
- une (ou plusieurs)  manettes de jeux (USB ou Bluetooth, dans ce cas rajoutez un dongle BT)
- un clavier (pour l'installation uniquement)

2) Installation de la partie Software : 


Prépartion de la carte SD (A partir de Windows, mais possible sous MAC/Linux)

Ce qu'il y a de bien avec le Raspberry Pi, c'est qu'il n'y a pas besoin de se lancer dans des installations monstrueusement compliquées : tout le monde a le même matos, alors il suffit de récupérer l'image d'un OS et de la copier sur une carte SD.

Ici la "distribution" se nomme Retropie et est basée sur 2 grands noms du retrogaming : Retroarch et EmulationStation (frontend). Je ne rentrerai pas plus dans le détail, le site de l'auteur étant suffisamment fourni.

Pour copier l'image sur votre carte SD, je vous recommande d'utiliser WinDiskImager32 qui fonctionne à merveille et qui est super simple d'utilisation : indiquez lui le fichier zip/img, indiquez lui la carte SD de destination, cliquez sur "écrire" et c'est terminé. 
J'ai également testé avec LiliUSB (que j'utilise d'habitude pour faire mes LiveUSB), mais cela n'a pas marché comme attendu.
astuce : si vous n'êtes pas sûrs du bon formatage de votre carte SD, formatez-la avec un appareil photo numérique

Une fois la carte SD créée, vous devriez la voir sous Windows mais avec une taille de 55mo, c'est normal :


La partition de boot est en FAT32, donc lisible sous Windows, l'autre partition qui contient les data est masquée puisqu'en format EXT2 (Linux)





2.1) Démarrage du Raspberry Pi : 


On insère la carte dans le pi, on le branche en HDMI (ou en composite) et si tout se passe bien vous avez un splashscreen multicolore qui apparait et qui enchaîne sur la séquence de boot :


Si ce n'est pas le cas : testez l'autre connexion (HDMI -> coax, inversement proportionnel ou égal), si ça ne fonctionne toujours pas, éditez le fichier config.txt situé sur la partition de boot et décommentez les lignes qui concernent le hdmi drive, etc. Si ça ne fonctionne toujours pas, essayez de créer votre carte SD avec un autre logiciel, voir de la formater avec un appareil photo numérique (sisi ya pas mieux comme formatage, c'est pour ça que je le redis).

Une fois la séquence de boot terminée, le frontend se lance automatiquement, vous proposant de paramétrer les touches de votre manette. Cette action pourra être refaite pas la suite en supprimant le fichier de configuration associé.


pour quitter le frontend et revenir au bon vieux mode ligne de commande, il suffit d'appuyer sur "F4".

Une fois en mode shell, tapez simplement sudo raspi-config pour  accéder au menu avancé :


Ici nous allons mener quelques actions de configuration comme étendre la partition à l'intégralité de la carte SD (choix 1).
Nous allons aussi activer le démon SSH pour la prise en main à distance, c'est quand même plus la classe (choix 8 "advanced options" puis choix 4).
 Toujours dans Advanced on va répartir la quantité de RAM entre le CPU et le GPU, en positionnant la valeur à 192 pour un modèle B/+ (512 total).

Voilà pour la partie configuration simple. Si vous vous sentez d'humeur, vous pouvez tester d'autres paramétrage tel que l'overclocking... (pensez aux dissipateurs)

2.2) Configuration et chargement des émulateurs : 


Par défaut, la distribution contient 3 jeux. Mais le nombre d'émulateurs qu'elle peut gérer est phénoménal, et nous allons donc exploiter cette partie

Pour faire fonctionner un émulateur, il faut principalement 2 choses : 
  1. Le BIOS de la console qu'il émule, qui est sous licence du fabricant et donc illégal de télécharger - vous êtes prévenus -  mais disponibles sur les bas fonds de l'internet underground
  2. Les dump des jeux (version dématérialisée des cartouches), communément appelées ROM - sous licence bla bla je vais pas me répéter arrêtez de faire les ignorants.
Une fois que vous avez piraté tout ça (vous allez avoir des problèmes...) il faut les transférer sur le Raspberry Pi.

Et là 2 options : 
  • Soit vous êtes en mesure de sortir la carte SD et de la lire pour y copier les jeux dans les répertoires ROM et les bios dans les répertoire BIOS des différents émulateurs
  • Soit vous roxez l'admin réseau et comme la distribution embarque un serveur SAMBA, vous pouvez copier directement les ROM via le réseau local. Mais vous n'accéderez pas au répertoire "BIOS", donc à faire par SFTP ou les copier dans ROM via partage réseau et les déplacer après via un mv directement sur le Pi.

NB : les BIOS/ROM/Émulateurs sont une jungle sans pitié. Si vos jeux ne se lancent pas, ne désespérez pas et continuer à chercher d'autres BIOS/"ROM Sets" compatibles avec votre émulateur...

On va presque pouvoir jouer... passons à l'installation des manettes.

2.3) Installation du dongle Bluetooth et association/configuration des manettes PS3


USB pas de soucis, je ne vais m'attarder ici que sur l'installation de manettes Bluetooth, au hasard celles de la PS3 que j'ai déjà. D'autres manettes seraient bien assorties avec leur look retro, celles de 8Bitdo, répliques améliorées de Famicom ou de NES.

Pour le dongle Bluetooth, j'ai opté pour le Asus BT211 ancienne version de ce dongle Asus

Le dongle est reconnu automatiquement puisque dans les dernières versions de Retropie il n'y a plus besoin d'installer tous les paquets afférents au BT, ils sont déjà inclus. Vérification :


Pour appairer les manettes, il faut utiliser l'outil SixPair. la procédure est assez simple et très bien décrite sur le wiki de RetroPie : https://github.com/petrockblog/RetroPie-Setup/wiki/Setting-up-a-PS3-controller

Par contre l'association des manettes ne se fait pas automatiquement au démarrage, alors j'ai opté pour une solution assez simple : rajouter un message + temporisation dans le script de démarrage de Emulationstation :

éditez le fichier /usr/bin/emulationstation et ajoutez après la première ligne #!/bin/bash :

#Test de presence d'une manette ou non
if [ ! -c /dev/js0 ]; then
#Message de connexion des manettes PS3 en bluetooth

echo "------------------------------------------------------------------------"
echo ""
echo ""
echo ""
figlet -c "PRESS -> PS <-  BUTTON"
echo ""
echo ""
echo ""
echo "------------------------------------------------------------------------"
sleep 10
fi


Dans cet exemple, le timer est positionné à 10s car dans mes tests c'est le temps nécessaire aux manettes pour s'associer et "vibrer" pour confirmer. Vous pouvez ajuster ce temps comme bon vous semble, mais si emulationstation démarre avant la détection des manettes, il va vous demander de les configurer à chaque fois...

En parlant de configuration, il va falloir associer les différentes touches/actions pour les 2 manettes :

vous pouvez utiliser l'outil interactif de Retroarch nommé Joyconfig :

pi@raspberrypi$ cd /opt/retropie/emulators/RetroArch/installdir/bin/ pi@raspberrypi$ ./retroarch-joyconfig

Une fois la configuration générée, il faut l'ajouter au fichier de configuration général :

pi@raspberrypi$ cd /opt/retropie/configs/all/
pi@raspberrypi$ vi retroarch.cfg

Dans mon cas, le pavé à ajouter (à la fin) donne : 

input_player1_joypad_index = "0"
input_player1_b_btn = "14"
input_player1_y_btn = "15"
input_player1_select_btn = "0"
input_player1_start_btn = "3"
input_player1_up_btn = "4"
input_player1_down_btn = "6"
input_player1_left_btn = "7"
input_player1_right_btn = "5"
input_player1_a_btn = "13"
input_player1_x_btn = "12"
input_player1_l_btn = "10"
input_player1_r_btn = "11"
input_player1_l2_btn = "8"
input_player1_r2_btn = "9"
input_player1_l3_btn = "1"
input_player1_r3_btn = "2"
input_player1_l_x_plus_axis = "+0"
input_player1_l_x_minus_axis = "-0"
input_player1_l_y_plus_axis = "+1"
input_player1_l_y_minus_axis = "-1"
input_player1_r_x_plus_axis = "+2"
input_player1_r_x_minus_axis = "-2"
input_player1_r_y_plus_axis = "+3"
input_player1_r_y_minus_axis = "-3"

pour la manette 2, vous n'avez qu'à copier le bloc et remplacer player1 par player2, ainsi que l'index du joystic (première ligne) de 0 à 1.

Vous pouvez aussi utiliser une combinaison de touches, pratique pour quitter un émulateur et revenir au menu principal. Dans mon cas j'ai définit comme touche joker la touche SELECT (bouton 0) son associée START (bouton 1) :

input_enable_hotkey_btn = "0"
input_exit_emulator_btn = "3"


Et voilà, votre console retro-gaming est fonctionnelle, passons maintenant à l'habillage.




3) Construction du boitier


Qui dit console dit forcément esthétique à soigner, puisqu'elle est destinée à trôner fièrement sous la TV. Or lorsque l'on parle de rétro-gaming, on pense directement à la NES, la "maman" des consoles dans le coeur des trentenaires. Il fallait que je m'en inspire.

Vous vous rappelez l'enceinte portative bluetooth DIY que j'avais construit dans une boite en bambou IKEA? Et bien il me restait le couvercle en stock, et le hasard faisant toujours bien les choses, les dimensions étaient parfaites pour le Raspberry Pi :



Sur la photo on peut voir des mini rallonges HDMI et micro USB puisque ces entrées/sorties seront déportées à l'arrière du boitier (esthétique toujours...)

On attaque la face avant, avec de gauche à droite la découpe pour l'interrupteur ON/OFF, le port RJ45 et les 4 USB.


A l'arrière, les prises HDMI/micro USB et une petit encoche pour la carte SD :


On prépare le masquage avant peinture :


Un petit coup de défonceuse pour faire quelques aérations et application de la bombe noire satinée :

Et voilà le résultat :


Bon ce n'est pas une copie conforme mais je tenais à conserver la couleur bois


Positionnement des composants à blanc :


Comme je disais plus haut, le Raspberry Pi rentre pile poil!


Fabrication du capot pour refermer la boite, avec côtés biseautés en rappel de la partie basse de la NES :


Zoom sur la découpe dédiée à l'extraction de la carte SD :


Un peu de soudure/gainage sur le câble d'alimentation qui a été raccourci pour l'ocassion :



Et raccordement à l'interrupteur. On colle/visse également les inserts qui vont servir de fixation au Pi :


Installation du Pi :


Mise en place du câble HDMI:


On referme la boite :


Résultat final, grosso-modo la taille d'une manette DualShock! :


4) Mise en route et session gaming!


Reste plus qu'à tester la bête :


Vous pouvez voir de gauche à droite la Movie Cube TV The Box de EMTEC, le retropie et la manette

Quelques jeux dans la sélection SEGA correspondant à la ludothèque de mon enfance : 


Et parmi eux le grand classique Double Dragon :


ça ne nous rajeunit pas tout ça :o)


Merci à Fanny et à Farnell / Element14 pour la fourniture du Raspberry Pi

3 commentaires :

  1. Salut. Tres beau boulot. Je suis en train de me faire sensiblement la même chose et je suis tombé sur ton projet en cherchant des idées sur internet. J ai une question : ou as tu trouvé tes entretoises pour fixer le rasperry ? Les plus petites que je trouve sont trop grosses et le mec du magasin m a dit que c etait les plus petites. Je voudrais eviter d agrandir les trous du raspberry tant qu a faire...

    RépondreSupprimer
    Réponses
    1. Salut,

      J'ai tout simplement récupéré des entretoises d'un boitier de PC, celles qui servent de support à la carte mère : http://amzn.to/2k2H5nP

      Pour obtenir la hauteur souhaitée tu peux en coupler plusieurs.

      Supprimer
  2. Bonjour,

    Ou avez vous trouvé les câbles pour déporter les ports du PI ?
    J'ai fouillé sans trouver !!!

    Merci par avance !

    RépondreSupprimer