Ceci est une ancienne révision du document !



Utilisation d'une Wiimote comme souris

Tutoriel concernant l'utilisation d'une Wiimote sous Ubuntu.

Vous pourrez alors utiliser votre Wiimote en tant que souris, sans aucun effort, ou presque.

  • Posséder un émetteur/récepteur Bluetooth
  • Avoir une Wiimote…
  • Allumer une sensorbar (barre infrarouge) ou une bougie voire un projecteur infrarouge (facilement trouvable dans le commerce et pas cher)
Pour les bougies, une peut suffire, mais si vous avez un écran large, deux bougies espacées de 20 centimètres peuvent faire l'affaire pour couvrir tout l'écran

Ayant suivi ce tuto de A à Z, je me suis demandé si depuis Gusty, il n'y avait pas un moyen un peu plus simple après tout ce temps. En fait, il existe effectivement des paquets tout prêt.

il suffit de lancer synaptic et d'avoir les dépots univers/multiverse, et vous tapez Wii dans le moteur de recherche.

Installez les paquets lswm, wmgui, wminput

Ensuite, passez au chapitre Tester avec wmgui pour tester votre wiimote.

Puis savoir comment l'activer en tant que pointeur.

Maintenant, on doit pouvoir lancer la commande :

 wmgui

note: chez moi cela ne se lançait pas, j'ai du faire :

 sudo ln -s /usr/local/lib/libcwiid.so.1.0 /usr/lib/libcwiid.so.1

Ce programme va nous permettre de vérifier que les capteurs de la wiimote sont bien gérés par le PC.

Utilisez File → Connect pour vous connecter à la Wiimote. Pour mettre la Wiimote en mode synchro, on presse simultanément les boutons 1 et 2 1). ou dans certains cas enlever le clapet des piles afin d'accéder à un petit bouton rouge, une fois appuyé les led bleue clignotent, la Wiimote est alors en mode synchro, cliquez alors sur Valider.

On peut afficher l'état courant de la Wiimote connectée :

  • Settings → Acc data permet d'afficher les données concernant l'accéléromètre
  • Settings → IR data permet d'afficher les données concernant l'infrarouge

J'ai pu constater que l'accéléromètre marche bien. Pour vérifier l'IR, vous devez brancher une sensorbar ou utiliser une simple bougie (chez moi ça marche !). L'idée est d'avoir une source ponctuelle d'infrarouge pour que le wiimote se repère.

Pour ceux qui auraient le message

Error establishing control channel connection

Il faut positionner la variable d'environnement WIIMOTE_BDADDR comme ci dessous (avec uu:vv:ww:xx:yy:zz qui est l'adresse MAC de votre WiiMote)

WIIMOTE_BDADDR=uu:vv:ww:xx:yy:zz
export WIIMOTE_BDADDR

Pour éviter de saisir ces commandes à chaque fois que vous lancez votre session il suffit de placer ses lignes dans votre fichier ~/.bashrc

Tout d'abord, on va chercher l'adresse de notre Wiimote.

Pour obtenir l'adresse Mac de votre Wiimote, tapez dans un terminal:

lswm

Ce petit programme va vous demander de mettre votre Wiimote en mode découvrable (appuyer sur 1 et 2 en même temps) et vous renvoi l'adresse mac de la Wiimote.

Si vous n'arrivez pas à utiliser cette méthode, voici une méthode plus "classique":

Mettez la wiimote en mode "découvrable" (1 et 2 en même temps), puis executez cette commande dans un terminal:

sudo hidd --search

L'adresse est de la forme « xx:xx:xx:xx:xx:xx ».

Dans certains cas, il est utile de charger un module pour faire fonctionner « wminput ». Un « lsmod » vous le dira. Dans le doute, taper :

sudo modprobe uinput

Et là, c'est presque gagné. Il existe (pour l'instant) deux façons de lancer « wminput ».

Mode accéléromètre

sudo wminput -c acc_ptr xx:xx:xx:xx:xx:xx

qui permet d'utiliser uniquement l'accéléromètre pour le contrôle de la souris. Il faut la pencher en avant/arrière et la tourner sur elle-même.

Mode infrarouge

sudo wminput -c ir_ptr xx:xx:xx:xx:xx:xx

qui permet d'utiliser le pointeur Infrarouge de la Wiimote. Il faut au préalable avoir une sensorbar sous tension, ou simplement une bougie vers l'ordinateur. Une vieille télecommande infra-rouge et un élastique fonctionne également. Sans doute la plus utile. Si ça ne fonctionne pas tout de suite, il faut redémarrer la machine.

Mode nunchuk

(fonctionne sur la version 0.6.00)

sudo wminput -c nunchuk_acc_ptr xx:xx:xx:xx:xx:xx

qui permet d'utiliser l'accéléromètre du nunchuk pour contrôle de la souris. L'utilisation est similaire au mode accéléromètre.

Si vous n'arrivez pas à l'activer, faite cette commande avant de lancer wminput:
sudo hidd --kill xx:xx:xx:xx:xx:xx
Plus généralement, les différents modes (nunchuk, gamepad, ir_ptr…) sont disponibles à l'emplacement :
/etc/cwiid/wminput

Il sera même possible de modifier/créer vos propres fichiers de configuration.

Résolutions de problèmes

Curseur enfermé dans une boite

Si votre curseur semble "enfermé dans une boite invisible" en mode Infra Rouge, c'est que la caméra de la wiimote a une résolution de 1024x768 et que les réglages initiaux indiquent à la wiimote d'utiliser sa résolution native. Pour régler ce problème il faut éditer le fichier /etc/cwiid/wminput/ir_ptr et remplacer

Plugin.ir_ptr.X = ~ABS_X
Plugin.ir_ptr.Y = ~ABS_Y

par

Plugin.ir_ptr.X = ABS_X
Plugin.ir_ptr.Y = ABS_Y

Configurations personnailsées / Mapping

Il est possible de personnaliser les actions de la wiimote en assignant d'autres touches à ses bouttons.

Si l'on regarde le fichier /etc/cwiid/wminput/ir_ptr, on observe que celui-ci inclu le fichier buttons qui régit les touches et assigne une manière de gérer les axes de la souris.

On peut commencer sur la base de ir_ptr et ajouter dedans les boutons que l'on veut:

sudo cp /etc/cwiid/wminput/ir_ptr /etc/cwiid/wminput/ma_config''

et léditer ensuite, Pensez à retirer la ligne "include buttons" pour éviter les conflits!

Voici un exemple de fichier personnalisé :

Plugin.ir_ptr.X = ABS_X
Plugin.ir_ptr.Y = ABS_Y

Wiimote.A               = KEY_LEFTALT           # ALT
Wiimote.B               = BTN_LEFT              # Click!
Wiimote.Up      = KEY_UP                # Up
Wiimote.Down    = KEY_DOWN              # Down
Wiimote.Left    = KEY_LEFTCTRL          # CTRL
Wiimote.Right   = BTN_RIGHT             # Right Click
Wiimote.Home    = BTN_MIDDLE            # Middle Click
Wiimote.1               = KEY_ENTER                     #
Wiimote.2       = KEY_SPACE                     #
Wiimote.Plus    = KEY_VOLUMEUP          # Turn up volume
Wiimote.Minus   = KEY_VOLUMEDOWN        # Turn down Volume

Vous pouvez ensuite le tester avec la commande :

sudo wminput -c ma_config XX:XX:XX:XX:XX:XX

La liste des boutons de la wiimote : http://abstrakraft.org/cwiid/browser/trunk/doc/wminput.list

La liste des touches gérées : http://abstrakraft.org/cwiid/browser/trunk/wminput/action_enum.txt

Articles dont je me suis très fortement « inspiré »:

Un article en anglais assez complet : http://www.wiili.org/index.php/CWiid

Depuis que j'ai découvert ce tutoriel, je me suis lancé dans la fabrication d'un petit script permettant l'exécution en mode graphique.

Ce script nécessite d'avoir installé au préalable tout ce qu'il faut pour utiliser sa WiiMote, ainsi que zenity.

Il nécessite aussi des droits d'administration donc il faut le lancer avec gksudo.

Copiez ce code dans un fichier texte et rendez le exécutable : Clique droit –> Propriétés –> Permissions –> Exécution : cochez la case autorisant

#!/bin/bash
#Script réalisé par KicheTof pour les utilisateurs de WiiMote.
#Script libre de toute modification sans aucune demande nécessaire :)
#Vive le libre :)
function quit {
if  [ $? != "0" ]; then
	exit 1
fi
[ $? -ne "0" ] && exit 2
 }
 device=$(hcitool scan | tail -n +2 | while read line
 do
echo -n "$line" | sed -r "s/\s*([0-9A-Fa-f:]+)\s*(.*)/\1\n\2\n/"
 done | zenity --list \
            --title "Utilisation de la WiiMote comme souris : 3 méthodes !" \
            --text "Maintenez la touche 1 et 2 en même temps pour activer le mode détection.\nChoisissez la WiiMote dans la liste (Nintendo RVL-CNT)" \
            --column "id" --column "appareil bluetooth")
 quit;
 while [ ! "$CHOIX_ACTION" ]
 do
CHOIX_ACTION=$(zenity --list --width "600" --height "200" \
		--title "Choisissez quelle méthode pour utiliser la WiiMote" \
		--text "Pilotage par Accéléromètre, par Infrarouge, ou via le Nunchuk" \
		--radiolist \
		--column "Choix" --column "Pilotage" --column "Description" \
		True Accéléromètre "Utilisation de la position de la WiiMote" \
		False Infrarouge "Utilisation de l'infrarouge à l'aide d'une bougie, par exemple" \
		False Nunchuk "Utilisation du nunchuk pour piloter la souris")
quit;
if [ $CHOIX_ACTION == "Accéléromètre" ]; then
	action="acc_ptr";
elif [ $CHOIX_ACTION == "Infrarouge" ]; then
	action="ir_ptr";
elif [ $CHOIX_ACTION == "Nunchuk" ]; then
	action="nunchuk_acc_ptr";
fi
 done
 zenity --info --title "Attention" --text "Si les led's ne clignotent plus, réappuyez sur 1 et 2 !\n\nPour quitter le script, pressez 3 secondes le bouton \"power\" de la WiiMote ! :)";
 wminput -c $action $device;

L'origine du TNWii : http://www.cs.cmu.edu/~johnny/projects/wii/

Les pilotes pour faire votre TNWii (sous Hardy, Intrepid et suivants…) : http://code.google.com/p/linux-whiteboard/downloads/list

ou les sources par le svn http://linux-whiteboard.googlecode.com/svn/trunk/

Une autre version (qui devrait fonctionner mieux) existe également (GTKWhiteboard) : http://forum.ubuntu-fr.org/viewtopic.php?id=208957&p=3 (ce lien même au forum qui présente également d'autres ressources sur le TNWii).

Un tutorial en français pour utiliser le tableau interactif wiimote sous linux : http://trucsinformatiques.free.fr/articles.php?lng=fr&pg=32 (obsolète, les paquets cités ci-dessus sont plus récents)


Contributeurs : Liberator, kichetof, Fabien26,sunab, alexmic.


1)
mais ça vous le saviez déjà ;-)
  • wiimote.1253526335.txt.gz
  • Dernière modification: Le 21/09/2009, 11:45
  • par 213.95.41.13