Single‐Board Computers - vanilla-wiiu/vanilla GitHub Wiki

Single-board computers (e.g. Raspberry Pi) make for very attractive cores for a building a custom Wii U gamepad clone from scratch, being small and cheap with low power consumption, while also capable and extensible enough to handle all major gamepad functionality. This page is intended to assist anyone intending to use Vanilla with a single-board computer to do so.

Hardware Considerations

While most Wii U gamepad can be trivially replicated by almost all SBCs, there are some major concerns that affect which one you should choose:

  • Display output: A gamepad obviously needs some kind of display, and while many are equipped with some form of HDMI, some utilize an alternate interface such as MIPI DSI, and some have no video output at all. You will want to ensure whatever screen
  • Hardware video decoding: Generally these low-powered systems are not powerful enough to decode the gamepad's video feed purely in software, and will need at minimum to be capable of decoding 480p60 (854x480). Thankfully most single-board computers with any video capability can at least decode 1080p30, which is more than enough for our purposes. However, some low-power hardware video decoders used in single-board computers may introduce a certain amount of undocumented latency. It is recommended to test your hardware thoroughly before committing to it.
  • 5GHz Wi-Fi (semi-optional): 5GHz Wi-Fi is a hard requirement for communicating to the Wii U as a gamepad, and is unfortunately rare on single-board computers (most of which stick to 2.4GHz). However, as long as your SBC has USB 2.0 (or faster) support, you should be able to connect any compatible off-the-shelf Wi-Fi adapter and use that instead.

In general, you should research and plan out what parts you intend to use in advance to ensure they're all compatible before you invest in any particular part.

Hardware Recommendations

There is a wide range of single-board computers out there and many constantly being developed and released. This page may not be up-to-date with the latest hardware offerings, so it is recommended to research others

Raspberry Pi Zero / Zero 2

The Raspberry Pi is by far the most popular and widely supported family of single-board computers, and in theory, even the cheapest models, Raspberry Pi Zero (2015) and the Raspberry Pi Zero 2 (2022), has enough power to handle the workload of a Wii U gamepad. Unfortunately their Wi-Fi chip is also limited to 2.4GHz, requiring an external USB 5GHz Wi-Fi adapter to connect to the Wii U.

Orange Pi Zero 2W / Zero 3

The Orange Pi is a lesser-known but quite capable single-board computer family. The Orange Pi Zero 2W in particular is very clearly modeled on the Raspberry Pi Zero/Zero 2 design, however it has a considerably more powerful CPU and hardware video decoder, which may reduce latency and lag compared to the Raspberry Pi Zero.

The Orange Pi Zero 2W and Zero 3 also feature 5GHz Wi-Fi on the board, however it is unfortunately unusable for Vanilla. They are FullMAC cards, meaning they require a firmware patch to connect to the Wii U, and even then they have a hard maximum receiving frame size limit of 1,500 bytes, while the Wii U sends frames that are up to 1,800 bytes in size. This appears to be a hardware limitation (i.e. not patchable in firmware), so ultimately an external USB Wi-Fi adapter is required for these boards too.

Software

Vanilla provides Buildroot support for the Orange Pi Zero 2W/Zero 3 and the Raspberry Pi Zero/Zero 2. Prebuilt images are available for testing, however in reality you will almost certainly need to customize the image for whatever hardware you choose for your design (for example, the prebuilt image contains driver support only for the Ralink RT28xx family of Wi-Fi cards, you'll need to add the correct drivers for your card).

Flashing

Use these instructions to write an sdcard.img generated from Buildroot (either a prebuilt image supplied in the Releases section or a build you've made yourself to your SD card.

To flash to your Pi's SD card, use dd:

sudo dd if=sdcard.img bs=1M of=/dev/sdX

CAUTION: dd used improperly can lead to SEVERE data loss. Use with caution.

Replace /dev/sdX with the correct identifier for your SD card. You can determine this using lsblk. It may also take the form of /dev/mmcblkX.

NOTE: The image provides a system partition of roughly 100MB, which is enough for Vanilla, however if you intend to record a lot of videos or screenshots, you may want to expand this partition to fill the rest of your SD card with a tool like GParted.

Compiling

Vanilla's Raspberry Pi/Orange Pi images use the Buildroot system:

  1. Clone the Buildroot repository and switch to version 2025.11-rc2:

    git clone https://github.com/buildroot/buildroot.git
    cd buildroot
    git checkout 2025.11-rc2
    
  2. Initialize Buildroot with Vanilla's defconfig:

    make BR2_EXTERNAL="<VANILLA-SOURCE>/buildroot" <defconfig>
    

    Replace <VANILLA-SOURCE> to the absolute path that Vanilla's source code is located in. Replace <defconfig> with a corresponding defconfig in /buildroot/configs

  3. To make make modifications to the system (which you will probably need to do at some point), you can use the following Buildroot config options:

    make menuconfig  # For CLI menus
    

    OR

    make xconfig  # For GUI (Qt) menus
    
  4. Finally, build the system:

    make
    

On success, this should produce an image at build/images/sdcard.img. Using that image, follow the "Flashing" instructions above to apply it to your SD card.

⚠️ **GitHub.com Fallback** ⚠️