Raspberry Piに安価なBluetoothのゲームコントローラを接続


2019年 03月 19日

Raspberry Piに色々なものが接続できることが分かってきた。

単機能のセンサーは、GPIOのおかげで、非常に簡単に接続できる。
それでも、Raspberry Pi はアナログを直接扱えないので、そういう場合には ADコンバータが必要になるが、実例が本、雑誌、ネットに多数あるので困ることはない。

ということで、もうすこし面倒なものを接続してみようと思ってしまった。

さて、週末に、ちょっと秋葉原に行ってきて、昔良く行っていた電気街などを回ってきた。つまり、ガード下の部品やとか、千石、秋月などのパーツ屋である。
もうちょっと離れたとこりに、ジャンク品を売っている店が昔は多数あったのだが、今はほとんど無くなったようだ

そういうことで、ちょっとふらふらしていたら、こんなものを見つけてしまった。

DSCN4074-450.JPG

これは、bluetoothのゲームコントローラの非常に小さく、そして安いやつである。

よく本や雑誌に取り上げられているのは、PS3のコントローラ「DUALSHOCK3」であるが、そういうのは中古でも結構する。

600円で売っていたので、つい購入してしまったが、実はアマゾンで同じものが333円で売られているのを発見し、がっかりしているところである。

写真はサイズが分かるように、5mm方眼紙の上に置いて撮影した。

下の中国語は、A4よりやや小さい紙1枚だけのマニュアルの折りたたんだ状態の表紙部分である。

IoTの世界の標準語は中国語なのだが、一応裏面は英語になっていたものの、そんな詳しい説明はない。

入手したものの、ちゃんと認識できるか不安である。
記事になっているようなゲームコントローラなら、記事を参考にプログラムを作れば良いだけであるが、こういう品物を買うと苦労もいっしょに買ってしまうことになる。

そうはいっても、bluetooth関連の記事はいろいろあって、ゲームコントローラを繋ぐのは何とかなった。

すると、 操作した時に cat /dev/input/event3 に取得データを見ることができた。
といっても、文字化けしたデータが、ボタンを押す毎に見えたので、ほぼ成功である。

文字データのままでは何が起きているのかわからないので、16進数表示にしてみた。

pi@raspberrypi:~ $ od -tx1 /dev/input/event3
0000000 97 4e 8f 5c b6 1c 04 00 04 00 04 00 e9 00 0c 00
0000020 97 4e 8f 5c b6 1c 04 00 01 00 73 00 01 00 00 00
0000040 97 4e 8f 5c b6 1c 04 00 00 00 00 00 00 00 00 00
0000060 97 4e 8f 5c 99 c0 05 00 04 00 04 00 e9 00 0c 00
0000100 97 4e 8f 5c 99 c0 05 00 01 00 73 00 00 00 00 00
0000120 97 4e 8f 5c 99 c0 05 00 00 00 00 00 00 00 00 00

0000140 9a 4e 8f 5c 81 a5 04 00 04 00 04 00 24 02 0c 00
0000160 9a 4e 8f 5c 81 a5 04 00 01 00 9e 00 01 00 00 00
0000200 9a 4e 8f 5c 81 a5 04 00 00 00 00 00 00 00 00 00
0000220 9a 4e 8f 5c 1d ab 06 00 04 00 04 00 24 02 0c 00
0000240 9a 4e 8f 5c 1d ab 06 00 01 00 9e 00 00 00 00 00
0000260 9a 4e 8f 5c 1d ab 06 00 00 00 00 00 00 00 00 00

0000300 9c 4e 8f 5c 2d c6 00 00 04 00 04 00 28 00 07 00
0000320 9c 4e 8f 5c 2d c6 00 00 01 00 1c 00 01 00 00 00
0000340 9c 4e 8f 5c 2d c6 00 00 00 00 00 00 00 00 00 00
0000360 9c 4e 8f 5c ac ab 01 00 04 00 04 00 28 00 07 00
0000400 9c 4e 8f 5c ac ab 01 00 01 00 1c 00 00 00 00 00
0000420 9c 4e 8f 5c ac ab 01 00 00 00 00 00 00 00 00 00

0000440 9e 4e 8f 5c dd b2 07 00 04 00 04 00 ea 00 0c 00
0000460 9e 4e 8f 5c dd b2 07 00 01 00 72 00 01 00 00 00
0000500 9e 4e 8f 5c dd b2 07 00 00 00 00 00 00 00 00 00
0000520 9e 4e 8f 5c 6a b8 09 00 04 00 04 00 ea 00 0c 00
0000540 9e 4e 8f 5c 6a b8 09 00 01 00 72 00 00 00 00 00
0000560 9e 4e 8f 5c 6a b8 09 00 00 00 00 00 00 00 00 00

16バイト x 6行になっている(空白行はわかりやすたのために挿入)が、それぞれ、上、右、下、左ボタンに対応する。

ずっと押し続けるとちょっと違う出方になるのだが、とりあえず細かいことは無視して、ボタンの識別と、ON/OFFの認識はできそうだ。ということで、ちょっとPythonでプログラムしてみるかな。