mardi 28 novembre 2006

La Wiimote et le PC : 2ème phase

La Wiimote communique avec le Wii via une liaison sans fil Bluetooth. Le contrôleur Bluetooth est une puce Broadcom 2042, qui est conçu pour être utilisé avec les appareils HID (interaction homme <-> machine).
La Wiimote n'apparait pas par défaut dans les périphériques Bluetooth. Il faut la
synchroniser, soit en appuyant sur A + B + 1 + 2, ou en appuyant sur le bouton de
synchronisation rouge dans l'emplacement où se trouve les piles. Une fois dans ce mode, la Wiimote peut être détecté par la Wii (ou un PC) et synchronisé. Pendant le mode synchronisation les 4 LED de la wiimote clignotent.La Wiimote peut alorscommuniquer avec la Wii (ou le PC).
L'interface entre les 2 est composée de 14 Entrées et 10 Sorties.

Les sorties :
0x11 : LED de la wiimote
0x12 : Contrôle des capteurs de mouvements
0x13 : Vibration
0x14 : Vibration
0x15 : Vibration
0x16 : Inconnu
0x17 : Inconnu
0x18 : Inconnu
0x19 : Vibration
0x1A : Vibration

Les entrées :
0x20 : Port d'extension (nunchuk, manette classique)
0x21 : Non utilisé
0x22 : Non utilisé
0x30 : Boutons (A,B,1,2,Home,-,+)
0x31 : Detections de mouvements
0x32 : Non utilisé
0x33 : Detections de mouvements
0x34 : Non utilisé
0x35 : Detections de mouvements
0x36 : Non utilisé
0x37 : Detections de mouvements
0x3D : Non utilisé
0x3E : Detections de mouvements
0x3F : Detections de mouvements

Les sorties correspondent aux paquets de données envoyés de la Wii (ou du PC) à la Wiimote
Les entrées correspondent aux paquets de données envoyés de la Wiimote à la Wii (ou du PC).

Dans le champ de données d'un paquet, on trouve alors des informations de ce type :
"A1 30 00 00"
A1 veut dire qu'on observe un paquet entrant (ça serait 52 pour un paquet sortant), sur l'entrée n°30 (30), avec à la suite 4 octets de données qui correspondent donc à l'état des boutons.

Voici plus de détails par rapports aux entrées :

Les boutons :

Les données "A1 30 00 08", veulent dire que le bouton A est actif.
Un paquet avec les données "A1 30 00 00" est envoyé quand aucun bouton n'est enfoncé.

Si le bouton 1 et 2 sont actif, on aura un paquet avec les données "A1 30 00 03" (0x0001 + 0x0002).

Voici les valeurs hexadécimales pour chaque bouton :
1 : 0x0001
2 : 0x0002
A : 0x0004
B : 0x0008
- : 0x0010
Home : 0x0080
Flèche Gauche : 0x0100
Flèche Droit : 0x0200
Flèche Haut : 0x0400
Flèche Bas : 0x0800
+ : 0x1000

Détection de mouvement :

Par défaut, la Wiimote n'envoie pas les informations concernant la détection de mouvement.
Pour activer l'envoi, il faut envoyé un paquet sur la sortie n°12 de ce type "51 12 00 31"

le dernier octet (31), permet de spécifier sur quel entrée, la wiimote doit envoyer le flux d'information correspondant (31,33,35,37,3E ou 3F).
Dès que la wiimote reçoit ce paquet (51 12 00 31), elle va envoyer en temps réel les
informations des capteurs sur l'entrée 31.

Pour arrêter le streaming, il suffit d'envoyer un paquet avec ces données "51 12 02 30".

On aura des paquets de données de ce type en streaming :
"a1 31 40 00 86 8a a5"
Si on aurait utilisé l'entrée 33, on aurait eu :
"a1 33 40 00 86 8a a5 ff ff ff ff ff ff ff ff ff ff ff ff ff"
tout les FF étant des bits de bourrage, car les informations des capteurs de mouvements n'ont besoins que de 5 octets.
L'entrée 31 permet de transférer 5 octets à la fois, l'entrée 33 => 17 octets, l'entrée 35,37,3E et 3F => 19 octets.



Dans le paquet de donnée "a1 31 40 00 86 8a a5", 86 8A et A5 sont les états des 3 axes de la wiimote (voir dessin).

3ème octet de données (86) => Axe X
4ème octet de données (8A) => Axe Y
5ème octet de données (A5) => Axe Z

Le détecteur utilise un système de coordonnées avec l'axe des abscisses positive à la gauche, et l'axe Z positif ascendant. Les forces sur chaque axe sont digitalisées en entiers non signés de 8 bits, le zéro correspond à 0x80.
On a donc 256 états possible par axe allant de -128 à 128.


Les sorties :

4 LED des joueurs :
La wiimote contient 4 LED qui indique le numéro du joueur correspondant à la Wiimote.
Comme vu ci-dessus, on utilise la sortie n°11, chaque paquet contient 1 octet de données.
Exemple : "52 11 10" ce paquet permet d'allumer la LED n°1.

LED 1 => 10 (10000 en binaire)
LED 2 => 08 (01000 en binaire)
LED 3 => 04 (00100 en binaire)
LED 4 => 02 (00010 en binaire)

Pour allumer les 4 LED, il faut mettre 1E (11110 en binaire).

Le retour de force (vibreur) :
Les informations d'activation/désactivation du vibreur circulent au choix sur la sortie

13,14,15,19 ou 1A en envoyant un paquet de ce type :
"52 13 01" (01 pour activer le vibro)
"52 13 00" (00 pour désactiver le vibro)

Ce texte est une traduction de la documentation disponible ici : Wii Live CD
Un driver est en cours de développement pour Linux, un driver devrait également voir le jour rapidement pour Windows maintenant que le protocole d'échanges entre la Wiimote et la Wii est décryptée.

samedi 25 novembre 2006

Une sensor bar bricolé

"Pour déterminer sa position par rapport à la console, la Wiimote a besoin d'une "Sensor Bar", reliée à la console, qui se place au-dessus ou en-dessous de la télévision. Cette barre comprend deux série de LED Infrarouge, que la Wiimote repère grâce a un capteur infrarouge. Grâce a ces deux série de LED, la Wiimote peut calculer précisément et rapidement sa position par rapport a la barre et pointer un point précis sur l'écran. Mais elle a besoin pour cela d'être pointée approximativement vers l'écran (De façon a avoir la barre dans son "champ de vision")."

Pour illustrer ceci, un joueur a débranché la Sensor Bar de la Wii, et l'a remplacé par 2 LED infrarouge (en l'occurrence, 2 télécommandes TV en fonctionnement).
Dont voici une vidéo :


Vous pouvez donc bricoler une "Sensor bar" si vous n'en avez pas, avec des LED Infrarouge, ça peut également marcher avec 2 bougies allumées :)



D'ailleurs vous serez obligé d'en fabriquer une si vous voulez utiliser la fonction pointeur à la place de la souris de votre PC, plus tard...

Source : Wikipedia et http://doctabu.livejournal.com/64758.html

La Wiimote et le PC : 1ère phase


La Wiimote utilise le Bluetooth pour communiquer sans fil avec la Wii.
A l'aide d'une clé USB BlueTooth branché sur votre PC, vous pouvez synchroniser la Wiimote et votre PC. Bien sûr aucun driver d'existe à l'heure actuelle permettant d'utiliser les fonctions de la Wiimote sur PC (pointeur, gyroscopie, accéléromètre).
Mais ça devrait arriver prochainement...
La méthode pour réaliser la connexion est d'appuer sur "A + B + 1 + 2". Quatre LEDs vont clignoter. La Wiimote peut être vue par le PC à partir de là. Une fois détectée, la même combinaison de touches doit être utilisée pour lier les deux périphériques. Les LEDs continueront à clignoter pendant la connexion. La Wiimote est alors vue comme un contrôleur de jeu (HID) par le PC mais sans bouton ni axe.
Il faut savoir que la Wiimote qui est intégré dans le pack Wii est synchronisé avec sa Wii, mais si vous voulez ajouter une autre Wiimote, il faudra aussi faire cette manip'.
La Wiimote coûte que 39€, alors que certaines souris ayant moins de fonctionnalités coûte plus de 150€ ! D'où l'intérêt de développer un driver pour la Wiimote.
De plus on peut brancher un "Nunchuk" (vendu 19€) afin d'avoir d'autres fonctions (stick analogique, 2 boutons supplémentaires, 3 accéléromètres et 3 gyroscopes).

La prochaine étape dans le but de rendre compatible la Wiimote et un PC (Windows en l'occurrence), sera d'analyser les trames échangées entre la Wiimote et la clé USB Bluetooth, afin de comprendre le protocole utilisé et de pouvoir détecter les évènements.


Source : http://wii.qj.net/Gamer-discovery-Wiimote-to-PC-pairing/pg/49/aid/73835