La console de jeu Wii utilise des manettes appelées Nunchuk, baptisées ainsi à cause d’une lointaine ressemblance avec le nunchaku… De forme ergonomique, elles comprennent deux boutons (C et Z), un joystick analogique et un accéléromètre 3 axes. Le souci c’est qu’elles sont équipées d’une prise spécifique, qui sort un bus I2C, vers la Wii. Léon Anavi (Anavi Technology) a développé une carte adaptatrice à base d’un module SeeedStudio, qui transforme la manette Nunchuk en simple périphérique USB que vous pouvez utiliser sur PC, Raspberry Pi ou sur un quelconque de vos projets. Je vous présente cet adaptateur dans l’article ci-dessous.
Au sommaire :
Déballage
Le kit est arrivé bien protégé dans une boîte en carton.
A l’intérieur j’ai trouvé la manette, la carte Anavi Handle et un boîtier en acrylique. Si vous avez déjà une manette Nunchuk vous pouvez commander uniquement la carte.
La carte est basée sur un module Xiao RP2040 de SeeedStudio. Le connecteur spécial pour la manette Wii fait partie du PCB (circuit imprimé) de la carte.
L’arrière de la carte ne comporte pas de composant.
Si on regarde le connecteur de face on voit qu’il comporte 2 contacts d’un côté et 3 de l’autre.
Cela vous aidera à connecter la manette sur la carte, dans le bon sens.
Deux clips viendront bloquer la prise sur la carte.
Pour débloquer la prise il suffit d’appuyer sur les deux parties arrondis sur les côtés de la prise, les clips s’effacent et on peut enlever la prise sans forcer.
Tout est prêt on peut monter le boîtier avant de passer aux essais.
Montage du boîtier
Préparez le matériel
La protection de la carte Anavi Handle est constituée de deux plaque en acrylique transparent.
Mettez les vis en place et vissez 4 écrous
Insérez la carte
Placez la deuxième plaque et terminez avec les 4 écrous
Vous pouvez utiliser la carte Anavi Handle sans craindre de la laisser traîner sur le bureau ou sur l’établi (que celui qui n’a jamais cramé une carte toute nue me jette la première pierre !)
Le Nunchuk
Présentation
On voit sur cette photo le Nunchuk. Sa forme autorise une bonne prise en main. Sur la partie supérieure, on trouve un joystick analogique, et à l’avant deux boutons poussoirs. Il intègre également un accéléromètre 3 axes de ST Electronics : LIS3L02AL. Sur les clones l’accéléromètre utilisé fonctionne de la même manière.
Le Nunchuk démonté
Sur l’exemplaire reçu avec le kit Anavi Handle, il y a deux vis à enlever pour ouvrir la manette. Un des trous est obturé étiquette qui sert de garantie. Après avoir déclipsé le couvercle, on accède à l’intérieur de la manette.L’intérieur est plutôt dépouillé, on a une carte principale avec le joystick et les circuits intégrés, et à l’avant une petite carte avec juste les deux boutons poussoirs.
Le joystick est un classique joystick analogique miniature qu’on trouve sur beaucoup de manettes de jeu.
Les boutons poussoirs sont des classiques également avec une coupelle en silicone.
Les 4 fils correspondent à l’alimentation et au bus I2C. U2 est le circuit accéléromètre qui fournit les informations sur le déplacement de la manette. Le « grand » circuit à 14 pattes est sans doute un microcontrôleur genre AVR ATtiny84 ou quelque chose comme ça. Il est chargé de recevoir les informations du joystick, de l’accéléromètre et des boutons, puis de les convertir pour envoyer les codes sur le bus I2C.
Le bus I2C
Le Nunchuk Wii utilise un connecteur propriétaire. Vu de face le connecteur possède ces connexions :
Sur le bus I2C, le Nunchuk est SLAVE (esclave) et la Wii est MASTER (maître) et c’est elle qui initialise la communication. Pour communiquer avec le Nunchuk, il faut lui envoyer une commande. Si vous avez un Nunchuk noir, il faut envoyer 2 octets 0xF0, 0x55 pour initialiser le premier registre et 0xFB, 0x55 pour initialiser le second registre. SI le Nunchuk est blanc, envoyez 0x40, 0x00 suivi de 0x00. L’adresse I2C des deux modèles de Nunchuk est 0x52. La fréquence utilisée pour communiquer avec le Wii Nunchuk est de 100KHz.
Pour récupérer les informations il faut envoyer 0x00 à l’adresse 0x52. Les données sont renvoyées en paquets de 6 octets :
-
- Octet 1 : Position X du joystick (0-255)
- Octet 2 : Position Y du joystick (0-255)
- Octet 3 : Accélération X (10 bits, les 2 bits de poids faible sont dans l’octet 6)
- Octet 4 : Accélération Y (10 bits, les 2 bits de poids faible sont dans l’octet 6)
- Octet 5 : Accélération Z (10 bits, les 2 bits de poids faible sont dans l’octet 6)
- Octet 6 : Bits de poids faible pour les axes X, Y, Z et état des boutons C et Z
Réponse du Nunchuk
La réponse du Nunchuk comporte 6 octets, ce tableau donne le détail des informations retournées par la manette. On retrouve ici du codage « à l’ancienne » quand chaque bit comptait. Pour diminuer le nombre d’octets transitant sur le bus I2C, 2 bits des 10 bits de chaque direction de l’accéléromètre sont « compactés » dans le dernier octet, en compagnie de l’état des boutons.
Accéléromètre de la Nunchuk
Détails du fonctionnement de l’accéléromètre de la manette Nunchuk. Les valeurs sont codées sur 10 bits, donc on va de 0 à 1023. La position centrale représente alors 512 et quand on déplace la manette, la valeur décroit jusque 0 dans un sens, et augmente jusque 1023 dans l’autre sens.
Accéléromètre
Les informations de ce capteur ne sont pas exploitées par Anavi Handle qui utilise le joystick et les boutons. Mais… comme le soft est opensource rien ne vous empêche d’écrire votre propre programme et de l’ajouter à l’existant.
L’accéléromètre mesure les déplacements de la manette selon 3 axes
Accéléromètre en nanotechnologie. On distingue la masse inertielle centrale suspendue par 4 ressorts. Lors du déplacement de la manette, la masse montée sur ressorts suit le déplacement avec une certaine inertie, elle se déplace par rapport à son cadres, ce qui est mesuré avec des capteurs capacitifs ou piézoélectriques. Cette vidéo de DeusExSilicium explique cela.
Il y a deux ans je vous avais présenté la carte SeeedStudio Xiao RP2040. C’est cette carte miniature que Léon a retenu pour son projet.
Comme toute carte à base de RP2040, vous pouvez accéder à son contenu. Ici on est en Circuit Python
Par défaut la carte émule une souris, mais en changeant le contenu de ce fichier config.json vous pouvez modifier l’émulation en clavier ou joystick.
Bien entendu si vous n’avez pas envie de rentrer dans le programme, il suffit de connecter la carte et… ça fonctionne. Mais l’intérêt de ce genre de matériel open-source, c’est de pouvoir aller mettre les mains dans le cambouis, non ? (enfin, c’est juste mon avis)
Le joystick de la manette Nunchuk émule une souris . Il y a une zone « morte » autour de la position centrale, il faut être délicat sur le maniement du joystick mais on contrôle sans problème le déplacement du curseur dès qu’on a un peu l’habitude.
On a ensuite une accélération du déplacement. Si vous trouvez que les valeurs ne vous conviennent pas… Vous avez accès au programme.
Conclusion
Une belle application du RP2040. La bibliothèque HID fonctionne très bien. Je l’avais utilisée au FabLab pour développer une souris pour des personnes ayant des problèmes de vue ou de motricité. J’avais utilisé le Raspberry Pi PICO. Ici Léon Anavi a choisi la mini carte Xiao RP2040 et son produit est compact et répond parfaitement à ce qui est annoncé. De plus le développement en open-source garantit aux passionnés de pouvoir accéder à toutes les parties de la réalisation, pour les réutiliser, les modifier etc.
Vous trouverez dans la rubrique Sources ci-dessous des liens qui vous emmèneront sur les sources de ce produit.
ANAVI Handle est désormais disponible chez Mouser :
https://www.mouser.fr/c/embedded-solutions/engineering-tools/embedded-tools-accessories/daughter-cards-oem-boards/?q=CS-ANAVI-HANDLE
En Europe il vaut mieux acheter Anavi Handle chez Mouser où les frais de ports sont moindres (gratuit si achat > 50€). Sur CrowdSupply les frais sont élevés (18$ pour une expédition en Europe).
Les créations de Léon Anavi devraient bientôt être disponibles chez Lectronz.
Lien affilié Amazon : 2 manettes Nunchuk pour 16,99€
Vidéo
Guide d’assemblage
Sources
https://www.crowdsupply.com/anavi-technology/anavi-handle
https://github.com/AnaviTechnology/anavi-handle
https://github.com/AnaviTechnology/anavi-handle-sw
https://wiki.seeedstudio.com/XIAO-RP2040/
https://fr.wikipedia.org/wiki/T%C3%A9l%C3%A9commande_Wii#Nunchuk
https://hackaday.com/blog/?s=nunchuk