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を別のものに変更してコンパイル&書き込みを行い、上記レジストリを削除すると正常に表示されることが多いです。
コメント