DIY USB HID Joystick Device and Game Controller

For many projects it would be cool to build a custom USB Joystick device, either as custom game controller for Windows or any USB host which can be used with a USB Joystick. Instead buying one, why not build my version? All what I need is a USB capable board, some kind of input (potentiometer, push buttons) and some software, and I have my USB Joystick:

DIY USB HID Joystick Device

DIY USB HID Joystick Device

In this article I’m using the NXP FRDM-KL25Z (ARM Cortex-M0+) with a Joystick (e.g. from Dx.com) shield:

NXP FRDM-KL25Z with Joystick Shieldv

NXP FRDM-KL25Z with Joystick Shield

The USB HID Joystick class is very similar to the USB Keyboard one, so follow the “Using the FRDM-KL25Z as USB Keyboard” tutorial for the basic USB setup.

Select the HID Joystick Device:

HID Joystick Device

HID Joystick Device

Then configure the HID device settings, especially the CPU/device used:

HID Device Settings

HID Device Settings

The component offers methods to set buttons, throttle, hat position and X/Y joystick position:

USB HID Joystick Subcomponent

USB HID Joystick Sub-component

I have published on GitHub an example project which uses X/Y analog position, 4 hat switches, a throttle setting plus 3 push buttons:

USB HID Joystick Example Project

USB HID Joystick Example Project

The USB HID device shows up with two devices in the Windows device manager:

USB HID Joystick in Device Manager

USB HID Joystick in Device Manager

Inside the Windows Control Panel, there is a dialog to set up any USB game controller:

Setup USB Game Controller

Setup USB Game Controller

That dialog shows the controls and is used to calibrate them:

Setup USB Game Controller

Setup USB Game Controller

Summary

Building a DIY game controller is easy with the addition of the USB HID Joystick component and software. With a USB capable device and a joystick shield I’m able to create my gaming controller.

Happy Gaming 🙂

Links

20 thoughts on “DIY USB HID Joystick Device and Game Controller

  1. Hi Erich,

    HID Joystick Device class is not available in mine SDK 2.0. It must be in MCUC1. How to get it?

    Regards,
    Marceli

    Like

  2. Pingback: McuOnEclipse Components: 09-July-2017 Release | MCU on Eclipse

  3. Doesn’t build, followed as best I could considering the differences between the examples and 3.2 and I was trying on a K64F but USB0_init was not built and I was unable to select USB1 and code seemed to create a mixed USB1 and a USB0 device with init being 1 and HID connected to 0.

    Trying to use a 64F for the ethernet

    Like

    • Not sure what is wrong on your side. I would first start with a project without any ethernet support. If it is USB1 or USB0 should not matter. Just make sure you have configured USBx_Init properly.

      Like

  4. Hi Erich,
    So I was trying to do the DIY USB joystick but I keep getting this error: “Description Resource Path Location Type
    Generator: FAILURE: at line 10: Property not found: “TxBuffer” (file: Drivers\Common\FSL_USB_HID_Joystick_DeviceSettings.Inc) FRDM-KL25Z_USB_HID_Joystick HIDJ1 Processor Expert Problem”
    Can you help me please?
    P.S.: it let me comment on this post now 🙂

    Like

  5. Hi Erich,

    I am using you lib of joystick to increment functions on PE component. I’d like to know if you have some code to add in you lib to read data from USB HID. I’m tring to implement but any help, would be great.

    Like

What do you think?

This site uses Akismet to reduce spam. Learn how your comment data is processed.