Stefan Wagner's TinyStick Is a Compact Joystick/Mouse with a WCH CH32V003 RISC-V Hidden Inside
With two firmware options — one to act as a joystick, the other as a "mousestick" — this tiny accessory is your flexible friend.
Maker Stefan Wagner has built another useful gadget around the popular WCH Electronics CH32V003 RISC-V microcontroller: an analog joystick, connecting directly to a host device over USB and in just about the smallest possible footprint.
"The USB Joystick is a versatile device that combines the functionality of an analog joystick with the convenience of a USB interface," Wagner explains of the "TinyStick: CH32V003 Edition" he has designed and built. "It is based on the affordable [WCH Electronics] CH32V003 32-bit RISC-V microcontroller."
WCH Electronics' CH32V003 has proven extremely popular since its launch, for very good reason: despite costing mere cents apiece, they're built around a surprisingly powerful QinKe RISC-V2A core — implementing the RV32EC subset of the free and open source RISC-V instruction set architecture (ISA) — and include a wealth of on-board peripherals.
This chip represents the brains of the joystick. A two-axis analog stick with push-button input, like you'd find on a game controller, is connected to the microcontroller's analog to digital converter (ADC), which then uses its inputs to inform the output of a firmware designed to present the gadget as a USB Human Interface Device — meaning no driver installation is required.
Wagner has has released two different versions of the firmware, too. The standard "joystick" firmware does exactly what you'd expect: presents the device as a USB joystick, using the stick's push input as a fire button. The "mousestick" firmware, by contrast, translates the joystick's movements into mouse inputs — and maps the stick's push input to a left click.
Design files and source code for the TinyStick have been published to GitHub under the reciprocal Creative Commons Attribution-ShareAlike 3.0 Unported license.