uweschmidt.org

42 / π ≈ 13.37 

Wiimote Whiteboard

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.

1,066 Responses

  1. dan says:

    hi there,
    i found this function in smoothboard
    http://www.facebook.com/photo.php?pid=3900315&id=109757703015
    is this possible with WW, pls?
    thx

  2. Helen says:

    Thank you Boon Jin.

    The issue was in fact the sunlight. We have covered the window, and all is working well. We are trialing both the java wii whiteboard application and Smoothboard in our building.

    Thank you for your quick response and the solution that will help us move forward with this trial.

    Helen

  3. Uwe says: in reply to Cyrille

    Hi Cyrille,

    I guess it’s because there is no bluecove gpl for arm machines ;-(

    I don’t know, but the website says it works on “SableVM on Debian 4.0r3 ARM on Linksys NSLU2”.

    Do you have a piece of advice to share

    Not really, other than referring you to the BlueCove Users Discussion Group. This is your best option to resolve this.

    Little info: I used the bluecove 2.1.1

    Try using bluecove-gpl-2.1.0.jar instead.

  4. Uwe says: in reply to Helen

    Hi Helen,

    Boon Jin: If you are using Smoothboard, depending on the amount of infrared coming in, you can reduce the sensitivity of the Wiimote until these stray IR sources is undetected.

    this is good idea. You can also do this with my app by changing the runtime option org.uweschmidt.wiimote.whiteboard.sensitivity.

  5. Uwe says: in reply to dan

    Hi Dan,

    i found this function in smoothboard
    http://www.facebook.com/photo.php?pid=3900315&id=109757703015
    is this possible with WW, pls?

    this should also work with my app (see the end of my video), but I haven’t tested it in a real scenario. Please let me know if this works for you, in case you try it out.

  6. pietro says:

    I uwe, can I ask you a question about the license of your beatiful program?
    Which is the license of the whiteboard?
    Why do you not include the bluecove-gpl required by Linux inside thebinary package?
    I think that if the license is compliant with the gpl you can include the bluecove
    You could release all the code under the gpl

    Thanks a lot for your work, in a special way for the Tuio support that allow to use
    the wiimote whiteboard as multitouch

    Bye

  7. Uwe says: in reply to pietro

    Hi pietro,

    Why do you not include the bluecove-gpl required by Linux inside thebinary package?
    I think that if the license is compliant with the gpl you can include the bluecove
    You could release all the code under the gpl

    license issues are unfortunately tricky. My program relies on the WiiRemoteJ library, which is (in my opinion) incompatible with the GPL.
    The rest of the libraries are probably GPL-compatible, although I’m not even totally sure about that…

  8. dan says:

    hi,
    i have a Mac Pro with 3 outputs on graphic cards. is somehow possible to calibrate two external desktop toghether?
    http://www.initi.org/wii.png
    thx in advance
    best
    dan

  9. Uwe says: in reply to dan

    Hi Dan,

    that’s unfortunately not possible. I meant to do this at some point, but never got around to it. Don’t expect this to happen any time soon, if ever…

  10. Chris says:

    Hi Uwe,

    First of all thank you for spending time on this program, it looks fantastic.

    I’m having problems calbrating my screen which I can’t do. The Wii remote connects but when I try to calibrate the screen apears then nothing happens.

    I’m using a Mac OS X which I have set up to use as two seperate monitors so I can see the tool box when I’m trying to calibrate on the board.

    In the ‘Visible IR dots’ bit numbers 2 and 3 change when I click my IR pen so I’m presuming it’s picking up two sources so that where the problem is.

    I’ve tried using a IR pen and just an IR diode and a battery and it still see two dots, I’ve also tried the Wii remote in different postions. Any ideas on how to fix this.

    Many thanks

    Chris

  11. Boon Jin says: in reply to Chris

    Hi Chris,
    How far are you positioning the Wiimote from the screen? There is a possibility that there are reflections of the IR causing the additional points.

    When you do not activate the IR pen, does the Wiimote still detect any dots? If yes, you are having some stray IR sources in your vicinity.

    Regards,
    Boon Jin

  12. Ben Jones says:

    Hi Uwe
    Great to see how far the app has come since you started over 2 years ago.

    I am trying to get running on my Windows 7 Netbook. It is the Windows BT stack, which according to the documentation is compatable (XP Sp2 or newer) but I’m getting the ‘Not supported on winsock’ been a while does this mean no luck my stack is incompatable & I’m reading documentation wrong?

    Cheers

    Ben :-)

  13. Bobby says:

    i get a little confused
    when i used the mac version it work flawlessly.

    but when i used the cross-platform version (i double click the WiimoteWhiteboard.jar), it generates error like this :
    JarClassLoader: Warning: Unable to load native library: java.lang.NullPointerException
    Native Library bluecove not available
    java.lang.IllegalStateException: Bluetooth failed to initialize. There is probably a problem with your local Bluetooth stack or API.

    is this a bug, or maybe the cross platform version are unable to run on a mac?

    note :
    this is my java version
    ➜ ~ java -version
    java version “1.6.0_17″
    Java(TM) SE Runtime Environment (build 1.6.0_17-b04-248-10M3025)
    Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01-101, mixed mode)

  14. Uwe says: in reply to Ben Jones

    Hi Ben,

    It is the Windows BT stack, which according to the documentation is compatable (XP Sp2 or newer) but I’m getting the ‘Not supported on winsock’

    my app still only suports the WIDCOMM stack on Windows, AFAIK. Where did you find this in the documentation?

  15. Uwe says: in reply to Bobby

    Hi Bobby,

    when i used the mac version it work flawlessly.

    but when i used the cross-platform version (i double click the WiimoteWhiteboard.jar), it generates error [...]

    the cross-platform version on your system is started in 64-bit mode by default, which currently doesn’t work (the Mac app already takes care of this). To solve your problem, open Terminal.app and run this (in the correct folder):

    java -d32 -jar WiimoteWhiteboard.jar
    
  16. Ben Jones says:

    Uwe
    “Microsoft Bluetooth stack (currently this means Windows XP SP2 or newer and Windows Mobile 2003 or newer)”
    http://code.google.com/p/bluecove/wiki/stacks

    Or is this just XP, surprised bluecove doesn’t support Windows Stack as now default for Win7, very few radios require additional software.

    Ben :-)

  17. Uwe says: in reply to Ben Jones

    Hi Ben,

    “Microsoft Bluetooth stack (currently this means Windows XP SP2 or newer and Windows Mobile 2003 or newer)”
    http://code.google.com/p/bluecove/wiki/stacks

    the stack has to support L2CAP in combination with BlueCove, which only applies to WIDCOMM.

  18. Cyrille says: in reply to Uwe

    Hello!

    I followed (again) the exact process precisely describerd above, but I always get the same unfortunate message:

    “Bluetooth failed to initialize. There is probably a pb with your local BT stack or API”

    cyrille@vaio2010:~/Bureau/javaWM unzipped$ java -Dbluecove.debug=true -jar WiimoteWhiteboard.jar
    21:51:30.244 Java 1.4+ detected: 1.6.0_0; OpenJDK Client VM; Sun Microsystems Inc.
    	  com.intel.bluetooth.UtilsJavaSE.getLocation(UtilsJavaSE.java:123)
    21:51:30.361 Use stack ClassLoader
    	  com.intel.bluetooth.NativeLibLoader.loadAsSystemResource(NativeLibLoader.java:272)
    21:51:30.386 Library loaded from /tmp/bluecove_cyrille_0/libbluecove.so
    	  com.intel.bluetooth.NativeLibLoader.loadAsSystemResource(NativeLibLoader.java:312)
    21:51:30.388 error BlueCove native library version mismatch 2010100 expected 2010051
    	  com.intel.bluetooth.BlueCoveImpl.detectStack(BlueCoveImpl.java:452)
    java.lang.IllegalStateException: Bluetooth failed to initialize. There is probably a problem with your local Bluetooth stack or API.
    	at wiiremotej.WiiRemoteJ.(WiiRemoteJ.java:74)
    	at org.uweschmidt.wiimote.whiteboard.WiimoteConnector.connect(WiimoteConnector.java:48)
    	at org.uweschmidt.wiimote.whiteboard.WiimoteDataHandler.(WiimoteDataHandler.java:84)
    	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: javax.bluetooth.BluetoothStateException: BlueCove native library version mismatch
    	at com.intel.bluetooth.BlueCoveImpl.detectStack(BlueCoveImpl.java:454)
    	at com.intel.bluetooth.BlueCoveImpl.access$500(BlueCoveImpl.java:65)
    	at com.intel.bluetooth.BlueCoveImpl$1.run(BlueCoveImpl.java:1020)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at com.intel.bluetooth.BlueCoveImpl.detectStackPrivileged(BlueCoveImpl.java:1018)
    	at com.intel.bluetooth.BlueCoveImpl.getBluetoothStack(BlueCoveImpl.java:1011)
    	at javax.bluetooth.LocalDevice.getLocalDeviceInstance(LocalDevice.java:75)
    	at javax.bluetooth.LocalDevice.getLocalDevice(LocalDevice.java:95)
    	at wiiremotej.WiiRemoteJ.(WiiRemoteJ.java:67)
    	... 12 more
    20 mai 2010 21:51:30 org.uweschmidt.wiimote.whiteboard.WiimoteWhiteboard startup
    GRAVE: Error on startup
    java.lang.IllegalStateException: Bluetooth failed to initialize. There is probably a problem with your local Bluetooth stack or API.
    	at wiiremotej.WiiRemoteJ.(WiiRemoteJ.java:74)
    	at org.uweschmidt.wiimote.whiteboard.WiimoteConnector.connect(WiimoteConnector.java:48)
    	at org.uweschmidt.wiimote.whiteboard.WiimoteDataHandler.(WiimoteDataHandler.java:84)
    	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: javax.bluetooth.BluetoothStateException: BlueCove native library version mismatch
    	at com.intel.bluetooth.BlueCoveImpl.detectStack(BlueCoveImpl.java:454)
    	at com.intel.bluetooth.BlueCoveImpl.access$500(BlueCoveImpl.java:65)
    	at com.intel.bluetooth.BlueCoveImpl$1.run(BlueCoveImpl.java:1020)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at com.intel.bluetooth.BlueCoveImpl.detectStackPrivileged(BlueCoveImpl.java:1018)
    	at com.intel.bluetooth.BlueCoveImpl.getBluetoothStack(BlueCoveImpl.java:1011)
    	at javax.bluetooth.LocalDevice.getLocalDeviceInstance(LocalDevice.java:75)
    	at javax.bluetooth.LocalDevice.getLocalDevice(LocalDevice.java:95)
    	at wiiremotej.WiiRemoteJ.(WiiRemoteJ.java:67)
    	... 12 more
    

    Any hint how to fix that bugging status ;-(

  19. Uwe says: in reply to Cyrille

    Hi Cyrille,

    what process did you follow? Do you mean adding bluecove-gpl to my app?
    I’m not much of help when it comes to Linux-related problems, because I don’t have a Linux box for testing right now.

  20. Cyrille says: in reply to Uwe

    Yes, I followed exactly this:

    1. Download the cross-platform Java version and unzip the archive (folder WiimoteWhiteboard will be created)
    2. Go to the WiimoteWhiteboard folder and create a new sub-directory lib
    3. Download the latest GPL’d BlueCove Linux library (currently snapshot 73) and put it in the lib folder
    4. Type zip WiimoteWhiteboard.jar lib/bluecove-gpl-2.0.3-*.jar at the command-line in folder WiimoteWhiteboard
    5. That’s it. The software should start normally by typing java -jar WiimoteWhiteboard.jar
    6. If it works, you can remove the folder lib and its contents

    and unfortunately I can’t connect my Wiimote to the Linux box ;-( I know BT works on that machine with other devices!

  21. Uwe says: in reply to Cyrille

    Hi Cyrille,

    3. Download the latest GPL’d BlueCove Linux library (currently snapshot 73) and put it in the lib folder
    4. Type zip WiimoteWhiteboard.jar lib/bluecove-gpl-2.0.3-*.jar at the command-line in folder WiimoteWhiteboard

    you need to use bluecove-gpl-2.1.0 instead of a 2.0.3 snapshot (as mentioned here).

  22. Rodolfo says:

    Hi I have a problem I can not use the program that appears as wrong, wiiremote failed to connect, not supported on winsokc, and I know how I can fix it please

  23. Uwe says: in reply to Rodolfo

    Hi Rodolfo,

    the winsock Bluetooth stack doesn’t work with my app.
    Please see this comment for more information.

  24. Frustrated says:

    I’ve tried finding the driver for Wincomm 5.1.0.110 but to no avail. It seems that Whiteboard does not work with the current wincomm (6.1) stack as the error comes up as “Not supported on winsock” and won’t connect to the Wiimote. I’ve found that it works on Smoothboard but I hate to have to remove and then re-add the Wiimote. I’m slightly disappointed that I can’t use the Whiteboard…

  25. Ouie Castaneda says:

    Hi. Is it possible to use 2 wiimotes and one lcd projector in order to create a wider ir coverage? Thanks for any help you may provide.

  26. Uwe says: in reply to Frustrated

    Hi,

    I’ve tried finding the driver for Wincomm 5.1.0.110 but to no avail. It seems that Whiteboard does not work with the current wincomm (6.1) stack as the error comes up as “Not supported on winsock” and won’t connect to the Wiimote. I’ve found that it works on Smoothboard but I hate to have to remove and then re-add the Wiimote. I’m slightly disappointed that I can’t use the Whiteboard…

    I think you mean the Widcomm driver, not Wincomm. Maybe you searched for the wrong name?
    The error message “Not supported on winsock” indicates that you’re using the default Windows Bluetooth stack winsock, which does not work with my app.

    From the BlueCove documentation:

    If automatic Bluetooth Stack detection is not enough Java System property “bluecove.stack” can be used to force desired Stack Initialization. Values “widcomm”, “bluesoleil” or “winsock”. By default winsock is selected if available.

    Hence, try starting my app like this (with installed Widcomm stack):

    java -Dbluecove.stack=widcomm -jar WiimoteWhiteboard.jar
    
  27. Uwe says: in reply to Ouie Castaneda

    Hi Ouie,

    Is it possible to use 2 wiimotes and one lcd projector in order to create a wider ir coverage?

    that should work as long as each Wiimote can “see” at least one quarter of the display; see my video.

  28. Justin says:

    I’ve been trying to get this program running in Windows 7 for a couple days now – no luck. I’ve tried 3 different BT dongles and with the built-in MS stack, BlueSoleil, and Toshiba drivers included with the most recent dongle. I cannot use the Widcomm drivers because version 6 simply won’t install (it asks me to plug in or turn on my device and sits). I’ve tried to find the older Widcomm 5.1 drivers as others have suggested, but I cannot locate them anywhere.

    Really though, I don’t care so much about using this software; I just need a Java library for connecting to the Wiimote for my own project. I don’t want to use a .dll like Smoothboard since my software is in Java and I want to be able to use it in Linux as well. Are there any other Java libraries for connecting to the Wiimote I could try?

  29. Uwe says: in reply to Justin

    Hi Justin,

    Really though, I don’t care so much about using this software; I just need a Java library for connecting to the Wiimote for my own project. I don’t want to use a .dll like Smoothboard since my software is in Java and I want to be able to use it in Linux as well. Are there any other Java libraries for connecting to the Wiimote I could try?

    I guess these two links will help.

    Good luck with your project.

  30. Uwe says:

    Released version 1.0.3:

    • Added runtime option to disable mouse control by default (useful for TUIO-only use)
    • Added Indonesian localization

Leave a Reply