This program allows you to use the Wii Remote (Wiimote) to turn any surface into a Low-Cost Interactive Whiteboard. It is based on Johnny Lee’s original WiimoteWhiteboard program that is written in C# and available for Windows only. My program uses Java to allow for (some) platform-independence. I also provide a Mac-only version since I’m a Mac user and this is, up to my knowledge, currently the only such program for the Mac. For Windows only, Boon Jin has enhanced Johnny’s software and created the shareware program Smoothboard. There is also a SourceForge project that provides other implementations, but it is not getting much attention.
Check out the video and the other cool projects at Johnny Lee’s page if you have no idea what I’m talking about
.
Features in a nutshell
- Open source
- Runs on Mac OS X, Windows, and Linux
- Simple User Interface available in English, Estonian, French, German, Indonesian, Italian, Polish, Portuguese, Russian, Slovene, and Spanish
- Camera Monitor and Calibration Details for better Wiimote placement
- Auto-connects up to 2 Wiimotes
- Right-click support, double-click assistance
- Mouse cursor smoothing

- Screen selection
- Touchpad Mode
- Update notification
- TUIO/OSC support for multitouch applications
More details in the Wiki.
Download (1.0.3)
Some example videos
Documentation & Support
You can post your comments, bug reports, feature requests, etc. at the bottom of this page. The latest documentation is available in the Wiki. You can also find out how you can help.
The wiimoteproject.com forums are a great resource for everything Wiimote. You may use this subforum to discuss everything related to my software. The Smoothboard Wiki also contains useful information for setting up your interactive whiteboard.
Infrared pens
You need a source of infrared (IR) light to use the software. Many people build their own IR pens for that purpose, usually by retrofitting some sort of marker. You’ll find all you need to know here. I started with a simple IR pen made from a battery clip.
There are also IR pens for sale if you don’t want to build one yourself. Several vendors sell different models, the IR Pen marketplace is a good place to get an overview.
You can use the coupon code uwe if you buy from IRPensOnline.com. This will give you a discount of $2 and I’ll get $1.
Compatibility
I only heard of few problems on Mac OS X, using the built-in stack. I also got reports from users who got the program running on Windows using either the Widcomm or BlueSoleil stack. It seems like Widcomm works better, see this post about BlueSoleil. You need to use the BlueZ stack on Linux, see the Wiki or this post for further instructions.
Issue on PowerPC Macs (excerpt from the WiiRemoteJ-README):
Note for Mac OS X PowerPC (PPC) users: you will have to delete the Wii Remote from your previous devices list in System Preferences->Bluetooth->Devices after each connection (every time you connect a given Wii Remote). Even then, the outgoing connection will still fail every other time. There is some sort of bug relating to HCI devices and Apple’s library. Luckily, it was fixed for the Intel Macs.
Further details can be found in the Wiki or the help files bundled with the application.
Subscribe

I saw the reference to earlier Widcomm drivers on this page: http://www.dev-toast.com/2007/01/05/uncrippling-bluetooth-in-vista-rtm
It’s about Vista but I guess it applies to XP as well.
Oliver
Hi Uwe,
I’ve got to say your are a real trooper for getting this going – being a mac user, I’m used to missing out on all this fun stuff! I’ll be getting this going on my Powerbook G4 over the next week – I can’t wait to impress, well, anyone who’ll listen!
Keep up the good (groundbreaking) work.
Cheers from Australia, Kearon
Hi Efex,
WIDCOMM only works with some (licensed?) USB Bluetooth adapters as far as I know.
Here’s the story about BlueSoleil:
Flow: WiimoteWhiteboard » WiiRemoteJ » JSR-082 (BlueCove) » OS » Bluetooth Stack (e.g. WIDCOMM) » Bluetooth Controller (e.g. USB dongle)
I started requests for evidence about the successful combination of BlueCove, BlueSoleil and my software/WiiRemoteJ here and here. Nobody cared. I’m honestly a little confused about this…
Uwe
What you outlined may work. It would still require some careful positioning of the Wiimote though. I’ll think about this feature once cases 1 and 2 are working well…
Uwe
With the included TUIO support, you can use up to 4 pens and have their positions send to other applications. My software will only use the first pen’s position to control the mouse cursor.
Uwe
Hi Pascal,
I already said some words about Linux compatibility in a previous post. My software now uses a BlueCove 2.0.3 snapshot, but you still need to download the BlueCove GPL module that supports BlueZ on Linux.
One user did all this but didn’t succeed. I’m unable to test it due to the lack of a Linux system and time.
There is one alternative worth exploring if you know how to compile my software: Download the source code and use the Avetana bluetooth library instead ob BlueCove.
Uwe
Okay, the subject probably sounds stupid, but, if we’re running this on intel macs, why do we need a wiimote? There’s a IR sensor built right in!
I don’t know how hard this would be, but wouldn’t it be possible to use the IR sensor in my Macbook Pro?
Oliver
You really need a wiimote, because in the MacBook Pro is just a IR sensor and not an IR cam.
With the sensor you can determine whether the IR LED is turned on or of, but with the IR cam in the Wiimote you can determine the position of the IR LED.
toco
Hi all,
Great work on this project, Uwe!
My apologies if this is a silly question, but….
Does the wiimote pick up light directly from the tip of the pen, or is it picking up the light when it is reflected on the whiteboard? If the latter, wouldn’t one of these: http://www.bhphotovideo.com/c/product/443847-REG/Morovision_ITTA_271952_IR_Laser_Stick_.html be perfect as a pen, and even work from a long distance, say in the back of a room?
Saleem
Hi Saleem,
this is not a silly question and other people are also talking about it.
Have a look at this thread about IR lasers and the Wiimote.
The Wiimote is picking up the 4 brightest IR dots it can see, which can be reflections. But that’s not whole story. The Wiimote actually includes a normal camera with an IR filter in front of it to block non-IR light. People have removed the IR filter and used regular laser pointers with it. Have a look at this video and this recent thread.
Uwe
Hi Uwe,
I tried to compile and run WiiWhiteboard with eclipse on Mac OS X but failed at first. The problem is that the bundled BlueCove jar does obviously not work with the “new” 1.6 of Apple. I ran the Ant script of BlueCove to make a new jar but it still failed. So I chose 1.5 as JDK and it all worked.
Somehow strange…
Anyway, I want to try to enhance/reuse the app in order to enable a face tracking scenario with the Wiimote and a goggle with IR LEDs on both sides (just like in the Johnny Cung Lee head tracking video).
Cheers
johannes
Hi Johannes,
You could post this at the BlueCove Users Group. The lead developer usually replies very quickly.
I have a first generation Macbook (32-bit CPU) and hence can’t use the new Java 1.6 (thanks Apple!).
This is great news! Don’t hesitate to ask if you need help understanding my (mostly undocumented) code. I’m pretty sure there are many users eagerly waiting for head-tracking on their Macs.
It would be great if you could separate the head-tracking logic from the “3D graphics display”. Other applications would be able to reuse your implementation…
Uwe
I finally up and tried the cross-platform Java version in Windows. I decided I could use the many extra features your version provides. But it just doesn’t work as well as Johnny’s. It’s the sensitivity still. I can’t imagine why it would have this problem. If I reset the WiiMote many, many times I might get decent sensitivity, but it always works perfectly with Johnny’s version the first time. I know you’re working on improvements even as I write this, but I thought I’d point it out. I can’t wait to be able to use your version all the time! I’m working on different placement for the WiiMote, and we’ll see what happens. Maybe it will work better once you get the 2-WiiMote implementation done.
I’m still wondering whether it makes sense to implement the head-tracking in Java. In my opinion this depends on the scenario in which the head-tracking will be used. Mostly it will be a 3D scenario in which every bit of GPU and CPU power is needed.
However, my context would be a Quartz Composer (QC) channel that is used to set the virtual camera of a rapidly composed 3D scene. As I’m not keen to spend hours on tweaking the Darwiin Remote implementation (as I’m more into Java to be honest…) I’m considering to use a Java channel in QC (if this is possible at all) with your implementation as a foundation. A result could be some kind of interface, which yields angle and distance of a head. That would keep things very basic…
Anyway do you know a programmatic way to remove a Bluetooth device from Mac OS X’s Bluetooth devices list by just pushing a button in a Java GUI? I still have the same problems with WiimoteWhiteboard as in DarwiinRemote. Before I can connect to my Wiimote I must remove it from the Bluetooth devices list. Would be nice if this could be put in a button (or in the according fetched Exception in the source code). Maybe this could be achieved with an AppleScript, which is triggered by the Java app…
Hi Descalzo,
I also don’t know why this is the case…
I actually haven’t changed the code for about two weeks now. Support for 2 Wiimotes is basically implemented, but there is an issue with WiiRemoteJ that prevents the release of a new version. A Bluetooth exception is thrown every 20 seconds if only one Wiimote is connected (due to the ongoing Bluetooth discovery in the background). The developer of WiiRemoteJ told me he wanted to have it fixed it two weeks ago, but it seems he’s either busy or it’s hard to fix. Have a look at these threads (1, 2) for more information.
Uwe
Hi Johannes,
Are you using a PowerPC Mac? If so, this is a known issue. If not, let me say that I don’t have that problem on my first-gen MacBook.
The funny thing is that a while ago I actually tried to write an AppleScript to delete the Wiimote from the Bluetooth list of known devices (for PowerPC users). I only succeeded in detecting the Wiimote in that list, I wasn’t able to delete it. I assume it can’t be done with an AppleScript (I like to be proven wrong). And I also just tried the script and it doesn’t work on Leopard…
AppleScript that detects if a Wiimote is in the list of Bluetooth devices (only tested on Mac OS X Tiger):
Uwe
I tried it again. I booted into Tiger and used only the internal (poopy) BT module. I went and uninstalled your program and reinstalled it. It’s working. I had to quit and reconnect, then it worked. I don’t know what changed. Planetary alignment, maybe?
I thought you might like to know.
I’m trying to use the nice Mac drawing application Rita to draw using the Wiimote Mac driver version 0.9.5, but Rita only recognizes mouse clicks from the pen so it’s not possible to draw a line. Dragging the pen while “clicked” only results in a dot at the beginning of the drag.
On the other hand Skitch works great for drawing, but I prefer some of Rita’s drawing tools.
According to Rita’s developer it uses standard Cocoa events for mouse and pen so it should work with all mouse input devices.
Any ideas why Wiimote Whiteboard doesn’t work with an application like Rita, while it works with another drawing application like Skitch?
Just built a IR pen today and got your mac version of writeboard software working on my G4 powerbook OS 10.4.10. I’m a student studying Post Grad Digital Media Arts at University of Brighton, UK and this is gonna be extremely useful for my work there. Keep up the good work.
http://www.renderghost.co.uk/
Hi Johan,
I downloaded Rita and could reproduce your problem. Strange enough, if you for instance use the line tool it will actually draw a very thin line. But this thin line is somehow “not real” and disappears when the canvas is repainted (in that area). Maybe you understand what I mean.
Anyway, I don’t know why this happens since the program somehow recognizes the mouse (even if not properly). I can just tell you that I use the class java.awt.Robot to have access to the OS’ mouse. On Mac OS X, this class uses another class apple.awt.CRobot by Apple to actually control the mouse (via JNI I guess). I neither have access to the source code of the latter class nor do I know which native function is called by it. I’m not really into native Mac programming, maybe someone else can shed light on this.
It seems odd after all that it doesn’t work in such a “standard cocoa app”. I even found a YouTube video of someone playing Warcraft III with my software on a Mac.
Uwe
Uwe,
I’ve asked Rita’s developer about this and he thinks that Wiimote sends mouse events with pressure=0, while a mouse sends pressure=1 and a drawing tablet sends whatever pressure is applied to the pen. In other words, any pressure aware application probably shows this problem with Wiimote.
/Johan
Hi Johan,
that explanation makes perfect sense to me. Just for clarification, the Wiimote itself doesn’t send any mouse events, my software does by using java.awt.Robot which in turn uses apple.awt.CRobot on the Mac.
In fact, I could verify it by using the CocoaTigerTablets.zip sample code from Wacom’s Mac Downloads. Now if there was a way to change or reinsert those events with pressure set to 1. Any Mac/Cocoa developers around?
Uwe
I did some more experimentation with the Reset Wiimote button last night on my Mac. I noticed that pressing the Reset Wiimote button doesn’t seem to do anything that I could tell, but closing then reopening the application DID work. I am going to do some more checking on this later, but I wanted to see what other people have noticed.
In Windows I have made similar observations – but sometimes the reset button actually works. I find that it is most important to close the app proberly before shutting down my computer – and also waiting for all other programs in the startup group to initialize before activating Uwes application. I seldom have problems with the sensitivity when observing these rules – but still it would be nice to quit worrying about it all together (the problem almost allways pop up when I want to demonstrate the board to other teachers)
Thank you Uwe for a great app – the rightclick is perfect …and the ability to draw straight lines is way better than in Johnnys original software.
Changes:
* Added support for 2 Wiimotes (major code change)
* GUI changes
* New Icon
* Updated Help
Uwe
The version 0.9.6 works great for me! (tested with 1 wiimote)
I made 3 pages about Wiimote Whiteboard:
the main
http://www.clinik.net/wiimote/
the info
http://www.clinik.net/wiimote/wiimote_info.php
the working
http://www.clinik.net/wiimote/wiimote_info_working.php
I hope it help people like me (not so expert in this hi-tech things
to understand the Wiimote Whiteboard functioning and, therefore, to try it!
The images are self-explained, attractive and simple!
Please, feel free to use those links above…
Good work Uwe!!!
Francisco
Hi. I previously used the C# version and it worked fine. I see that your version is much better, so I wanted to use it. When I run the program, it returns an error saying:
Wiimote failed to connect
Not supported on bluesoleil
I tried to use it with the device already detected by bluesoleil, and when not detected.
Both give me the error.
Fransisco,
That’s a beautiful page you have. I am truly amazed.
Hi, please see this previous post about BlueSoleil. Also do not connect the Wiimote with the BlueSoleil software.
Uwe
Thank you Francisco for making those beautiful explanatory images, but especially for the new icon!
Uwe