I have an HID device that I'm trying to re-create using Arduino, I have captured the USB packets and I have pretty much analyzed all the data I need to operate the device, the only thing I'm not really sure about is how I should actually recreate the device with the Arduino device in terms of connection.

There is a software that detects and connects to my HID device, therefore I'd need to make the Arduino being detected as this device. I'm not really sure what would be the way to achieve that, is it related to PID and VID of the HID device? I assume there are much more than that that needs to be set in order to actually achieve that.

  • I think not all Arduinos are capable of this, which model do you have? For tinkering with USB and even - during prototyping - emulating a USB device this may be a better fit. Consider Facedancer and material you find about it ...
    – 0xC0000022L
    Commented Jun 24, 2020 at 11:38
  • @0xC0000022L Common arduino's(such as arduino nano/uno r3) are serial compatible, therefore I need an HID compatible arduino, I've ordered the arduino leonardo which I believe should be HID compatible. The GreatFET seems to be extremely expensive? :\ The solution kinda needs to be low budget, else there is not much sense of actually doing this. Thanks :)
    – msacco
    Commented Jun 24, 2020 at 11:50
  • 1
    Yep, I think the Leonardo should do. I think it depends on the exact Atmel chip on them.
    – 0xC0000022L
    Commented Jun 24, 2020 at 11:52
  • @0xC0000022L The board of the arduino leonardo is ATmega32u4, which should be ok as far as I understand? Still, I'm not really sure what would be my next step about this. As I said, I have the middle part which is actually reading/writing whatever I need, but not sure how to handle the connection. Thanks.
    – msacco
    Commented Jun 24, 2020 at 11:54
  • I think that the USB detection is handled by the arduino's internal libraries, so maybe by modifying these libraries I could make the arduino being detected as another device. Need to further check about this.
    – msacco
    Commented Jun 24, 2020 at 12:23

1 Answer 1


Almost any Arduino is capable of USB communication (at least low speed). There is difference if you need software (for example V-USB) or it has hardware support. Unless your board has dedicated USB output (which usually also mean hardware support) you also need to make required connector to USB cable (watch for appropriate signal voltage level (3.3 V)). And no, USB port used for uploading your program to Arduino cant be used as it is usually only USB to serial converter.

And now for software part. You need same VID and PID as your existing device so Windows (I assume you use them) can use correct driver and then you need to implement algorithm on your Arduino which depends on used USB implementation so look at examples available for your implementation.

In case you find Arduino inadequate for your task you can look at other ARM MCU development boards (for example Nucleo). Which are faster and more powerful.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.