Arduinoでゲームコントローラーのデバイス名を設定する

マイコン/Arduino

arduinoでゲームコントローラー(ジョイスティック)を作る5回目です。これまでarduinoでゲームコントローラを作る話を紹介してきました。

しかし、調子にのっていくつか作っていると問題が発生します。

すべてのデバイスが、”ArduinoMicro”のような名前になってしまって実際のゲームの割り当てをする際に、どれがどのデバイスやねん、という状態に陥ります。実験レベルでやっているのならいいのですが、実際にこれで飛行機(MSFS2020)を飛ばそうとすると結構厄介です。

今回はこれを解決する話です。ちなみにWindowsでのはなしです。当然ですがMacやLinuxは違う挙動です。

まずはググろう

先人がいろいろ書いてくださっています。

結論を書くとarduinoのインストールフォルダ

\arduinoIDE\arduino\hardware\arduino\avr\

にある

boards.txt

の中の

micro.build.usb_product="Arduino Micro"

を書き換えろ、という話なのですがここに罠があります。

この通りに書き換えてコンパイル、マイコンに書き込みを行っても名前が変わりません。

う~ん。はまってる人多いんじゃないですかね。コレ。

うまくいく場合もあります。うまくいく人はこのページは読んでいないと思うんで…

なんでうまくいかないのか

最初はよくわからなかったのですが、どうもWindowsの場合には

micro.build.usb_product=”Arduino Micro”

は、一度VIDとPIDが登録されると変更されないようです。vidとpid、デバイス名が一度レジストリに登録されてしまうと、同じvidとpidを持ったUSBデバイスのWindows上での表示名は最初に登録したデバイスの名前になってしまうようです。

対応するレジストリは以下の場所です。(万が一個人情報が入っていたら嫌なので伏字を使わせてもらいます)
\HKEY_USERS\S-1-5-21-4xx272-2xxxx5489-2xxxxxxxxx1-1001\System\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEM

環境によって数字の部分は違います。その場合は”Arduino Micro”などで検索すれば行きつけると思います。

上記レジストリの場所から、対応するVIDとPIDのキーを確認してください。OEMNameの値がWindows上で認識される値(名前)になっています。このキーを削除したうえで、VIDとPID、デバイス名を上記boad.txt上で書き換えてコンパイル・書き込みを行ったUSBデバイスを接続すれば、その組み合わせでWindowsに登録され、以降は正しい名前が表示されるようになります。

ただし、VIDとPIDは何でもかんでも好きなものを使っていいわけではないようなので注意が必要です。

board.txtの周りを見ると(個人の範囲で)使っていいのは以下の組み合わせのようです。

micro.vid.0=0x2341
micro.pid.0=0x0037
micro.vid.1=0x2341
micro.pid.1=0x8037
micro.vid.2=0x2A03
micro.pid.2=0x0037
micro.vid.3=0x2A03
micro.pid.3=0x8037
micro.vid.4=0x2341
micro.pid.4=0x0237
micro.vid.5=0x2341
micro.pid.5=0x8237
レジストリをいじるので自己責任でお願いします。

まとめ

この方法で解決できたでしょうか?名前が変更できない!という人はレジストリの設定を確認してみてください。

ちなみに、ProMicroやESP32などでゲームコントローラーを作ると、Windowsの”USBゲームコントローラーの設定”に対象のデバイスが出現しない場合もあります。この場合も、ArduinoソースのControllerTypeを別のものに変更してコンパイル&書き込みを行い、上記レジストリを削除すると正常に表示されることが多いです。

コメント