We're attempting to port WiiUse to the Arduino platform. WiiUse is the most comprehensive wiimote library that we've found, and if possible we will use as much of it as possible for Awesome Controller. Very little progress so far.
Semi-Official Fork, located at http://github.com/rpavlik/wiiuse
Issue/bug tracker: https://github.com/rpavlik/wiiuse/issues
Wiiuse is a library written in C that connects with several Nintendo Wii remotes. Supports motion sensing, IR tracking, nunchuk, classic controller, Balance Board, and the Guitar Hero 3 controller. Single threaded and nonblocking makes a light weight and clean API.
Distributed under the GPL 3+.
This is a friendly fork, prompted by apparent non-maintained status of upstream project but proliferation of ad-hoc forks without project infrastructure. Balance board support has been merged from TU-Delft cross-referenced with other similar implementations in embedded forks of WiiUse in other applications. Additional community contributions have since been merged. Hopefully GitHub will help the community maintain this project more seamlessly now.
Patches and improvements are greatly appreciated - the easiest way to submit them is to fork the repository on GitHub and make the changes, then submit a pull request. The "fork and edit this file" button on the web interface should make this even simpler.
Original Author: Michael Laforest < para > < thepara (--AT--) g m a i l [--DOT--] com >
- Christopher Sawczuk @ TU-Delft (initial Balance Board support)
- Paul Burton https://github.com/paulburton/wiiuse
- Karl Semich https://github.com/xloem
- Johannes Zarl firstname.lastname@example.org
- hartsantler http://code.google.com/p/rpythonic/
- admiral0 and fwiine project http://sourceforge.net/projects/fwiine/files/wiiuse/0.13/
- Jeff Baker/Inv3rsion, LLC. http://www.inv3rsion.com/
- Jan Ciger - Reviatech SAS email@example.com
- Gabriele Randelli and the WiiC project http://wiic.sourceforge.net/
- Juan Sebastian Casallas https://github.com/jscasallas/wiiuse
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
This project is intended for developers who wish to include support for the Nintendo Wii remote with their third party application.
Platforms and Dependencies
Wiiuse currently operates on both Linux and Windows. You will need:
The kernel must support bluetooth
The BlueZ bluetooth drivers must be installed
If compiling, you'll need the BlueZ dev files (Debian/Ubuntu package libbluetooth-dev)
Bluetooth driver (tested with Microsoft's stack with Windows XP SP2)
If compiling, Microsoft Windows Driver Development Kit (DDK)
- Mac OS X 10.2 or newer (to have the Mac OS X Bluetooth protocol stack)
For either platform:
- If compiling, CMake is needed to generate a makefile/project
You need SDL and OpenGL installed to compile the (optional) SDL example.
Linux & Mac:
$ mkdir build $ cd build $ ccmake .. [-DCMAKE_INSTALL_PREFIX=/usr/local] [-DCMAKE_BUILD_TYPE=Release] OR $ cmake-gui .. $ make [target]
target is omitted then everything is compiled.
target can be any of the following:
wiiuse - Compiles
wiiuseexample - Compiles
wiiuseexample-sdl - Compiles
doc - Generates doxygen-based API documentation in HTML and PDF format in
# make install
libwiiuse.so is installed to
wiiuse-sdl are installed to
The CMake GUI can be used to generate a Visual Studio solution.
You need the install the Windows DDK (driver development kit) to compile wiiuse. You can download this from here: http://www.microsoft.com/whdc/devtools/ddk/default.mspx
You might also need to install the latest Windows SDK.
Using the Library
To use the library in your own program you must first compile wiiuse as
a module. Include
include/wiiuse.h in any file that uses wiiuse.
For Linux you must link
-lwiiuse ). For Windows you
wiiuse.lib. When your program runs it will need
On Windows using more than one wiimote (usually more than two wiimotes) may cause significant latency.
If you are going to use Motion+, make sure to call wiiuse_poll or wiiuse_update in a loop for some 10-15 seconds before enabling it. Ideally you should be checking the status of any expansion (nunchuk) you may have connected as well. Otherwise the extra expansion may not initialize correctly - the initialization and calibration takes some time.
Mac OS X
Sometimes you may not be able to connect to the device, even if it is discoverable. If that happens open the Bluetooth Preferences, select the Nintendo device on the list and remove it (by clicking on the minus sign). Close the Preference Pane and try again.
Acknowledgements by Michael Laforest
This site and their users have contributed an immense amount of information about the wiimote and its technical details. I could not have written this program without the vast amounts of reverse engineered information that was researched by them.
Of course Nintendo for designing and manufacturing the Wii and Wii remote.
Easy and intuitive bluetooth stack for Linux.
Thanks to Brent for letting me borrow his Guitar Hero 3 controller.
Known Forks/Derivative Versions
The last "old upstream" version of WiiUse was 0.12. A number of projects forked or embedded that version or earlier, making their own improvements. A (probably incomplete) list follows, split between those whose improvements are completed integrated into this new mainline version, and those whose improvements have not yet been ported/merged into this version. An eventual goal is to integrate all appropriate improvements (under the GPL 3+) back into this mainline community-maintained "master fork" - contributions are greatly appreciated.
Forks that have been fully integrated:
Added balance board support only.
Integrated into mainline 0.13.
Forks not yet fully integrated:
Started before the disappearance of the original upstream
Focused on Wiimote use with Wii hardware
Functions renamed, copyright statements removed
Additional functionality unknown?
git-svn mirror found here: https://github.com/xloem/libogc-wiiuse
Created an 0.13 version with some very preliminary MotionPlus support.
Integrated into branch
fwiine-motionplus, not yet merged pending alternate MotionPlus merge from WiiC by Jan Ciger.
Embedded, converted to C++, drastically changed over time and mostly unrecognizable now.
A mostly intact version is here: http://code.google.com/p/dolphin-emu/source/browse/?name=2.0#git%2FExternals%2FWiiUseSrc%2FSrc
Added Mac support
Added code to handle finding and pairing wiimotes on windows, see: http://code.google.com/p/dolphin-emu/source/browse/Source/Core/Core/Src/HW/WiimoteReal/IOWin.cpp
Fully modified version of the IO code is here: http://code.google.com/p/dolphin-emu/source/browse/#git%2FSource%2FCore%2FCore%2FSrc%2FHW%2FWiimoteReal
Added balance board support - skipped in favor of the TU Delft version.
Added static library support - not yet added to the mainline.
- Started work on speaker support.
Dramatically changed, C++ API added.
MotionPlus support added.
Added Mac support.
DolphinEmu PPA: used to have a WiiUse 0.13
Added Mac support.
Unknown other changes - not yet investigated.
Source package zipped up and available here: https://github.com/rpavlik/wiiuse/downloads
- Thread about MotionPlus: http://forum.wiibrew.org/read.php?11,32585,32922