0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ESP32-S2開発機でUSBホストで遊ぶ。(USBゲームパッドを接続)

0
Last updated at Posted at 2026-09-12

参考

いろいろ注意

  • 過去ログを見てね!!!
  • やや、ヒット!!!
  • 配線は、各自、データシートを確認の事。
  • 配線

5V - 5V
D- - D-
D+ - D+
GND - GND

結果

Screenshot From 2026-09-13 07-47-18.png

Screenshot From 2026-09-13 07-47-34.png

Screenshot From 2026-09-13 07-47-45.png

image_original(151).jpg

Screenshot From 2026-09-13 07-54-35.png

プログラム


#include "EspUsbHost.h"

EspUsbHost usb;

static void printHex(const uint8_t *data, size_t length)
{
  for (size_t i = 0; i < length; i++)
  {
    if (data[i] < 0x10)
    {
      Serial.print('0');
    }
    Serial.print(data[i], HEX);
    if (i + 1 < length)
    {
      Serial.print(' ');
    }
  }
}

void setup()
{
  Serial.begin(115200);
  delay(500);
  Serial.print("\n\nSTART\n\n");delay(5000);//caa45040

  Serial.println("EspUsbHost gamepad example start");

  usb.onDeviceConnected([](const EspUsbHostDeviceInfo &device)
                        {
                          Serial.print("connected: ");
                          espUsbHostPrint(device); });

  usb.onDeviceDisconnected([](const EspUsbHostDeviceInfo &device)
                           {
                             Serial.print("disconnected: ");
                             espUsbHostPrint(device); });

  usb.onGamepad([](const EspUsbHostGamepadEvent &event)
                {
    Serial.printf("report[%u]=", (unsigned)event.reportLength);
    printHex(event.reportData, event.reportLength);
    Serial.println();

    for (size_t i = 0; i < event.fieldCount; i++)
    {
      const EspUsbHostHIDFieldValue &field = event.fields[i];
      Serial.printf("  field[%u] page=0x%04x usage=0x%04x value=%ld logical=%ld..%ld bits=%u@%u flags=0x%02x\n",
                    (unsigned)i,
                    field.usagePage,
                    field.usage,
                    (long)field.value,
                    (long)field.logicalMin,
                    (long)field.logicalMax,
                    field.bitSize,
                    field.bitOffset,
                    field.flags);
    }

    // en: Example mapping. Replace VID/PID and usage choices with your controller.
    // ja: マッピング例です。VID/PIDとusageの選択はコントローラーに合わせて置き換えてください。
    //if (event.vid == 0x054c)
    if (event.vid == 0x303a)//caa45040
    {
      int32_t lx = 0;
      int32_t ly = 0;
      uint32_t buttons = 0;
      Serial.printf("  vid=[%4x] ",event.vid); //caa45040
      for (size_t i = 0; i < event.fieldCount; i++)
      {
        const EspUsbHostHIDFieldValue &field = event.fields[i];
        if (field.usagePage == 0x01 && field.usage == 0x30)
        {
          lx = field.value;
        }
        else if (field.usagePage == 0x01 && field.usage == 0x31)
        {
          ly = field.value;
        }
        else if (field.usagePage == 0x09 && field.value && field.usage > 0 && field.usage <= 32)
        {
          buttons |= 1UL << (field.usage - 1);
        }
      }
      Serial.printf("  mapped lx=%ld ly=%ld buttons=0x%08lx\n",
                    (long)lx,
                    (long)ly,
                    (unsigned long)buttons);
    } });

  if (!usb.begin())
  {
    Serial.printf("usb.begin() failed: %s\n", usb.lastErrorName());
  } else {Serial.printf("usb.begin() OK\n");} //caa45040
}

void loop()
{
  delay(1);
}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?