Fabriquer sa propre Xbox Series X (ou presque)

Les avantages du Gamepass à prix réduit !

Comme beaucoup d’entre vous, je trouve que la Xbox Series X (ou S) est une console formidable. Sobre et élégante, la machine de Microsoft possède de plus, un énorme catalogue de jeux grâce à un abonnement Gamepass particulièrement alléchant. Son seul défaut, c’est son indisponibilité en magasin…
C’est de cet état de fait que m’est venue l’idée de créer mon propre modèle, la Xbox Series R !

Qu’est ce que ?

Dans ce projet, nous allons simuler une Xbox Series X afin de jouer aux mêmes jeux que la console de Microsoft. Le tout, à moindre coût, pour peu que vous ayez déjà un PC.

On va se servir de votre PC (la config du mien) et du service gratuit Steamlink pour calculer puis diffuser (streamer) les jeux du PC à une Xbox imprimée en 3D munie d’un Raspberry Pi 4 via le réseau local.
La phrase n’est pas très digeste mais l’idée est là.

Comme pour la Craftbox, j’ai essayé d’intégrer plusieurs notions intéressantes telles que l’électronique, la modélisation & l’impression 3D, les commandes Linux et le jeu vidéo évidemment ;)

Je l’ai appelé Xbox Series R pour « RemotePlay« 

Le matériel

Il va falloir être un petit peu équipé pour réaliser ce projet. On y va, voici la liste :

L’outillage

Une impression (ou deux) de déjà vu

Comme d’habitude, je vous mets à disposition l’ensemble des fichiers nécessaires à la construction de cette machine. N’hésitez pas à me faire un retour dans les commentaires ou sur le Discord de la communauté en cas de problème.

Télécharger le fichier ZIP contenant les STL dans la boutique

  • La coque (partie principale)
  • Le socle du Raspberry
  • Le support pour l’alimentation stabilisée
  • La plaque de support de la matrice LED
  • Le « L » de maintien du bouton d’allumage
  • La grille
  • La sous grille

Design

Pour ce projet, je me suis (évidemment) basé sur le design de la machine originale pour réaliser le design de cette Xbox Serie R. J’ai réduit les dimensions de 25% de la coque de la Serie X et J’ai supprimé la prise USB en façade qui ne serait pas très « joli » sur ce modèle plus compact.

Ce n’est pas un simple redimensionnement de la Xbox Series X d’origine mais plutôt une adaptation à un format plus compact. Il n’est, par exemple pas possible de faire un bouton plus petit que celui de mon modèle sans entaché l’ergonomie de la bête.

Pour parfaire le visuel, j’ai prévu un emplacement pour un panneau de matrice LED. Bon nombre de joueurs s’étaient posés la question au moment de l’annonce de la console par Microsoft : « heu, la grille en haut, elle s’allume ou pas ? »

Je chie ne suis pas particulièrement fan de « RBG » mais avoir ce petit effet lumineux projeté sur un mur/plafond pendant qu’on joue est sincèrement du plus bel effet. De plus, cela permet d’étudier un peu les librairies Python associées à la matrice LED !

Résumons, mon modèle possède donc trois étages :

Le Raspberry Pi est fixé sur une plaque grâce à quatre vis M3. Ces mêmes vis maintiendront une plaque (support) sur laquelle sera fixée le régulateur de tension.

La matrice de LED de 8×8 sera collée sur une plaque, elle même fixée au deuxième étage de la coque.

Enfin, la plaque d’aération, composée de deux parties (haute et base) est fixée par « serrage » sur le haut de la machine. Il faudra un peu forcer pour bien la positionner.

Tous les fichiers ont été réalisés sur Autodesk Fusion 360 et il se peut que je les modifie au fil du temps.

Raspbian

Une fois de plus, nous allons faire confiance à la distribution Raspbian pour faire tourner Steamlink sur notre Raspberry PI.

Télécharger l’ISO de Raspbian version desktop et installez là sur votre carte micro SD.
Ajoutez à la racine de la carte SD, un fichier vide nommé SSH (sans extension), ça permettra d’activer la connexion SSH du Pi.

Démarrez votre micro PC en branchant un câble RJ45 branché sur l’Ethernet. Patientez un peu, le temps que l’OS se charge et installe tout ce qu’il faut.
Pour établir une connexion SSH, vous pouvez utiliser le client Putty sur PC ou directement le Terminal sur MacOS/Linux.

Connectez-vous en indiquant l’adresse IP de votre PI (à identifier le sur votre réseau local) :

ssh pi@adresseipdevotreip

Password : raspberry

Lancez les commandes suivantes pour mettre à jour le système :

sudo apt-get update -y
sudo apt-get upgrade -y

L’option update met à jour la liste des fichiers disponibles dans les dépôts APT présents dans le fichier de configuration /etc/apt/sources.list. L’exécuter régulièrement est une bonne pratique afin de maintenir à jour votre liste de paquets disponibles.

L’option upgrade met à jour tous les paquets installés sur le système vers les dernières versions (couramment utilisé).

Commençons par créer notre répertoire de travail et travaillons à l’intérieur :

mkdir projectxbox
cd projectxbox

Nous utiliserons deux « repository » existant pour piloter notre console.
Tout d’abord, nous allons contrôler l’allumage du Raspberry Pi grâce au travail de Howchoo disponible juste ici :

https://github.com/Howchoo/pi-power-button

Nous allons simplement suivre la procédure indiquée par l’auteur pour installer le script de gestion du bouton d’allumage. Il faudra faire le branchement de la partie électrique au préalable pour que la manipulation fonctionne correctement.

git clone https://github.com/Howchoo/pi-power-button.git
./pi-power-button/script/install

Voilà, votre button devrait être fonctionnel , vous le voyez, c’est assez simple ;)

Passons ensuite à la gestion de la matrice LED. Cette fois-ci, nous allons utiliser le travail de Jgarff :

https://github.com/jgarff/rpi_ws281x

Une fois de plus, il suffit de suivre les commandes indiquées par l’auteur et de choisir le language que nous souhaitons utiliser au sein notre micro ordinateur :

git clone https://github.com/jgarff/rpi_ws281x

Nous compilons le contenu des fichiers (ici en C) :

cd rpi_ws281x/
sudo scons

On se positionne dans le dossier Python :

cd python

On procède à la compilation et l’installation du script puis de la bibliothèque Adafruit nécessaire au bon fonctionne du script :

sudo python3 setup.py build
sudo python3 setup.py install
sudo pip3 install adafruit-circuitpython-neopixel

Enfin, nous pouvons tester notre installation pour savoir si notre matrice répond bien aux commandes que lui transmet le script Python :

sudo python3 examples/strandtest.py

C’est un fichier d’exemple avec plusieurs manipulations de la matrice Led, vous pouvez jouer un peu avec et comprendre comment il fonctionne.
Pour gagner du temps, vous trouverez ci-dessous, un lien menant vers le fichier qui pilotera l’animation des LED de notre console (xboxledscript.py).

https://github.com/paduction/xboxseriesr

Il vous suffira de l’envoyer par SFTP via Cyberduck (Mac) ou via WinSCP dans le même répertoire que le script d’exemple « examples« .
Ce n’est pas (du tout) propre, j’en suis conscient, mais c’est pour simplifier au maximum cette partie déjà bien chargée. Si vous êtes à l’aise avec Linux, vous saurez très bien ou stocker votre script ;)

Maintenant que notre fichier est en place, nous allons le transformer en service (et même deux services) pour qu’il démarre automatiquement au démarrage de la console mais également quand on l’éteint :

cd /lib/systemd/system
sudo nano xboxled.service

Les commandes ci-dessus vont créer un premier « fichier » de service. Ce sera celui qui lance le script quand la console est allumée. Le deuxième service sera xboxledshutdown.service
Quand la console s’éteindra, elle exécutera ce deuxième service.

Je vous ai mis les fichiers dans le repository du projet, vous pourrez les trouver juste ici :

[Unit]
Description=Manage Leds of Xbox Series R
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/pi/projectxbox/rpi_ws281x/python/examples/xboxledscript.py -c
Restart=on-abort

[Install]
WantedBy=multi-user.target

J’attire votre attention sur là ligne « ExecStart » qui se compose de deux paramètres. Le premier indique le chemin de l’application que l’on va utiliser à savoir Python. Le deuxième paramètre sera le chemin du script qui doit être exécutée, avec un argument « -c » qui permet de choisir le comportement des LED au sein du script.

Même chose pour le deuxième service lié à l’animation des LED (rouge clignotant) au moment de l’instinction de la machine (fin de vidéo) :

[Unit]
Description=Manage Leds of Xbox Series R when shutdown
After=multi.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/usr/bin/python3 /home/pi/projectxbox/rpi_ws281x/python/examples/xboxledscript.py -s

[Install]
WantedBy=multi-user.target

Cette fois-ci, la commande sera « ExecStop » pour que le script s’exécute à l’arrêt du service. Il faudra passé l’argument -s (pour shutdown) qui sera reconnu par le script.

Electronique

L’électronique est répartie dans trois catégories, toute nécessite un fer à souder et l »équipement qui va avec :

  • L’alimentation (USB Type C)
  • L’allumage / l’extinction (Le bouton poussoir)
  • L’éclairage (les LED)

Dans la vidéo, je vous demande de récupérer les fils rouge et blanc de l’alimentation centrale du panneau de LED. Ces deux fils doivent relier l’USB Type C femelle à l’USB Type C mâle. Faites attention, l’alimentation est (logiquement) polarisée donc soudez le plus avec le plus et le moins avec le moins ;)

Collez à l’aide d’un pistolet à colle chaude, le port USB Type C femelle à droite du Raspberry Pi.

Pour le bouton « X », il n’y a pas de réelle difficulté. Il vous suffit de prendre un bouton électronique classique en plastique (format 10mm) et de le poncer sur la moitié de sa hauteur, même chose avec le bouton Xbox.

Collez les deux ensemble puis percez par l’arrière au centre du bouton avec un foret de 3mm.

Protégez votre LED avec une résistance de 220 ou 330 ohm en fonction de ce que vous avez et de la puissance d’éclairage que vous souhaitez (n’oubliez pas la célèbre loi d’ohm au passage : U = RxI).
Branchez les pattes du bouton sur les ports 5 et 6 sur GPIO du Raspberry Pi et branchez la LED du bouton sur la PIN 1 pour la borne positive et 9 pour la borne négative.

Passons ensuite au panneau LED. Tout d’abord, on va dessouder les fils avec le port JST femelle.

Soudez ensuite ces câbles à trois fils Dupont, afin de pouvoir les utiliser sur une breadboard ou directement sur les Pins du Raspberry Pi. L’alimentation des fils est représentée par les fils de couleur rouge et blanche. Le fil vert sera notre fil « pilote », c’est le seul qui doit être branché. Sur la PIN 12 du port GPIO pour être précis.

L’alimentation partira du port USB Type C femelle vers le régulateur de tension (port VIN) et on viendra souder ensuite les fils rouge et blanc du panneau LED sur le VOUT+ et VOUT- du régulateur.

Steamlink

Steamlink s’installe très facilement :

sudo apt install steamlink

L’installation se fera en quelques minutes et ajoutera même un raccourci sur le bureau de Raspbian Desktop. Pour lancer Steamlink et vous suffit de double cliquer sur l’icône situer sur votre bureau ou de lancer la commande suivante :

steamlink

Démarrer Steamlink c’est bien mais le faire automatiquement au démarrage de la console c’est encore mieux ! Pour ça il suffira de rajouter un ligne à l’autostart de notre Raspbian :

sudo nano /etc/xdg/lxsession/LXDE-pi/autostart

Ajouter à la fin du fichier la ligne suivante :

@steamlink

Manette Xbox One

Pour être dans les mêmes conditions qu’un possesseur de Xbox Series X, nous allons utiliser la même manette : Le Xbox One Controller. Elle est disponible à 59€ au moment ou je redige cet article : https://amzn.to/3aTVYVn

Nous allons connecter la manette en bluetooth au Raspberry Pi afin d’avoir une belle expérience de jeu sans fils comme avec la console originale. Cependant, j’ai eu quelques difficulté entre le Raspberry et le mode bluetooth un peu particulier du Xbox One controller. Dans un premier temps activer le bluetooth dans Raspbian via la commande suivante :

sudo raspi-config

Laissez-vous guider jusqu’à l’activation du service. Par la suite, il va falloir modifier la configuration du service pour que la manette puisse être apparait correctement :

sudo bash -c 'echo 1 > /sys/module/bluetooth/parameters/disable_ertm'

Malheuresement, cette commande doit être répétée à chaque redémarrage de la machine. Nous allons donc ajouter un fichier de configuration personnalisé pour notre bluetooth :

sudo nano /etc/modprobe.d/bluetooth.conf

Dans ce fichier vide, ajoutez la ligne suivante pour que notre modification soit prise en compte à chaque démarrage de la machine :

options bluetooth disable_ertm=1

Ceci étant fait, nous allons connecter notre manette Xbox. Je préfère réaliser mon appairage en ligne de commande. Voici comment procéder :

bluetoothctl
agent on

Lancez l’appairage sur la manette grâce au petit bouton prévu à cette effet. Le X du logo doit clignoter rapidement. Lancez ensuite la détection sur votre Raspberry Pi :

scan on

Et réalisez la commande suivante quand vous avez identifié l’adresse Mac de votre manette :

connect 30:21:3E:31:C6:2B

Le X du logo doit rester allumé si vous avez réussi la manipulation. L’appairage ne va pas suffire pour jouer correctement au jeu UWP de votre compte comme nous allons le voir dans la prochain chapitre.

Gamepass

Une fois la manette connectée, il va nous rester la problématique d’intégration des jeux du Gamepass sur steam. Il existe une fonction d’ajout des jeux « non steam » dans steam pour intégrer un produit acheter sur une plateforme concurrente ou encore un jeu physique (oui, ça existe encore).

Cependant, les jeux provenant du Gamepass et donc de l’application (store) Xbox de votre PC sont dans un format incompatible avec steam : le UWP. Ce format a été mis en place par Microsoft pour centraliser des applications et favoriser une interface « accessible » et « asynchrone ». Pire encore, la manette Xbox n’est pas reconnu dans les jeux UWP en passant par Steam…

A cause de ce format particulier, on ne peut pas ajouter nos jeux du Gamepass sur Steam et en profiler via Steamlink. L’autre problème étant la réconnaissance de la manette Xbox One au sein des jeux UWP. Heureusement, une solution « propre » existe et croyez moi, j’en ai bien chié pour trouver la bonne…

Il suffit d’installer et lancer le logiciel suivant : https://alia5.github.io/GloSC/

Dans l’application, vous pourrez importer vos applications (Forza 4, Gears of Wars, Halo…) en sélectionnant les jeux parmi la liste proposée ou rentrer le raccourci du jeu installé directement dans la zone prévu à cette effet (comme dans la vidéo).
Par la suite, redémarrez Steam sur votre PC et vous verrez apparaitre vos jeux du Gamepass dans votre bibliothèque de jeux !

Démarrer votre Xbox Series R, Steamlink démarrera automatiquement si vous avez bien suivi cet article du début. Dans Steamlink, allez dans le menu paramètres des controlleurs. Et activer la configuration du Xbox

Non seulement, vous aurez l’ensemble de votre catalogue Steam mais aussi l’ensemble du catalogue Gamepass, sans oublier Epic Games Store, Gog, Battle.net, Origin, UPlay et tous les autres clients de jeux logiquement installés sur votre PC.

Le petit truc sympa avec l’impression 3D, c’est qu’on peut faire ce qu’on veut. Et même si Microsoft n’a pas encore « colorée » sa Series X, ils ont établi un large panel de manette Xbox de couleur.

Vous voyez ou je veux en venir ? Si vous possédez la superbe édition Pulse Red (https://amzn.to/334XDmv) pourquoi ne pas réaliser notre box de la même couleur, avec ce type de filament : https://amzn.to/3tamik0

Il existe également des boutons de couleurs pour parfaire votre visuel.

Conclusion

Simple au premier abord, ce projet de Xbox Serie R s’est révélé plus ardu que prévu mais ça fait parti du jeu :)
J’espère vous avoir donner envie de réaliser votre propre machine.

N’hésitez pas à partager l’article et à vous lancer dans le projet même si vous n’avez pas les connaissances. Apprendre c’est comprendre et comprendre c’est aimer !

5 réflexions sur « Fabriquer sa propre Xbox Series X (ou presque) »

    1. Pad Auteur

      Hello Tony,

      C’est une question assez étonnante :D. Je ne connais pas le poids total mais on doit être aux alentours des 200 gr je dirais :)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *