LoginSignup
2
1

RP2040でジョイスティックを作ってみる

Posted at

RP2040を使用したジョイスティックを作成する。

環境

  • XIAO RP2040
  • Windows 11
  • Arduino IDE 1.8.19

1.今回使用するボード

Seeed XIAO RP2040

Raspberry pi picoと同じチップを使用したボード
1000円位で安い

2.ArduinoIDEの下準備

ボードデータの追加

ファイル -> 環境設定 -> 追加のボードマネージャのURLにRP2040を追加

https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

ボードマネージャからボードのインストール

ライブラリの追加

今回使用するライブラリは下記
RP2040のボードを追加したときに自動的に入る

入っていなければ、下記のGitからzip ファイルをDLしてArduinoIDEに読み込ませる

2.配線

3.ジョイスティックとして認識させる

コードの実装

ヘッダファイルとピンの設定

#include "Adafruit_TinyUSB.h"

#define BTN D4
#define ANALOG_X A0
#define ANALOG_Y A1

uint8_t const desc_hid_report[] =
{
  TUD_HID_REPORT_DESC_GAMEPAD()
};
Adafruit_USBD_HID usb_hid(desc_hid_report, sizeof(desc_hid_report), HID_ITF_PROTOCOL_NONE, 2, false);
hid_gamepad_report_t    gp;

初期設定

void setup() 
{
  TinyUSB_Device_Init(0);
  usb_hid.begin();
  // wait until device mounted
  while( !TinyUSBDevice.mounted() ) delay(1);
  
  pinMode(BTN, INPUT_PULLUP);
  pinMode(ANALOG_X, INPUT);
  pinMode(ANALOG_Y, INPUT);
  if ( !usb_hid.ready() ) return;
  gp.x       = 0;
  gp.y       = 0;
  gp.z       = 0;
  gp.rz      = 0;
  gp.rx      = 0;
  gp.ry      = 0;
  gp.hat     = 0;
  gp.buttons = 0;
  usb_hid.sendReport(0, &gp, sizeof(gp));
}

analogRead,digitalReadで読み取った内容をhid_gamepad_report_t構造体に入れ
usb_hid.sendReportでPCに送信をしています。

void loop() 
{ 
  gp.x = (int8_t)map(analogRead(ANALOG_X), 0, 1023, -127, 127);
  gp.y = (int8_t)map(analogRead(ANALOG_Y), 0, 1023, -127, 127);
  gp.buttons = (!digitalRead(BTN) << 0);
  usb_hid.sendReport(0, &gp, sizeof(gp));
}

Windowsで認識するか確認

書き込んでWindowsにさしJoystickとして認識することを確認する

コントロール パネル\ハードウェアとサウンド\デバイスとプリンターからXIAO RP2040名のデバイスを確認
ゲームコントローラの設定

なぜか x,y,z軸 回転軸 ボタンが32個 表示されるが、今回使用しているのは一部のみ
ジョイスティックを動かすとXY軸が動くことが確認できた。

4.まとめ

RP2040を使用してジョイスティックとして認識させ動作をPCに取り込むことができた。

2
1
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
2
1