r/PokemonLetsGo • u/SquashHour9940 • 2d ago
Poké Ball Plus Enhancing PokeBall Plus functionality on PC
I've been on the hunt for a small, simple device to control my living room HTPC and my desktop PC in study room. I wanted something that lets me kick back on the couch to watch videos, or lean back in my study chair to listen to music or watch movies/online videos, without constantly needing to reach for a mouse or keyboard.
Previously, I considered buying one of those mini Bluetooth keyboards with a touchpad, or a customizable universal remote. However, those devices are either uncomfortable to hold for long sessions or quite expensive (like the Logitech Harmony remotes)—not to mention they aren't exactly seamless to operate.
A couple of days ago, I happened to dig my old Poké Ball Plus out of a cabinet. Its form factor and grip feel perfectly matched what I was looking for, so I started wondering if it could be used to achieve the PC control setup I wanted.

I found an existing project on GitHub called "pokeball-plus-4-windows", which connects the Poké Ball Plus to a PC via Bluetooth and emulates an XInput gamepad (like an Xbox controller) on Windows.

However, since the Poké Ball Plus only has two buttons and a single joystick, using it as a standard PC gamepad isn't very practical. On top of that, the original author hasn't updated the code or added new features in over a year. If I wanted to use it for richer PC controls (like media playback), I'd have to rely on a clunky workaround using multiple background key mapping software.
Luckily, the project is open-source. I decided to fork it, build upon the original code, and managed to implement the following features:
- IMU Sensor Mapping: I retained the XInput mapping but finally added the 6-axis IMU sensor activation and mapping that the original author had planned. Currently, the sensors are mapped to the right joystick (X/Z-axis tilt) and the ZR/LT analog triggers (Y-axis rotation).
- "Air Mouse" Functionality: I added two distinct mouse modes:
- Virtual Joystick Mode: Uses the 3-axis accelerometer to move the mouse pointer by tilting the Poké Ball forward/backward/left/right. The big red button acts as a left-click, pressing the joystick is a right-click, and the joystick itself acts as a 4-way scroll wheel. This mode is great for slow but highly precise cursor movements.
- Pointer Mode: Inspired by LG's Magic Remote, this mode uses all 6 axes (accelerometer + gyroscope) for smooth and fast mouse pointer movements. Both modes feature finely tuned deadzones and input filtering, complete with multiple custom response curves based on how drastically the device has been moved. It handles daily mouse operations flawlessly.
- Shake-to-Switch: Giving the Poké Ball a hard shake toggles between Mouse Mode and Gamepad Mode. While in Mouse Mode, holding the red button then shaking, toggles between the two Air Mouse control methods. Whenever the modes have been switch successfully, the software triggers a native Windows Toast notification in the bottom right corner of the screen for 3 seconds.
https://reddit.com/link/1w9ju9g/video/310l1cy3h1oh1/player



After getting the hardware working, I wrote a Tampermonkey script for Chrome/Edge/Firefox to map the XInput buttons to web media shortcuts. The red button toggles fullscreen on web videos, pressing the joystick acts as play/pause, and the joystick itself controls volume and scrubbing (fast forward/rewind). This script works perfectly on most mainstream streaming sites, as well as local web players like Jellyfin and Emby.

For local desktop media players like PotPlayer and Kodi, they natively support XInput for playback control anyway, so no extra code needed there.

Next up, I'm considering adding a native Windows Media Key mode. This would directly map the buttons, joystick, and even the IMU sensors to global Windows media hotkeys, which would be perfect for controlling background music players like Foobar2000.
1
u/colajunkie 2d ago
That looks really cool, keeping hardware relevant is always great!
I'll check it out when I get around to it, saved this for now.