Thursday, January 3, 2008

Get values from Wii Remote (through IronPython and WiimoteLib.dll)

This entry is translation of my entry in Japanese.

To get values from Wii Remote through IronPython is very easy.
At first you need to get WiimoteLi.dll from
Managed Library for Nintendo's Wiimote - Release: WiimoteLib v1.2.
Its document is nice.

And then save a following script as name ""

import clr

from WiimoteLib import *

wii = Wiimote()
def get_value(sender, args):
global a
a = args

wii.WiimoteChanged += WiimoteChangedEventHandler(get_value)

wii.SetReportType(wii.InputReport.IRAccel, True)

In the script, at first I get a namespace "WiimoteLib" from wiimotelib.dll and import all objects in it.
Secondly I make an instance of "Wiimote" class. Its "WiimoteChanged" field is "event" and "+=" means "add event listener". I set a minimal event listener.
Finally I call connect its instance and tell it should return IR-Camera data and accelation data. You should read WiimoteLib.dll's document and choice the correct report type.

Let's use the script in interactive console.

>>> import setup_wii
>>> setup_wii.a
<WiimoteChangedEventArgs object at 0x000000000000002B>
OK, I got the argument of the event listener.
To know what fields the object have, you should read WiimoteLib.dll's document. It is very comprehensive. Today I want to get the result of IR-Camera, so I did like below.

>>> setup_wii.a.WiimoteState
<WiimoteState object at 0x000000000000002C>
>>> setup_wii.a.WiimoteState.IRState
<WiimoteLib.IRState object at 0x000000000000002D [WiimoteLib.IRState]>
>>> setup_wii.a.WiimoteState.IRState.X1
I got it! It is very easy!

Coding4Fun : Managed Library for Nintendo's Wiimote

The reference to my Japanese entry in IronPython URL's: Using the Wiimote from IronPython motivated me to write blog in English. Thanks!

Blog in English

To write blog entries in English continuously is that I want to achive this year. Because of almost of my activity depends on Japanese language, I didn't be known by those who doesn't use Japanese. I should write more entries in English.