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

What is the purpose of being able to connect more than one WiiMote. Have not really figured that out yet. Thanks for the answers.
Hi Joel,
two Wiimotes can either be used for redundancy (when one Wiimote’s field of view is blocked) or partial coverage (two Wiimotes cover the whole screen together).
Uwe
Hi,
you could use one of the third-party apps for Mac (see 1, 2, 3).
Uwe
Just wanted to say thanks for creating a Mac version.
Keep up the great work!
I can’t figure out how to get this to work, I don’t know java so Iäm having a hard time troubleshooting this.
I’m using ubuntu karmic 64-bit and have installed libbluetooth-dev. It’s more than a year since you wrote the guide but mabye you have some idea of what the problem could be.
This is the only resource I can find for Wiimote Whiteboard on linux, I’m using zip with bluecove-gpl-2.1.0.jar and this is the response I get, It stops on … 12 more until I hit Ctrl + C
(JavaBridge.java:398) (WiimoteDataHandler.java:84)
user@host:~/wiimote/WiimoteWhiteboard$ java -jar WiimoteWhiteboard.jar
2009-dec-01 16:19:23 com.sun.corba.se.impl.ior.IORImpl getProfile
VARNING: "IOP00511201: (INV_OBJREF) IOR must have at least one IIOP profile"
org.omg.CORBA.INV_OBJREF: vmcid: SUN minor code: 1201 completed: No
at com.sun.corba.se.impl.logging.IORSystemException.iorMustHaveIiopProfile(IORSystemException.java:473)
at com.sun.corba.se.impl.logging.IORSystemException.iorMustHaveIiopProfile(IORSystemException.java:495)
at com.sun.corba.se.impl.ior.IORImpl.getProfile(IORImpl.java:334)
at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_Object(CDRInputStream_1_0.java:787)
at com.sun.corba.se.impl.encoding.CDRInputStream_1_0.read_Object(CDRInputStream_1_0.java:761)
at com.sun.corba.se.impl.encoding.CDRInputStream.read_Object(CDRInputStream.java:231)
at com.sun.corba.se.impl.resolver.INSURLOperationImpl.getIORFromString(INSURLOperationImpl.java:120)
at com.sun.corba.se.impl.resolver.INSURLOperationImpl.operate(INSURLOperationImpl.java:130)
at com.sun.corba.se.impl.orb.ORBImpl.string_to_object(ORBImpl.java:836)
at org.GNOME.Accessibility.AccessUtil.getRegistryObject(AccessUtil.java:143)
at org.GNOME.Accessibility.JavaBridge.registerApplication(JavaBridge.java:1147)
at org.GNOME.Accessibility.JavaBridge.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
at java.lang.Class.newInstance0(Class.java:372)
at java.lang.Class.newInstance(Class.java:325)
at java.awt.Toolkit.loadAssistiveTechnologies(Toolkit.java:786)
at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:875)
at java.awt.Toolkit.getEventQueue(Toolkit.java:1698)
at java.awt.EventQueue.invokeLater(EventQueue.java:957)
at javax.swing.SwingUtilities.invokeLater(SwingUtilities.java:1286)
at org.jdesktop.application.Application.launch(Application.java:181)
at org.uweschmidt.wiimote.whiteboard.WiimoteWhiteboard.main(WiimoteWhiteboard.java:79)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at com.simontuffs.onejar.Boot.run(Boot.java:306)
at com.simontuffs.onejar.Boot.main(Boot.java:159)
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: javax/bluetooth/BluetoothStateException
at org.uweschmidt.wiimote.whiteboard.WiimoteConnector.connect(WiimoteConnector.java:48)
at org.uweschmidt.wiimote.whiteboard.WiimoteDataHandler.
at org.uweschmidt.wiimote.whiteboard.WiimoteWhiteboard.startup(WiimoteWhiteboard.java:99)
at org.jdesktop.application.Application$1.run(Application.java:171)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:226)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:602)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
Caused by: java.lang.ClassNotFoundException: javax.bluetooth.BluetoothStateException
at com.simontuffs.onejar.JarClassLoader.findClass(JarClassLoader.java:602)
at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
at java.lang.ClassLoader.loadClass(ClassLoader.java:264)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:332)
... 12 more
Oh, and java version:
user@host:~/wiimote/WiimoteWhiteboard$ java -version
java version "1.6.0_0"
OpenJDK Runtime Environment (IcedTea6 1.6.1) (6b16-1.6.1-3ubuntu1)
OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)
Should I try some other version?
One more thing, when I use wmgui application (https://help.ubuntu.com/community/CWiiD) to connect to my wii remote, it can read all the data from the remote so the in that case bluetooth is working fine.
Hi Fredrik,
The current BlueCove library doesn’t work with 64-bit on the Mac, I’m not sure if this is an issue on Linux too.
Also, there seems to be a new BlueCove Linux D-Bus module in the making. You could try this instead of bluecove-gpl-2.1.0.jar, but still it add it to WiimoteWhiteboard.jar the way I described, not like it’s said on their website.
Sorry, I currently don’t have a Linux system up and running to help you with that.
Uwe
Thanks so much for your response, Uwe. Sorry my response is delayed… I was under the impression that I would get an email when you posted your reply to me, but that doesn’t seem to have happened :-\ I have done some more troubleshooting, and here are some answers to what you’ve asked:
The same problems remain, even when not using OSX’s connection assistant and even after removing the Wiimote from the list of Bluetooth devices.
The batteries I’m using are not rechargeable; they are fresh alkaline.
I am using an original Wiimote from Nintendo, not a replicate from another company. I have borrowed a few other (original Nintendo) Wiimotes from multiple friends, and am experiencing the same problem using theirs.
I welcome any other ideas, and sure do appreciate your time! I hope we can get this to work… oh, does the error message I provided give any clue as to the problem? I’m including it again (below), just to be sure:
—————–
WiimoteWhiteboard
Wiimote 1 disconnected.
Disconnecting Wiimotes may be possible in a future release.
For now please restart the program.
—————–
Hi,
based on your description I don’t really have a clue what the problem might be.
Please do this and send me the information…
Uwe
I got an old Bluetooth dongle. Bluesoleil is not working with Bluecove java bluetooth library. But…… WIDCOMM library is working smoothly with Whiteboard on WindowsXP.
I also tried Ubuntu version 9.10 with BlueZ driver and libblootooth library is working with Whiteboard aswell.
TUIO is also working nicely.Both on windows and Linux platform.
SO no problem =).
I am looking to
Hi uwe,
I am looking to implement a Wii mote whiteboard on Beagleboard (Beagleboard.org)
May I know if your software is able to run in this following environment below since your software runs on Java? T
Java: When using the OpenEmbedded-based Angstrom image you have the following options of Java support:
* JamVM + GNU Classpath (small vm, fast interpreter, J2SE-like)
* Cacao + GNU Classpath (JIT compiler, J2SE-like)
* PhoneME Advanced Foundation (JIT compiler, CDC)
Java support in OpenEmbedded/Angstrom (details) is provided voluntarily through Jalimo.
(Taken from http://elinux.org/BeagleBoard)
Hope to hear from you soon. Many thanks!
Regards,
jimmyfam
Hi jimmyfam,
my software itself requires J2SE 5.0, but I have my doubts whether the Bluetooth library will work on that embedded device (see BlueCove supported stacks).
Very sorry for the late reply,
Uwe
Uwe, I need earlier version Wiimote Whiteboard (for mac os 10.4.3)… I can’t find it… Can you help me , please ?
Stan
Doesn’t work. I spent an hour following the directions and it never worked.
Hallo,
klasse Arbeit! Danke!
Da ich nicht so tief in der Softwareentwicklung stecke, jedoch ein bestimmtes Ziel in der Anwendung verfolge, würde ich mich über Dein Feedback zu folgendem Thema freuen:
Ich richte die wiiremote von hinten auf eine mattsatinierte Acrylscheibe, auf der dann per IR-LED-Pen gezeichnet werden kann. Das klappt mit Einschränkung ganz ordentlich. Jedoch wird in einem Malprogramm wie Photoshop der inaktive Mauszeiger auch abgebildet. Jede Werkzeug- oder Farbwahl etc.pp. wird im Moment zum Ratespiel (Wo ist der Cursor?). Wie denkst Du über eine zweite IR-LED am Pen, welche bei inaktivem Zustand zusätzlich strahlt und welchen Aufwand würde das Softwareseitig machen darauf passend zu reagieren? Immerhin könnte man dann unabhängig vom Anzeigemedium agieren, kurz ein Grafiktablett ersetzen.
Würde mich über Dein Feedback freuen
Beste Grüße Ben
Aloha!
Thanks so much for creating this. Mahalo! This really gives more venues for teachers when Hawaii is one of those place so remote from mainland access. This is not only cheap but ready available and definitely puts our classes on the black, not red.
Hope more development occurs with multi-touch as this can be used for so many things. Especially with educational net apps.
Mahalo again,
Dwayne
First off, this software is GREAT. I’ve tested pretty much every Wiimote Whiteboard software out there, and this is (by far) the winner, in my opinion. Works great on my Mac and PC, and works well with multiple Wiimotes. I train teachers, and this will definitely be the software I recommend to them.
On to my question: recently, I’ve been researching multi-point software to use with the Wiimote Whiteboard. I’m in over my head with most of it, but I’ve found some really cool stuff, mostly using Flash (http://grouplab.cpsc.ucalgary.ca/cookbook/index.php/Toolkits/SDGToolkit). The programs work well when I have multiple mice hooked up to my computer but, for some reason, they don’t recognize the IR pens as multiple mice — all IR pens register as one single mouse. Like I said, I’m in over my head here — I’m wonderng what the problem is? Also, is there some sort of fix out there?
Thanks again for this amazing software!
Sorry if someone else already mentions this.
I do not have this problem with the Mac only (app) version of the software, but I do have it when using the cross-platform java version.
Also, strangely, for me this ‘run in 32 Bit mode’ option is not present in the ‘Get info’ screen (but as the mac version works for me it isn’t really relevant). I’m running Snow Leopard on a 2009 Macbook.
The solution for me (on the cross-platform version) was to add the -d32 option to the VM. So I run the WiimoteWhiteboard java program using the following command in the terminal:
java -d32 -jar WiimoteWhiteboard.jarHi Taylor,
Regarding your problem; I have a suggestion which might also work for you.
See my previous post: http://www.uweschmidt.org/comment/1124
Have you tried “Magic Pen” When it’s running, it allows you to write, circle, draw, etc as if you have an overlay (or transparency) over whatever is on your screen at the moment. It’s a great program. You can download it from many freeware sites. Cnet had it at the time of this post, but you can just search for” Magic Pen 1.0 for Mac”
Hi Stan,
there is no version for OS X 10.4.3. Please read this and my reply.
Sorry for the late reply,
Uwe
Hi Ben,
I hope you don’t mind if I reply in English.
Am I assuming correctly that you’re not projecting the computer’s display onto the acrylic panel? Otherwise, I don’t understand the problem.
You don’t directly use the IR pen on the computer screen, hence you don’t know where the cursor is when you “click”, right?
And you want a way of moving the cursor around without clicking, correct?
Have you tried the Touchpad Mode (Preferences » Mouse Control) of my software?
Using multiple LEDs on a single pen is probably not a good idea, because it’s hard to implement. For example, depending on the pen’s angle to the Wiimote, it may see only one LED even if both are on.
Sorry for the late reply,
Uwe
Hi Katy,
My software can only control the primary mouse; emulating multiple mice according to IR pens is not possible.
Instead, my app uses the TUIO specification for multi-touch and sends out data adhering to the /tuio/2Dcur profile.
Hence, a program that wants to make use of multiple IR pens needs to my read TUIO messages.
Unfortunately, there aren’t many TUIO-compatible apps out there as far as I know. Try some of these multi-touch applications, but read this post first.
Uwe
Hi Steven,
that’s because I can’t enforce 32-bit mode for the cross-platform java version (as far as I’m aware).
There’s no need to do this since version 1.0.0 (see Changelog).
Thanks for sharing.
Uwe
Hello,
first of all great great project!
i’m trying to compile this in eclipse (to be honest i’m not so used to it, so i might be making some stupid mistakes there) but i can’t manage to get it working, right now it’s giving me this report:
NetUtil v0.33
Copyright (c) 2004-2007 Hanns Holger Rutz. All rights reserved.
This library is released under the GNU Lesser General Public License. All software provided “as is”, no warranties, no liability! For project status visit http://www.sciss.de/netutil.
This is a library which cannot be launched separately!
is there any compiler that would be easier to set up and compile?
i’m trying to implement new features for multi LED pens
thanks in advance!
Best regards
Andre
Thanks Uwe,
))
Yes, I have to upgrade my Mac OS… or… to use PC
Thanks for all
Stan
Hi im not sure where it was but i saw a post for people looking for a easy method for scrolling, One person had come up with the idea of using the nunchuck which is good but i think it would be better if this could be done with the pen alone. this is when i had the idea of using smart scroll (OSX)
http://www.marcmoini.com/sx_en.html
this app lets you smoothscroll any coca based app by simply hovering the mouse over the top 20-30% of the top or bottom. however it seems that the app does not recognise the input from wiimote whiteboard, perhaps some genius could figure out a work around. much thanks to johnny lee again, the mans a legend in my eyes
Happy New Year to everyone!
Awesome, this is great work. 10 minutes of playing around (mostly spent because I forgot to turn on the the blue tooth) and it was working. I used the wii IR bar to make the mouse movements and prove the concept. Off to build a pen!
Thank you!