Overview
WiimoteCast is an open-source project that lets you use your Nintendo Wiimote as a controller for your PC, using your Android device as a bridge. It supports both Dolphin Emulator and custom input servers, overcoming modern Android Bluetooth restrictions with HID polling and robust networking.
Features
- Wiimote input relay from Android to PC (via WiFi/network)
- Dolphin Emulator UDP protocol support
- Custom server mode (JSON over TCP/UDP)
- Device selection, service control, and log viewer in-app
- Foreground service with persistent notification
- Works with HID adapters and OTG setups
- Open, research-focused, and fully documented
Architecture
[Wiimote] <--> [Android: WiimoteCast App] <--> [WiFi/Network] <--> [PC: Python Server/Dolphin]
- Wiimote: Connects to Android via Bluetooth (if possible) or as a HID device.
- Android App: Reads input, translates to JSON/UDP, and forwards to the server.
- PC Server: Receives input, emulates gamepad or feeds Dolphin Emulator.
Android App
- Written in Kotlin, programmatic UI (no XML layouts)
- Requests all required Bluetooth and notification permissions
- HID polling for modern Android compatibility
- Foreground service for reliability
- Device selection, IP/port entry, Dolphin mode toggle
- Log viewer for debugging
Python Server
- Receives input from the app (JSON or Dolphin UDP)
- Emulates a gamepad using
vgamepador similar libraries - Logs all received packets and input actions
- Extensible for other emulators or custom input schemes
Troubleshooting
- Bluetooth connection fails? Use HID mode or try an older device.
- No devices listed? Ensure Wiimote is paired, or use a HID adapter.
- No input on PC? Check server logs, firewall, and network connectivity.
- Dolphin not receiving input? Ensure correct IP/port and UDP server enabled.
Research & References
- Dolphin Emulator UDP Protocol
- Android Bluetooth Security Changes
- vgamepad Python Library
- Android InputDevice API
This project is open for research, learning, and hacking. Contributions and forks are welcome!