03
févr.
'26

C'est l'histoire d'une petite console chinoise...

Publié le 03 février 2026

Je me suis rendu compte récemment que le fait de faire mes projets en stream me bouffait toute mon énergie, ce qui avait pour conséquence un très faible nombre de billets de blog publiés ces dernières années. Il est peut-être temps pour moi de prendre le temps, justement, de documenter certains projets sur ce blog car après tout c'est bien fait pour cela, un blog.

C'est l'occasion de présenter un projet qui m'a occupé une bonne partie de l'année 2025 et qui a commencé comme souvent par un achat inutile et une idée à la noix: le hack d'une console à moins de 10 euros trouvée sur AliExpress.

Une console chinoise à moins de 10€ ?

AliExpress pulule de consoles «rétro-gaming» qui se ressemblent vraiment presque toutes, avec leurs croix directionnelles, leurs 7 boutons et une connectique USB utilisée pour y brancher une manette externe. Elles possèdent une batterie, un écran TFT couleur, et proposent plus de 400 jeux rétro !

En réalité, elles utilisent toutes une puce spécialisée (ASIC, encadrée en vert ci-dessous) capable d'émuler des jeux NES stockés dans une mémoire Flash (encadrée en rouge ci-dessous),

La puce spécialisée est documentée et il doit bien y avoir moyen d'aller bidouiller la mémoire Flash pour modifier les ROMs qui s'y trouvent, mais je trouvais tout de même ça un peu limité. Vu qu'on a un boîtier, des boutons, une batterie et un écran, pourquoi ne pas remplacer la puce spécialisée par un ESP32 et faire de l'émulation de consoles plus funs que la NES, comme la (ou le) Game Boy ou encore une Master System ? L'idée semblait très intéressante, et la perspective de hacker cette console peu onéreuse était très tentante.

Cependant, le premier obstacle rencontré est bien l'écran TFT utilisé: impossible de trouver de documentation à partir des marquages, il va donc falloir essayer de discuter avec lui afin de déterminer le contrôleur qu'il emploie (en espérant qu'il soit documenté) mais surtout développer du code sur mesure. En effet, la plupart des projets d'émulation de consoles sur ESP32 utilisent des écrans TFT communiquant en SPI (une interface électronique utilisant 4 fils), alors que le modèle présent dans la console en utilise une vingtaine.

Identification du contrôleur d'écran

Des recherches sur Internet ont permis d'identifier des écrans similaires et notamment le brochage du connecteur. Sur cette base, j'ai pu y connecter un ESP32 supportant l'interface Intel I8080 avec un bus de données de 16 bits car c'est bien celle-ci qui est utilisée. Les commandes étant généralement standards, j'ai pu récupérer le code identifiant le contrôleur et valider qu'il s'agissait bien d'un contrôleur GC9306. Ayant acheté un lot de consoles (une habitude, j'en casse généralement au moins une lors des bidouilles), j'ai aussi pu valider que tous les écrans employaient des écrans avec le même contrôleur !

Afin de me faciliter la vie, j'ai conçu un PCB sur mesure pour y connecter un écran issu d'une console à un ESP32, avec au passage de quoi y connecter des boutons poussoirs pour tester un futur émulateur. La conception du PCB a été un peu laborieuse, il y a eu des ratés dans le routage, mais j'ai pu avoir un système fonctionnel.

Et après beaucoup de tests avec l'environnement ESP-IDF d'Espressif et de tentatives loupées, j'ai réussi à afficher ce que je voulais sur cet écran !

Gestion des contrôles utilisateur

Afficher des images c'est bien mais pouvoir réagir sur des appuis de boutons c'est mieux ! Une fois le contrôleur d'écran contrôlé par l'ESP32, je me suis attaqué aux boutons. Vu le nombre de _GPIOs_ restant, je me suis orienté vers un multiplexeur d'entrées/sorties en I2C que je connaissais assez bien, le MCP23017 (déjà utilisé avec un Raspberry Pi). Le PCB du prototype s'est ainsi vu greffer une version minuscule de ce chip (package VQFN), et le code permettant de gérer les appuis sur les boutons poussoirs reliés au MCP23017 a été assez rapidement écrit.

À partir de là, le plus dur était fait: j'avais terminé le code permettant de dessiner des pixels à l'écran et de savoir si des boutons sont appuyés. Enfin, c'est ce que je croyais jusqu'au moment où je me suis intéressé au logiciel qui allait me servir de base pour l'émulation des jeux...

La galère de l'intégration dans l'émulateur

Le meilleur projet d'émulation que j'ai trouvé est l'excellent Retro-Go (https://github.com/ducalex/retro-go) de Ducalex, et je me suis donc attelé à la création d'un fork pour intégrer mon prototype de console (oui, celui sous forme de grand PCB tout vert). Et ça n'a pas été sans mal.

En effet, afficher une image sur un écran TFT en pilotant le contrôleur GC9306 tout seul se passait plutôt bien, mais il se trouve que Retro-Go n'utilise que des écrans communiquant via une interface SPI et que son code (enfin, celui des composants de retro-core qui fait partie de Retro-Go) est optimisé pour un fonctionnement avec ce type d'écran. Il a donc fallu passer d'un code assez simple à un véritable driver d'écran optimisé permettant d'avoir à la fois une fréquence de rafraîchissement d'écran acceptable tout en s'accomodant du code de base des différents émulateurs et leur façon d'interagir avec l'affichage. Ce n'a pas été une mince affaire, mais après pas mal de galères je suis arrivé à un résultat acceptable. Ce n'est pas parfait car il y a encore quelques artefacts causés par les algorithmes de mise à l'échelle et de lissage, mais une fois le logiciel configuré c'est très fluide et réactif. Le support des boutons a quant à lui été une formalité, ne posant que quelques soucis à cause d'un GPIO mal configuré.

Modding de la console

Afin de m'éviter un long et pénible travail de création de PCB complet permettant de remplacer celui de la console, j'ai pris la tangente et ai créé un ensemble de trois circuits inter-connectés qui viennent se greffer au circuit existant de la console, évitant ainsi de gérer la charge de la batterie et l'alimentation. L'installation de ce mod a été laborieuse, mais les photos ci-dessous donnent une idée du résultat final.

La soudure des fils émaillés utilisés pour aller «piquer» l'état des boutons de la console, le découpage à la barbare du circuit d'origine pour avoir suffisamment d'espace pour y loger un ESP32 et les placements dispersés des différents PCB pour cause d'espace vraiment restreint ont rendu la réalisation de ce mod assez complexe. Au final, ça m'aura coûté moins cher qu'un PCB complet entièrement refait, mais l'utilisation a montré que dans certains cas la console redémarre sans crier gare, certainement à cause d'un mauvais contact. J'ai par ailleurs ajouté la possibilité d'utiliser une carte micro-SD, en utilisant les derniers GPIOs disponibles sur le module ESP32. J'ai mis la console moddée dans les mains de mes ados durant les fêtes de fin d'année, et ils ont bien aimé pouvoir y jouer malgré les quelques défauts identifiés.

Kit de modding ou PCB de remplacement ?

J'ai pris le temps de faire une version bien propre des trois PCBs utilisés dans mon mod, si jamais il prenait l'envie à certains de vouloir reproduire cette bidouille. J'en ai profité pour documenter ce projet sur un site dédié (https://virtualabs.github.io/tsing-tao-console-mod/), la console moddée ayant été baptisée TsingTao sur une idée de Tix.

Cependant, plusieurs choses ne vont pas avec ce mod:

  • il faut avoir des compétences en soudure et en découpe de PCB (pas forcément au niveau de ce que fait Millomaker (https://millomaker.fr) mais pas simple de souder du fil de cuivre émaillé);
  • la place dans la console est très réduite, surtout si on conserve les éléments d'origine;
  • le fait d'utiliser 3 petits PCBs connectés entre eux rend assez difficile l'installation.

J'ai donc entrepris au début de cette année 2026 de voir ce que peut donner un circuit imprimé complet qui viendrait remplacer celui vraiment cheap présent dans la console d'origine. Pour ce faire, j'ai modélisé la console en question sous FreeCAD pour avoir une idée précise de la forme de ce dernier et des emplacements des supports de vis, afin qu'il rentre parfaitement dans la console. C'était l'occasion d'expérimenter un peu plus la modélisation avec FreeCAD et les moyens de le faire collaborer avec KiCad !

Les prochaines semaines seront normalement consacrées à la conception et l'assemblage d'un tel circuit imprimé, avec je l'espère un test concluant !

05
févr.
'25

Désossage de la smartwatch Homday Xpert

Publié le 05 février 2025

Je traînais à Gifi avant les fêtes de Noël lorsque je suis tombé sur une montre connectée à un peu plus de 10 euros. Elle m'a rappelée mes déboires avec certaines smartwatches trouvées sur AliExpress, à la fois dans sa forme et dans les fonctionnalités suggérées par les photos de cette dernière affichées sur la boîte. Je me suis donc délesté d'une dizaine d'euros et suis reparti avec, dans l'idée de l'analyser durant un live Twitch. Et je n'ai pas été déçu !

Déballage, première utilisation et premières observations

Je planifie début janvier 2025 un live Twitch en annonçant que je vais m'amuser à analyser cette montre connectée, que ce soit au niveau de son électronique ou de son application associée. Je suis relativement curieux de savoir comment toutes ces fonctionnalités sont possibles dans une montre à moins de 15€.

Une fois la boîte ouverte, je me retrouve avec une montre qui semble d'assez bonne facture, avec un bracelet silicone plutôt agréable à porter, un chargeur magnétique et une notice d'utilisation. La notice indique de charger la montre à bloc avant le premier démarrage, cependant elle ne réagit pas à mes manipulations. Je la laisse se charger pendant une bonne demi-heure, et elle fonctionne alors comme prévu. Peut-être était-ce du au fait que je n'y ai pas touché pendant un mois ? En tout cas le niveau de batterie en sortie de boîte semble être relativement faible.

J'installe en parallèle l'application mobile associée, Lefun Health, sur mon smartphone (même pas peur !), crée un compte pour l'application et appaire ma montre avec cette dernière. Elle est reconnue sans problème, et la mise à jour automatique de l'heure et de la date se fait bien. Cependant, l'application mobile requiert tout une floppée de permissions assez intrusives comme l'accès au carnets de contacts, mais vu que la montre est censée pouvoir afficher les appels reçus, il est possible que ce soit normal.

L'application propose toute une floppée de thèmes de cadrans (ou watch face) sur la montre, mais à ma grande surprise la plupart sont payants et impossible d'en installer via mon smartphone qui tourne sous /e/OS.

Un tapis silicone vivant ?

Un aspect de la montre m'a tout de même intrigué. Comme l'expliquait Stéphane Marty dans son excellente vidéo intitulée Montre connectée intelligente à 2€ : anatomie d'une arnaque Aliexpress, les capteurs permettant de mesurer la saturation en oxygène dans le sang, ainsi que ceux mesurant le rythme cardiaque par exemple sont relativement coûteux et sont composés de plusieurs éléments miniaturisés dont des récepteurs photosensibles qui doivent être visibles sous le boîtier.

En regardant de plus près le boîtier de la montre, on observe la présence de quatres lentilles qui peuvent correspondre à ce type de capteurs. Néanmoins, il est difficile sans ouvrir ladite montre de savoir exactement quelle technologie est utilisée.

Je fais une série de mesure avec la motre portée sur mon bras, et elle donne des résultats qui semblent être acceptables. Lorsque les fonctions de mesure sont utilisées, que ce soit le rythme cardiaque, la saturation en oxygène ou la pression artérielle, les lentilles au dos du boîtier de la montre clignotent en rouge.

Je décide afin de tester la fiabilité de ces capteurs de placer la montre sur mon tapis silicone, utilisé habituellement pour les travaux de soudure, et de voir si déjà la montre se rend compte qu'il y a comme un souci. J'active le mode d'analyse de fréquence cardiaque et pose la montre à plat sur le tapis: après plusieurs secondes d'analyse, l'écran affiche différentes valeurs et enfin la synthèse des mesures.

Mon tapis serait-il ... vivant ? Je fais de même avec la mesure de saturation en oxygène, et la mesure de pression artérielle: à chaque fois la montre arrive à obtenir des mesures bien qu'elle ne soit pas portée sur un bras.

Je décide alors, pour en avoir le cœur net, d'ouvrir purement et simplement la montre afin de mettre à nu son électronique, exactement comme Stéphane Marty l'avait fait avec une smartwatch en provenance d'AliExpress.

Le grand reveal

L'ouverture du boîtier de la montre est un peu laborieux, je m'y attendais car il est marqué sur le site du distributeur (Gifi) que cette dernière est étanche:

Cependant, après quelques efforts à base de scalpel et d'outil adapté, j'arrive dans un premier temps à retirer le cache situé sur l'arrière du boîtier, celui se trouvant au contact de la peau du bras, et découvre la présence de quatre LEDs sur un circuit flexible, avec une sérigraphie indiquant "TS12-3_L21_KEY+LED_V1.0". Aucun capteur biométrique de présent, simplement des LEDs et un bouton poussoir connecté sur un PCB flexible !

Pour vous donner une idée, la photo ci-dessous montre un ensemble de capteurs de la Fitbit Surge où l'on peut voir des LEDs et un capteur photosensible utilisé pour mesurer les pulsations cardiaques (entre autres).

Crédit: Billie Grace Ward (Flickr), CC-BY

Je réussis ensuite à retirer l'écran et découvrir l'intérieur de la montre, et à ce moment la supercherie ne tient plus. La montre possède une petite batterie (annoncée à 200mAh) reliée à un petit circuit imprimé, auquel est aussi connecté un écran avec dalle tactile, un vibreur, un haut-parleur et un microphone. Pas de trace de capteur, juste ce qui ressemble à un système-sur-puce JieLi AC6958C6 en charge de la gestion de l'écran, de l'audio, de la connectivité Bluetooth, ainsi que des entrées utilisateurs.

Le circuit contient aussi un accéléromètre (utilisé par exemple pour déclencher des photos lorsque la montre est secouée) et une puce gérant la dalle tactile (BL6133).

Aucune trace de puce électronique ressemblant à un capteur de rythme cardiaque ou de mesure de saturation d'oxygène dans le sang, ni de capteur photosensible. Il y a fort à parier que les valeurs affichées par la montre sont tout simplement générées de façon aléatoire dans une plage de valeurs considérées comme normales.

Conclusion

Une smartwatch à 12 euros, cela semblait alléchant mais ce n'est au final pas bien différent de celles vendues sur AliExpress et qui ne correspondent pas aux promesses faites par le fabricant. Là où je suis étonné, c'est de trouver ce type de produit en rayon chez Gifi.

J'ai parcouru la notice en long et en large, et celle-ci mentionne pourtant des fonctionnalités qui sont simplement absentes du produit, mais qui semblent être simulées par ce dernier, en particulier les fonctions de suivi de santé. La notice mentionne certes que les données mesurées ne doivent pas être utilisées à des fins médicales, ambulatoires ou diététiques. Je peux comprendre pourquoi.

05
janv.
'25

Bye bye 2024, hello 2025 !

Publié le 05 janvier 2025

Il est temps comme chaque année de rédiger un billet de synthèse de l’année passée et en profiter pour se fixer des objectifs pour la nouvelle année et tout un tas de bonnes résolutions que je vais essayer de tenir … ou pas. Alors, qu’en est-il de 2024 ? Comment s’est déroulée cette année, et de quoi sera fait 2025 ?

TLDR; 2024 fut bien meilleure que 2023 !

Sur le plan personnel et avec du recul, 2023 a été une sacré épreuve. Je suis passé de l’état où je me pose tout un lot de questions à celui où je fais des recherches intenses et obtient finalement un début de réponse, et bien sûr les conséquences qui vont avec. Quand on se met à douter de sa santé mentale, qu’on en parle à des personnes de confiance en mentionnant des hypothèses (et c’est bien la chose la plus difficile à faire, je trouve) et que la première réponse est juste que l’on se fait des histoires ou que l’on cherche à avoir une étiquette “parce que ça fait cool”, ça n’est pas agréable du tout et vient nourrir encore plus la machine à ruminer. Et le besoin d’avoir des réponses se fait encore plus sentir, sans parler du sentiment d’incompréhension de l’entourage. En parallèle, cela m’a permis de découvrir que je n’étais pas seul, de discuter avec des gens qui comprennent ce que je traversais et qui connaissaient surtout des solutions pour atténuer certaines situations, dont le démasquage et les stim-toys. J’ai aussi appris doucement à dire de quoi j’avais envie ou besoin, ce que je n’avais jamais fait jusque là, et ça a largement contribué à une nette amélioration fin 2023. Ça, c’était en quelque sorte là où j’en étais fin 2023 au moment de rédiger le billet de wrap-up de l’année.

Après presque un an d’attente, j’ai enfin eu un rendez-vous pour un bilan neuropsy fin janvier 2024 (que j’ai relaté dans un billet de blog en octobre dernier) qui m’a permis d’avoir plus d’information et de comprendre ce qu’il se passait, ou du moins une bonne partie de ce qu’il se passait. L’hypothèse d’un trouble neuro-développemental (un trouble de l’attention en ce qui me concerne) a ainsi fait son chemin, et a permis à mon entourage proche de mieux comprendre, et en ce qui me concerne de moins culpabiliser. Le reste de l’année s’est très bien passé, et j’ai même réussi à en parler sur le blog ! Car oui, j’ai compris peu de temps après mon bilan qu’il allait falloir que je démasque encore plus si je voulais aller mieux. Quand je parle de démasquer, il s’agit principalement d’arrêter de me forcer à faire des choses pour plaire aux gens, d’apprendre à exprimer ce que je veux vraiment, d’accepter que je ne sois pas capable de faire certaines choses et que j’en fais d’autres qui peuvent paraître bizarres. En bref essayer d’être vraiment moi, celui qui a été caché pendant un bon bout de temps, et osef de passer pour un weirdo.

Côté streaming, le fait de m’autoriser à ne pas finir des projets et même d’en stopper certains dès janvier m’a permis de me sentir plus tranquille, d’avoir moins de pression et d’être plus serein. J’ai aussi eu l’occasion d’expliquer mes déboires de santé mentale durant quelques lives, d’une part car j’avais donné un talk à leHACK qui parlait de neurodiversité avec des exemples de ce que je vis dedans (même si c’était pas clairement indiqué) et d’autre part parce que ça entre dans la stratégie de ne plus me cacher. Je me suis aussi heurté aux autres effets du TDA, à savoir la procrastination à haut niveau et quelques hyperfixations. Ma procrastination légendaire qui m’a amené à ne pas réussir à commander des composants pour des projets pendant des mois et du coup à ne faire que du développement ou du reverse en stream, et les hyperfixations qui ont fait que pendant pas mal de semaines je n’ai pas vraiment diversifié les sujets… Mais c’était trop juste trop bien (et désolé pour ceux qui aiment la diversité) ! Ceci dit, j’ai quand même réussi à presque terminer une version utilisable de CutcutGo, et ça ce n’est pas rien. Alors oui, ce n’est pas encore parfait et demande à être amélioré, mais je considère que c’est tout de même une réussite de 2024.

Enfin, côté boulot j’ai aussi participé à une initiative interne visant à parler de santé mentale au travers de témoignages, vu que c’est la grande cause nationale de 2025, ce qui n’a pas été une mince affaire. J’ai fait une sorte de coming out, avec les risques que ça engendre. Je ne sais toujours pas si c’est une bonne ou une mauvaise chose, l’avenir le dira.

L’avancement des projets en 2024

Ça a été bien plus mouvementé qu’en 2023, mais j’ai tout de même réussi à faire des choses ! Une des réalisations dont je suis assez fier, c’est le black badge de leHACK 2024: un badge unique qui offre un accès à vie à l’évènement pour celui qui le remporte. Ce badge a été conçu en urgence et a demandé de travailler la conception électronique mais aussi mécanique via de l’impression 3D, et le résultat était vraiment cool. C’était la première fois que je faisais un projet avec un bouton plastique jouant sur la flexibilité naturelle du PLA, ou que j’utilisais du PLA transparent en combinaison avec des LEDs. Le boulot fait sur le projet CutcutGo et en particulier son bootloader avec les supports successivement de FAT12 et FAT32 a été très enrichissant, j’ai appris énormément sur ces systèmes de fichiers et comment les simuler via une connectique USB et un micro-contrôleur. La dernière version en date du micro-logiciel fonctionne suffisamment bien pour que ça soit à peu près utilisable, et ce n’est pas rien après deux ans de travail.

Côté interventions, j’ai eu la chance de participer à différentes conférences et de présenter des travaux variés, ce qui a été notamment l’occasion de retourner à DEFCON en août et de présenter un gros projet sur lequel je bosse depuis deux ans, WHAD. J’ai aussi animé avec Romain Cayre des ateliers sur WHAD, et je dois dire que ça change des talks (c’est plus fatiguant mais aussi très intéressant, sans parler des nombreux bugs trouvés durant ces sessions). Mon talk non-technique sur la paresse présenté à leHACK était un de mes challenges de cette année 2024, et a été un des plus durs à donner, mais aussi l’un des plus satisfaisants car il m’a permis d’avoir de nombreux échanges lors de l’évènement avec des personnes qui se posaient des questions ou qui voulaient simplement discuter du sujet.

La fin de l’année a été plutôt prolifique en développement, j’ai bien avancé sur différents projets au détriment de hacks plus concrets impliquant de l’électronique ou du reverse hardware, mais cela m’a surtout permis d’éviter de ranger l’atelier. Car oui, celui-ci était en bazar et je ne trouvais pas l’énergie de tout ranger.

Alors, on fait quoi en 2025 ?

Dans l’immédiat, on va reprendre les bidouilles sur les consoles chinoises pas chères car j’ai besoin de retrouver du concret, à savoir de la soudure et du bon vieux hacking hardware. Et aussi parce que le projet est en standby depuis plusieurs mois, il est vraiment temps de le ressortir et d’avancer dessus. J’ai aussi l’atelier prévu pour leHACK Kids sur lequel je dois avancer car la date approche à grands pas, j’aimerais bien terminer par ailleurs le reverse et le hack de la board Nucleo STM32WB55, tout comme prendre du temps pour améliorer le logiciel lié à CutcutGo, mon firmware maison pour la Cricut Maker. Et jouer aussi avec plusieurs trucs qui sont dans les cartons depuis quelque temps et qui attendent d’être bidouillés !

Comme vous pouvez le voir, ce ne sont pas les idées qui manquent, et je ne compte pas changer la recette de 2024, vu le bien que ça m’a fait. Oui, la gestion des projets sera chaotique, les plannings peut-être chamboulés, mais le principal c’est juste de prendre du plaisir à bosser sur des projets, découvrir de nouveaux trucs et d’apprendre un maximum.

Le bureau devrait avoir un petit lifting, j’ai prévu de changer l’agencement et d’essayer d’optimiser le rangement pour avoir de meilleures conditions de travail et un visuel moins horrible lors des streams ou des visioconférences. Il est prévu que je change de bureau, que je refasse l’éclairage et que je règle les soucis d’USB liés au streaming en doublant le matériel lié au télétravail, ça va faire quelques investissements mais je pense que ça me permettra aussi d’être plus tranquille et de mieux scinder les deux. Et il se pourrait que le bazar ambiant que j’arrivais à cacher jusque là soit visible, mais bon disons que ça fait partie de la démarche d’assumer pleinement mon côté désorganisé.

Bref, je vous souhaite une très bonne année 2025, et tout plein de projets !



Les contenus disponibles sur ce blog sont publiés sous licence Creative Commons BY-NC-SA.
Vous pouvez réutiliser tout ou partie de ces contenus à condition de citer l'auteur et l'origine, vous ne pouvez en faire une utilisation commerciale, et enfin vous devez partager tout travail ou œuvre dérivée sous les mêmes conditions — c'est-à-dire avec la même licence d'utilisation Creative Commons.