Introduction: Wiimote Controller Configuration for Raspberry Pi 2/3

Nintendo created the Nintendo Wii which uses Bluetooth to connect its wireless Wiimote controllers. The Raspberry Pi is a palm-sized computer that has been used for all sorts of applications and DIY projects. One of these projects is called RetroPie. It allows users to play classic games with the ability to connect a myriad of controllers. Packages to enable the Wiimote to connect to the Raspberry Pi via Bluetooth have been developed. I will assume that you have Raspbian already working on your Raspberry Pi.

The purpose of this instructable is to guide you through the setup of the Nintendo Wiimote as a controller on your Raspberry Pi 2 or 3.

A basic knowledge of the command line in Linux as well as Raspberry Pi features are required. I will give you all the commands you will need to perform in the Linux terminal.

Time Commitment: This instructable will take 30 minutes to 1 hour.

Required Items:

- Raspberry Pi 2/3 and basic components (HDMI cable, monitor, power adapter, keyboard, mouse)

- Bluetooth adapter if you are using a Raspberry Pi 2

- 1-4 Wiimotes

Step 1: Update Raspberry Pi Software Packages

Update the existing software on your Raspberry Pi. We will be using the Linux Command line to perform all of the commands.

sudo apt-get update
sudo apt-get upgrade

Step 2: Install the Wiimote Interface Software Packages

The packages "cwiid" and "wminput" were created to interface the Wiimote and Raspberry Pi via bluetooth. The "cwiid" package is the Linux to Nintendo Wiimote interface. The "wminput" is a Linux event, mouse, and joystick driver for the wiimote using the uinput system.

sudo apt-get install python-cwiid
sudo apt-get install wminput

We also need to install the Bluetooth packages for the Raspberry Pi if you are using a Raspberry Pi 2.

sudo get-apt install bluetooth

Step 3: Create the Wiimote Rule File

We need to change the udev rules so the uinput device will work with non-root users. We will do this by adding wiimote.rules to /etc/udev/rules.d.

sudo nano /etc/udev/rules.d/wiimote.rules

Copy and paste the following into the file:

KERNEL=="uinput", MODE="0666"     

Press CTRL + X , then press Y, then press ENTER to save your changes.

Step 4: Reboot the Pi or Restart the Udev Rules to Implement the Changes

In order to implement the changes that you made to the rules file, you must either reboot the Raspberry Pi or restart the udev service.

sudo shutdown -r now

or

sudo service udev restart

Step 5: Check the Status of the Bluetooth

We will be using the bluetooth to connect to the Wiimotes. Check the status by typing the following:

/etc/init.d/bluetooth status

You should see something like in the picture.

Now we know the Bluetooth is working.

Step 6: Configuring Wiimote Buttons in Wminput

Each Wiimote will need its own controller mapping. My configuration file will have controller mappings for the Wiimote and Nunchuk Buttons.

Create the file with the following command:

sudo nano /home/pi/mywinput

Copy and paste this into the file:

#WiiMote
Wiimote.A  = BTN_A
Wiimote.B = BTN_B
Wiimote.Dpad.X = ABS_Y
Wiimote.Dpad.Y = -ABS_X
Wiimote.Minus = BTN_SELECT
Wiimote.Plus = BTN_START
Wiimote.Home = BTN_MODE
Wiimote.1 = BTN_X
Wiimote.2 = BTN_Y
# Nunchuk
Nunchuk.C = BTN_C
Nunchuk.Z = BTN_Z

Press CTRL + X , then press Y, then press ENTER to save your changes.

Step 7: Activate the LED's on the Wiimote

The Wiimote will work without this step, but if you would like to see that your Wiimote is connected or which controller mapping is currently mapped to that Wiimote, follow this step.

Add the following to the bottom of the file you just created:

sudo nano /home/pi/myinput
Plugin.led.Led1 = 1
#Plugin.led.Led2 = 1
#Plugin.led.Led3 = 1
#Plugin.led.Led4 = 1

Remove the "# "on the line for the LED's you want to light up. You can go from no LED's lit to all LED's lit to everything in between.

Press CTRL + X , then press Y, then press ENTER to save your changes.

Step 8: Get Wiimote Addresses

We will create an executable script that will search for Wiimotes and connect them to the Raspberry Pi. To do this we need that addresses of the Wiimotes.

Scan for Wiimotes by typing:

hcitool scan

Press the 1 and 2 buttons simultaneously. After a bit you should see something similar to the screenshot.

Take note of the addresses of your Wiimotes or open another terminal

Note: You might have to redo it if the scan did not find the Wiimotes. If pressing 1 and 2 does not work, try using the red sync button under the battery cover on the Wiimote

Step 9: Create a Shell Script to Connect the Wiimotes

Now we need to create a script that will connect the Wiimotes when we run it.

Create a directory and file for the script.

Make a directory by typing:

mkdir /home/pi/bin

Create the file by typing:

sudo nano /home/pi/bin/connectwii.sh

Copy and paste this into the file:

#!/bin/bash
sleep 1 # Wait until Bluetooth services are fully initialized
hcitool dev | grep hci >/dev/null
if test $? -eq 0 ; then
    wminput -d -c  /home/pi/mywminput 00:19:1D:48:D8:FD &
    wminput -d -c  /home/pi/mywminput 00:22:D7:C2:A6:B9 &
else
    echo "Blue-tooth adapter not present!"
    exit 1
fi

Note: you need a wminput line for each wiimote you are using.

Replace the addresses above with the addresses of your wiimotes.

If you have different controller mappings for different Wiimotes, replace “mywminput” with your controller mapping. See the example screenshot.

Press CTRL + X , then press Y, then press ENTER to save your changes.

Step 10: Make the Script Executable

Make the script just created executable by typing:

sudo chmod 775 /home/pi/connectwii.sh

Step 11: Reboot and Test the Script

Reboot your Raspberry Pi and test your script

sudo shutdown –r now
sudo modprobe uinput
/home/pi/connectwii.sh

Press 1 and 2 on the Wiimotes you want to connect.

You should see the LEDs light up when they are connected.

When all of your Wiimotes are connected, press CTRL + C to close your script.

Step 12: Test the Wiimote

Install jstest-gtk to test your Wiimote as a controller.

sudo apt-get install jstest-gtk
jstest-gtk

You should see a gui that shows all valid inputs to test.

Select the Wiimote.

Press the buttons to see the Button Presses Register. In the picture, I am pressing the A button. You can see it register because the "Buttons 4" box transitions from white to black.

The Wiimote is configured, and you are ready to play!

Step 13: Now You Are Ready to Play!

Run the script and connect your Wiimotes before you run your games and emulators.

You are ready to use your Wiimotes as controllers.

Go to https://github.com/retropie/retropie-setup/wiki/First-Installation to learn how to get RetroPie for you Raspberry Pi.