Where is the HID library?

I am working on a project using an ESP32C3 to emulate a keyboard. I have included the arduino Keyboard library in my ini file, but build fails on failing to find HID.h. I cannot find out how to install any HID library.

The Arduino-ESP32 features no HID.h library. Still, USB keyboard or mouse functionality is available as USBHIDKeyboard.h.

Max, thank you for your response. Perhaps you could assist me further.

My main.cpp is as follows:

#include Arduino (within angle brackets, of course)
#include “USBHIDKeyboard.h”
#include “USB.h”

USBHIDKeyboard Keyboard:

void setup() {
Keyboard.begin();
USB.begin();
}
void loop() {}

Executing Platformio Build, the compiler reports ‘USBHIDKeyboard’ does not name a type, and, unsurprisingly, that Keyboard and USB were not declared in this scope.

Any thoughtn

Whats your exact platformio.ini?

Again, thank you for taking the time for this.

Platformio.ini:

[env:seeed_xiao_esp32c3]
platform = espressif32
board = seed_xiao_esp32c3
framework = arduino

Also, in anticipation:
PACKAGES:

  • framework-arduinoespressif32 @ 3.20009.0 (2.0.9)
  • tool-esptoolpy @ 1.40501.0 (4.5.1)
  • toolchain-riscv32-esp @ 8.4.0+202lr2-patch5

You’re on an old version, update to espressif32 6.6.0.

CLI

pio pkg update -g -p espressif32

or platform = espressif32@6.6.0 in the pltaformio.ini

Hi Max!

Well…
platformio.ini:
; PlatformIO Project Configuration File
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
; Please visit documentation for the other options and examples
; Redirecting...

[env:seeed_xiao_esp32c3]
platform = espressif32@6.6.0
board = seeed_xiao_esp32c3
framework = arduino

main.cpp:
#include <Arduino.h>
#include “USBHIDKeyboard.h”
#include “USB.h”

USBHIDKeyboard Keyboard;

void setup() {
pinMode(0, INPUT_PULLUP);
Keyboard.begin();
USB.begin();
}

void loop() {
// put your main code here, to run repeatedly:
}

build:
Executing task: platformio run --environment seeed_xiao_esp32c3
Processing seeed_xiao_esp32c3 (platform: espressif32@6.6.0; board: seeed_xiao_esp32c3; framework: arduino)

Verbose mode can be enabled via -v, --verbose option
CONFIGURATION: ***
PLATFORM: Espressif 32 (6.6.0) > Seeed Studio XIAO ESP32C3
HARDWARE: ESP32C3 160MHz, 320KB RAM, 4MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-builtin, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:

  • framework-arduinoespressif32 @ 3.20014.231204 (2.0.14)
  • tool-esptoolpy @ 1.40501.0 (4.5.1)
  • toolchain-riscv32-esp @ 8.4.0+2021r2-patch5
    LDF: Library Dependency Finder → Library Dependency Finder (LDF) — PlatformIO v6.1 documentation
    LDF Modes: Finder ~ chain, Compatibility ~ soft
    Found 33 compatible libraries
    Scanning dependencies…
    Dependency Graph
    |-- USB @ 2.0.0
    Building in release mode
    Compiling .pio/build/seeed_xiao_esp32c3/src/main.cpp.o
    Building .pio/build/seeed_xiao_esp32c3/bootloader.bin
    Generating partitions .pio/build/seeed_xiao_esp32c3/partitions.bin
    esptool.py v4.5.1
    Creating esp32c3 image…
    Merged 1 ELF section
    Successfully created esp32c3 image.
    Compiling .pio/build/seeed_xiao_esp32c3/lib4f0/USB/USBHID.cpp.o
    Compiling .pio/build/seeed_xiao_esp32c3/lib4f0/USB/USBHIDConsumerControl.cpp.o
    Compiling .pio/build/seeed_xiao_esp32c3/lib4f0/USB/USBHIDGamepad.cpp.o
    Compiling .pio/build/seeed_xiao_esp32c3/lib4f0/USB/USBHIDKeyboard.cpp.o
    Compiling .pio/build/seeed_xiao_esp32c3/lib4f0/USB/USBHIDMouse.cpp.o
    Compiling .pio/build/seeed_xiao_esp32c3/lib4f0/USB/USBHIDSystemControl.cpp.o
    Compiling .pio/build/seeed_xiao_esp32c3/lib4f0/USB/USBHIDVendor.cpp.o
    Compiling .pio/build/seeed_xiao_esp32c3/lib4f0/USB/USBVendor.cpp.o
    src/main.cpp:5:1: error: ‘USBHIDKeyboard’ does not name a type
    USBHIDKeyboard Keyboard;
    ^~~~~~~~~~~~~~
    src/main.cpp: In function ‘void setup()’:
    src/main.cpp:9:3: error: ‘Keyboard’ was not declared in this scope
    Keyboard.begin();
    ^~~~~~~~
    src/main.cpp:10:3: error: ‘USB’ was not declared in this scope
    USB.begin();
    ^~~
    Compiling .pio/build/seeed_xiao_esp32c3/FrameworkArduino/Esp.cpp.o
    *** [.pio/build/seeed_xiao_esp32c3/src/main.cpp.o] Error 1

Oh, my bad, it’s a ESP32C3? That chip does not have a freely programmable USB peripheral. Its function is fixed to USB CDC (Serial) and JTAG.

https://docs.espressif.com/projects/esp-idf/en/stable/esp32c3/get-started/establish-serial-connection.html#flash-using-usb

The ESP32S3 would support it. See all the .skip.X files in https://github.com/espressif/arduino-esp32/tree/master/libraries/USB/examples/Keyboard/KeyboardMessage to skip the incompatible boards.

Same is said in

https://github.com/adafruit/circuitpython/issues/8062

Oh well…

Perhaps you could advise me on another matter. I installed VSCode, then installed the Platformio extension which, it was my understanding, would also install the Platformio CLI. But, when I access the Platform Core CLI and enter “pio --help” I am told that ‘pio’ is not found but can be installed with: sudo apt install platformio

???

Don’t install PlatformIO via apt. You can expose the pio commands to the regular shell as documented.

https://docs.platformio.org/en/latest/core/installation/shell-commands.html

So, is there a way to get the CLI without apt? (Oh, wait, I wasn’t looking in the page you referenced)

(And, by the way, I do have a couple of S3 boards, and, reconfiguring, I got successful build)