Fabriquer sa propre console portable (v2) : Le casse tête des écrans

Par  | Le  | 5 Commentaires
DIY

Je ne compte plus le nombre de questions qu’on m’a posé concernant l’écran de la console portable et plus spécialement sur sa fluidité. Je prends le temps d’un article pour vous expliquer pourquoi cela pose autant de problème, si il existent des solutions et pourquoi j’ai décidé d’en changer pour la nouvelle version de la console portable que je suis en train de faire.

Il n’y a pas à dire, faire une console portable reste le truc le plus cool sur lequel j’ai bossé (et je bosse encore) ces derniers temps mais les problématiques ont été nombreuses et continuent d’ailleurs de l’être avec cette nouvelle mouture de machine portative plus fine et plus puissante.

La fluidité de l’écran, que ce soit le feu Tontec d’origine (plus en vente) ou le Waveshare 3.5 pouces, ils posent tous un problème récurant, risquant de pourrir le rendu final et donc le projet tout entier.

Vous ne voulez plus de problème, prenez un écran avec une entrée HDMI !

Pourquoi ça ?

Les écrans portatifs pour Raspberry Pi sont connectés à ce dernier par le port GPIO. Au delà de 4 pouces, on peut trouver des écrans que l’on peut directement connecter au port HDMI.
EmulationStation utilise l’OpenGL, une interface de programmation qui utilise certaines librairies (portions de code) qui ne peuvent pas être géré par le GPIO car non pris en charge par ce dernier.

Seul l’HDMI des Raspberry peut gérer ce type d’affichage sans aucun problème. C’est pourquoi, dans le cadre du développement de notre console portable, nous devons copier les images sorties du port HDMI vers le port GPIO.
Comme je vous l’expliquai dans le précédent article, FBCP ou Raspi2fb sont de petits programmes qui tournent en tâche de fond pour exécuter ce type d’action.

Il faut choisir l’un des deux et le définir en tant que « service » afin qu’il démarre automatiquement avec l’OS. Il faut bien comprendre que copier les images de la sortie HDMI vers la sortie GPIO consomme de ressources et pénalise de fait, la fluidité des images normalement restituées par l’émulateur / l’application FrontEnd (EmulationStation).

Plusieurs paramètres rentrent en compte quand on veut jouer sur la fluidité de l’image de notre petit écran :

  • La résolution finale  d’origine HDMI copié et affichée sur votre écran, définissable dans le « config.txt » du boot
  • La résolution native de votre écran (car plus il y a de pixels affichées, plus il faudra utiliser de ressources)
  • Le modèle de Raspberry Pi utilisé : Plus le processeur est puissant, plus le processus de copie est rapide.
  • En accord avec la précédente ligne, le nombre de MBits alloué au GPU, définissable dans le « config.txt » du boot.
  • La qualité de rafraîchissement de l’écran : Certains ne peuvent pas monter à plus de 12 Hz (soit 12 rafraîchissement par seconde)
  • La bande passante du port GPIO (le volume de données alloués au port GPIO), définissable dans le « config.txt » du boot.

Clairement, pour résoudre l’ensemble des problèmes citées ci dessus, il faudrait un tout petit écran avec un gros processeur. C’est à dire un écran 2.8 pouces d’une résolution de 320 x 240 sous un Raspberry Pi 3 et là il n’y aurait aucun problème de sensation de lag / saccade.

C’est ce que vous verrez sur la plupart des projets que j’ai pu observer sur le Web.

L’écran 3.2 pouces avec l’emplacement « facile » du port GPIO qu’il faut couper à la pince pour gagner sur l’épaisseur totale de la machine

Une alternative fluide mais moche

Il y a tout de même un moyen assez efficace de résoudre le problème de la fluidité, c’est de passer par la sortie TV (déjà existante sur le Pi) mais forcement le rendu sera un peu plus baveux…
C’est comme si vous utilisiez une connectique RCA (analogique). Les pins se trouvent juste en dessous des pins GPIO.
Il faut cependant trouver un écran analogique chez un marchand et ça devient de plus en plus compliqué. S’ajoute à cela l’alimentation de l’écran, souvent de 12v, une vraie galère à gérer dans une machine compact…

Les marques

C’est peut être le point le plus important que je vais aborder ici. Le choix de votre écran n’est pas à négliger, bien au contraire. Je ne compte plus le nombre de mails et autres messages me demandant soit de l’aide pour installer un écran générique de 10€, soit pour le faire marcher correctement…
J’ai moi même tester bon nombre de ses écrans et croyez-moi, le meilleur rapport qualité prix se trouve actuellement chez Waveshare (constructeur spécialisé dans les périphériques Raspberry Pi/Arduino).

L’écran WaveShare 3.2 avec un Raspberry Pi Zero W avant les soudures des pins GPIO

Quoi prendre ?

D’après mes propres tests, si vous souhaitez avoir des écrans avec un rendu fluide :

  • Un Raspberry Pi 3 (tout type) avec un écran de 2.8 pouces (Waveshare si possible bien sûr) et au delà. Le RPI 3 peut absorber un gros calcul et gérer sans problème le rafraîchissement du petit écran ainsi que la gestion de l’affichage de l’HDMI (en même temps).
  • Un Raspberry Pi Zéro W avec un écran 2.8« , 3.2″ et 3.5″. Au delà de cette taille, la fréquence d’image passe en dessous de 10i/s, ce n’est pas ou peu jouable…

Comptez que pour ce type de configuration, je prends en compte la gestion logicielle des émulateurs (s’ajoutant au calcul CPU). Ils fonctionnent parfaitement mais avec quelques limites en fonction du modèle de Frambroise que vous allez choisir.
Le RPI3 pourra émuler jusqu’à la Dreamcast sans trop de difficultés alors que le Raspberry Pi Zero W ne pourra monter « que » jusqu’à la première Playstation (et pas sur tous les jeux non plus).

A toi de voir Michel

A vous de faire votre choix, si la place et la consommation énergétique de votre machine ne vous gène pas, prenez un Raspberry Pi 3 pour émuler dans les meilleures conditions possibles et sur le plus de machine possible. Cependant si vous préférez faire une console compact peu énergivore et très rétro, optez alors pour le modèle Zero W couplé à un écran d’une taille inférieure ou égale à 3.5 pouces.

Mais n’oubliez jamais : Se trompez, c’est avancer. Et croyez-moi, j’avance beaucoup en ce moment ;)

Tags : console, diy, écran, gameboy, nes, nintendo, portable, raspberry pi, rpi, snes, waveshare,

Commentaires

  1. Nicosan

    Yo pad ! Super intéressant, comme d’habitude.
    As-tu une idée du budget moyen total que tu investis dans un projet DIY ? Comprenant les essais non concluant.

    1. PaductionPaduction Auteur de l'article

      En comprenant les essais non concluant, j’ai envie de dire « trop » :D
      Mais plus sérieusement, tout est pris en charge par les gains engrangés par les liens d’affiliation du site (donc par les visiteurs du site, merci ;)).

      L’avantage, c’est que je garde tout et je réutilise pour d’autres projets mais impossible de te donner un chiffre exact.

  2. Nicosan

    Je vois un peu le genre. C’est super que ta passion soit financée par ta passion :p
    De mon côté, j’ai mis mon site en ligne. Enfin, pour l’instant une version dev du site. Ta nouvelle mouture m’a donné un coup de botte au cul. Je n’ai même encore rien développé pour l’instant… Uniquement de la réutilisation d’outils WordPress :D
    Allez, tcho

  3. arnaud

    Salut,

    Je démarre depuis quelques semaines la fabrication d’une console de jeu portable. J’ai écumé pas mal de site et le tien est plutôt bien fait. Je m’inspire donc de ton projet pour certains aspects…

    Je ne souhaite pas utiliser le port GPIO pour l’affichage car je trouve que le port hdmi est là pour ça et j’utilise le port GPIO pour le son et le controlleur.

    Dans ton article, tu dis qu’il ne faut pas prendre plus de 3.5 pouces pour un pi zero. Mais tu préconises cela si on veut passer par le GPIO? Je ne vois pas en quoi la diagonale de l’écran impacte le taux de rafraichissement… La résolution d’affichage oui, mais pas la taille…
    J’ai fait un petit test avec un RPI B et en HDMI sur une TV 50 pouces en 720p Sonic est plutôt fluide!

    1. PaductionPaduction Auteur de l'article

      Hello, bien sûr le port HDMI fait ça très bien et même bien mieux que le port GPIO évidemment.
      Tout est une question de choix comme je l’ai dis dans cette article. Pour ma part je cherche la solution la plus fine et compacte possible.
      L’HDMI prend beaucoup de place et les écrans qui l’utilise, sont généralement au dessus de 3,5 pouces.
      Pour la question sur le Pi Zero, je parlais simplement du port GPIO oui, il n’y a pas de question de « taille » quand on sort par l’HDMI, tu peux sortir sur l’écran de ton choix bien sûr et c’est la définition choisie (ce que tu appelle résolution) qui va impacter les performances du RPI.
      Merci pour ton commentaire et bonne continuation dans ton projet Arnaud 👍

Laisser un commentaire

Coucou toi,

En postant ton commentaire, essaye d'être le plus sympatique possible dans tes propos et dis au minimum "bonjour" si tu souhaites poser une question ;)

Merci pour ta participation