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.

Si vous souhaitez juste utiliser votre Wiimote pour contrôler xbmc, une méthode plus simple est décrite dans la page piloter_xbmc_avec_une_wiimote
  • Posséder un émetteur/récepteur Bluetooth. La liste du matériel supporté par la wiimote est ici ;
  • 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 Gutsy, 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êts. Il suffit de lancer synaptic et d'avoir les dépôts universe/multiverse, et vous tapez Wii dans le moteur de recherche afin de les trouver.

Installez les paquets lswm, wmgui, wminput

ou

sudo apt-get install lswm wmgui wminput

Petit script qui automatise l'utilisation

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 (Clic 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;

Nous allons maintenant vérifier que les capteurs de la Wiimote sont bien gérés par l'ordinateur

Lancez Wmgui grâce au lanceur se trouvant dans Application|Accessoires

 wmgui
Chez moi, cela ne se lançait pas. J'ai dû créer un lien symbolique :
 sudo ln -s /usr/local/lib/libcwiid.so.1.0 /usr/lib/libcwiid.so.1

Allez dans File → Connect pour vous connecter à la Wiimote.

Pour mettre la Wiimote en mode de synchronisation (ou mode visible), on presse simultanément les boutons 1 et 2. Dans certains cas, enlever le clapet des piles afin d'accéder à un petit bouton rouge. Une fois ce dernier appuyé, les DÉL bleues clignotent. La Wiimote est alors en mode de synchronisation.

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.

L'accéléromètre fonctionne plutôt bien. Pour vérifier l'Infra Rouge, vous devez brancher une sensorbar ou utiliser une simple bougie (ça fonctionne chez moi !). L'idée est d'avoir une source ponctuelle d'infrarouge pour que la Wiimote se repère.

Pour ceux qui auraient le message « Error establishing control channel connection », il faut déclarer 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 ces lignes dans votre fichier ~/.bashrc

Tout d'abord, on va chercher l'adresse MAC de notre Wiimote, pour l'obtenir, tapez dans un terminal:

lswm

Ce petit programme va vous demander de mettre votre Wiimote en mode visible (appuyez sur 1 et 2 en même temps) et vous renvoie 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 visible (1 et 2 en même temps), puis exécutez cette commande dans un terminal:

sudo hidd --search

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

Vous aurez peut-être besoin d'installer le paquetlibcwiid1-dev

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

sudo modprobe uinput

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

Mode accéléromètre

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

Cette commande 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

Cette commande permet d'utiliser le pointeur infrarouge de la Wiimote. Il faut, au préalable, avoir une sensorbar sous tension, ou simplement une bougie éclairant vers la Wiimote. Une vieille télécommande infrarouge et un élastique fonctionnent é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

Cette commande permet d'utiliser l'accéléromètre du nunchuk pour le 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, etc.) sont disponibles à l'emplacement :
/etc/cwiid/wminput

Il est même possible de modifier/créer ses propres fichiers de configuration.

Configurations personnalisées / Mapping

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

Si on regarde le fichier /etc/cwiid/wminput/ir_ptr, on observe que celui-ci inclut 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

On peut ensuite éditer ce fichier (Pensez à retirer la ligne "include buttons" pour éviter les conflits !).

Voici un exemple de fichier personnalisé:

Plugin.acc.X	= REL_X
Plugin.acc.Y	= -REL_Y		# Je trouve ça plus naturel en négatif
Plugin.led.Battery = 1			# Pour afficher l'êtat de la batterie quand on appuie simultanément sur A et B
  
Wiimote.A	= BTN_LEFT		# Clic gauche
Wiimote.B	= BTN_RIGHT		# Clic droit
Wiimote.Up	= KEY_UP		# Touche Haut △
Wiimote.Down	= KEY_DOWN		# Touche Bas ▽
Wiimote.Left	= KEY_LEFT		# Touche Gauche ◁
Wiimote.Right	= KEY_RIGHT		# Touche Droite ▷
Wiimote.Home	= KEY_HOMEPAGE		# Touche multimédia Home
Wiimote.1	= KEY_PLAYPAUSE		# Touche multimédia Play/Pause ▸
Wiimote.2	= KEY_NEXTSONG		# Touche multimédia Titre suivant
Wiimote.Plus	= KEY_VOLUMEUP		# Touche multimédia Volume +
Wiimote.Minus	= KEY_VOLUMEDOWN	# Touche multimédia 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 est disponible à l'adresse suivante : http://abstrakraft.org/cwiid/browser/doc/wminput.list

La liste des touches gérées est disponible à l'adresse suivante : http://abstrakraft.org/cwiid/browser/wminput/action_enum.txt

Tableau numérique interactif (TNI / whiteboard / TNWii)

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 mieux fonctionner) existe également (GTKWhiteboard) : http://forum.ubuntu-fr.org/viewtopic.php?id=208957&p=3 (ce lien mêne au forum qui présente également d'autres ressources sur le TNWii).

Un tutoriel 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).

Résolutions de problèmes

Curseur enfermé dans une boîte ou souris inactive

Si votre curseur semble "enfermé dans une boite invisible" ou "reste bloqué"en mode infrarouge, 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
  • wiimote.1289517087.txt.gz
  • Dernière modification: Le 12/11/2010, 00:11
  • par tintou