Arduino USBホストシールドに無線ゲームパッドが繋がりました。
今回も難航しました。
前の記事でArduino Unoに載せたUSBホストシールドに有線タイプのゲームパッドを繋げてデータをン受信できるようになったと書きました。
次なるステップは無線タイプのゲームパッドをUSBホストシールドに繋げてデータを受信できるようにすることです。
ゲームパッドには色々な種類があり、USBホストシールとのライブラリーには色々なタイプのBluetooth対応のゲームパッド用のコードが準備されています。
普通に考えればPS3やPS4用のBluetoothゲームパッドを準備すれば何の問題もないところです。
でも僕はPS3やPS4を持っていません。
唯一持っている無線タイプのゲームパッドは、以前、Jetracer Proを買ったときに付いていたもので、今回はそれを使おうと思います。
でも、このゲームパッド、本体にメーカ名も無ければ型式も書いてありません。
唯一付いているシールは、Jetracer Proの発売元であるWaveshareの名前だけが書いてあるシールのみです。
Bluetoothでの接続だとは思うのですが、ゲームパッドの電源を入れてパソコンで見てもBluetoothの接続先候補として表示されません。
一体どうやって使えばいいんだろう、というところからスタートです。
PS3互換という所から入ってハマってしまいました。
ゲームパッドにはPS3互換機が多いので多分これもそうなんじゃないかなという所から入りました。
結構いい加減な入り方です。
USBホストシールドにゲームパッドに付いていた専用のドングルを付けて電源ON
ゲームパッドの方は電源を入れると早速ペアリングできたようで下の写真のように赤いLEDが一つ付きました。
ちなみにペアリングが出来ない状態では、全てのLEDが赤く点滅します。
そして、Arduino UnoにUSB Host Shield Library2.0の中からPS3BT.inoをインストールして走らせました。
そうするとArduino IDEのシリアルモニタには
PS3 Bluetooth Library Started
と表示されました。
おお、やっぱりPS3で良かったんだと思ってゲームパッドを色々いじりましたが応答なし。
色々やってもダメで、困り果ててWindowsパソコンにゲームパッド専用ドングルを挿してUSBデバイスとして調べてみると以下のような画面になっており、やっぱりPS3でいいんじゃないかと更に困惑してしまいました。
上の段の右から3つ目が専用ドングルです。
PC/PS3/AndroidとなっておりPS3で使えるとなっています。
このPS3で使えるということとPS3用ゲームパッド互換は全く意味が違っていることに、この時は気づきませんでした。
ネットを調べまくるうちにゲームパッドの情報をオンラインで調べてくれるサイトを見つけ、そこで調べた結果、僕が持っているゲームパッドは、メーカがShanwanというところのものだということが判りました。
Vendor IDが2563でProduct IDが0575のShanwanPs3PcGamepadとなっていました。
ちなみにVendor IDとProduct IDのリストもありましたのでリンクを添付しておきます。
A list of vendor and product IDs for known USB and Bluetooth gamepad devices · GitHub
Vendor IDとProduct IDが判ったまではいいのですが、そこから前に進めません。
悩んで悩んでネットを調べていると下の記事を見つけました。
気になった記載がコレ。
USBホストシールドに専用のUSB無線レシーバーを使っているというものです。
これで使えたという記事です。
光が見えてきました。
この記事には、専用レシーバーの情報を調べるためのツールも載っていました。
それがコレ。
infinitegra.co.jp早速ダウンロードして調べてみました。
その結果、僕のゲームパッドは上の記事にあるゲームパッドのF710と同じHIDデバイスとして定義されているものでした。
調べた結果がコレです。
ShanWan PC/PS3/Android _HIDという記載が見えます。
より詳しく情報を見ていったものがコレです。
HIDとはヒューマンインタフェースデバイスのことで概要は以下の記事にありました。
そういえばUSB Host Shield Library2.0のライブラリー群の中にHIDフォルダーがありました。
記事によるとHIDフォルダーの中のUSBHIDJoystickが使えそうな感じでした。
DirectInputモードで使えば使えるようなことが書いてあります。
DirectInputモードってなんだ?と思って調べるとモードの切り替え方が書いてありました。
でも、僕のゲームパッドではDirectInputモードのLED配置にはなりませんでした。
まあいいか、と思い、兎に角繋いでみようと、Arduino UnoにUSBHIDJoystick.inoをインストールして動かしてみました。
するとArduino IDEのシリアルモニタに
Start
の表示は出ましたが、ゲームパッドを動かしても何も変化せず。
これもダメか、とは思いましたが、ひょっとしてと思い、ゲームパッドのHOMEボタンを長押しして赤いLEDが2個つくようにしました。
そしてゲームパッドを動かしてみると、なんとシリアルモニタにゲームパッドからの情報が表示され始めました。
それがコレ。
やっと動きました。
いよいよ残りの作業は、Zumo Robotへの搭載です。
今日はココまで。
では、また。
(参考資料)
Jetracer Pro