「Joy-Con」のボタン入力をRaspberry Piで取得しよう
実は、「Joy-Con」をパソコンに認識させるのはとても簡単だ。普通のBluetoothのゲームパッドと同じように、ペアリングするだけで扱えるようになるのだ。
あとはWindowsでもMacでも、「Joy-Con(L)」のような表示が出てきたらペアリングしてやればいい。これでSteamなどのゲームをプレイすることができる。
しかし、今回はせっかくなので、「Raspberry Pi」というものにつないでみよう。簡単にいうと、手のひらサイズの小さなパソコンだ。「Raspbian」というLinuxのOSが動いている。
しかも最新の「Raspberry Pi3」にはBluetoothが内蔵されているので、すぐに「Joy-Con」をペアリングできる。これで5000円くらいなので、いい時代になりましたね……。
まずはペアリングしてみよう。「Joy-Con」のボタンを長押ししてみる。
すると、ペアリング可能なデバイスに「Joy-Con」が出てくる。ペアリングしよう。
つながったら、ボタン入力を取得するプログラムを書こう。
「Python」というプログラミング言語と、「pygame」というライブラリを使う。これを使うことで、ゲームパッドの入力が簡単に取得できるのだ。「raspberry pi pygame 入力 取得」などで検索すると、この組み合わせで書かれたプログラムがヒットする。先人の知恵を積極的にお借りしよう。
プログラムを動かすとこんな感じ。「Joy-Con」のボタンを押すと画面が反応している。ちなみに、そのサイト(Pythonでゲームパッドを操作して、ラズパイを操作しよう。挑戦編 | Divide et impera)の記事を元に僕が書いたコードはこれ。
長々と書いているように見えるが、実際にデータ取得に関係してくるところは11、14、17行目だけだ。そう思うと、けっこう簡単そうに見えてこないだろうか? 17行目で、実際のボタン入力を画面に表示するようにしているので、表示された値とボタンが対応付けられるはずだ。もちろん、同時押しも読み取ることができる。
ちなみに、ジャイロセンサーによる「Joy-Con」の傾きを取得するというのは(今のところは)できない。世のガジェット改造好きがこぞって解析しているはずなので、情報が出てくるのを待ちましょう。
「Joy-Con」の入力でサーボモーターを動かそう
これでボタン入力を取ることができたので、次はサーボモーターを動かしたい。
「Raspberry Pi3」であれば、「pigpio」というライブラリがすでにインストールされているので、これを使うのが簡単だ。
やり方は、例によって「pigpio サーボモーター」のように検索すると出てくるはずだ。
つなぐ必要があるのは「5V」、「GND」、「PWM」と書かれたピンだ。どこがどのピンかは、Raspberry Pi GPIO Pinoutというサイトを見ておくといいでしょう。
本当は、サーボモーターの電源は「Raspberry Pi」からではなく、電池など外部のものを使用した方がいい。ただ、とりあえず動かしたい! という場合は直接電源を取ってしまってもいいでしょう。
「pigpio」でモーターを制御するには、事前にシェルで下記のコマンドを実行しておく必要がある。この辺りは馴染みがない人にはちょっと難しいかもしれないが、どうにか調べてチャレンジしてみてほしい。けっこう簡単です。
サンプルコードはこちら。「Joy-Con」の入力を読み取ったときよりも、さらに簡単だ。
2つ目の数字を500〜2500くらいの値にすると、それに合わせてサーボモーターが動く。この上限と下限については、モーターに応じて変わるので、まずは1500くらいにしておいて調整していく。そうすると、“いきなり限度を越えて動かして壊してしまう”ということにならないのでオススメです。
ここまでで、前述した自動での攻防が実現できる。
先ほどのボタン入力のプログラムと組み合わせて、「Joy-Con」のボタンが押されたらサーボモーターを動かすようにしてみよう。
Aボタンで叩く、ZRボタンで戻すようにしてみた。
「Joy-Con」で『ポカポンゲーム』を操ることができた!
破壊されたサーボモーターが脳裏をよぎる。ちゃんと動いたことの感動もひとしおである。
ここまでできたら、いよいよ実戦だ。掴み取るぞ白刃を。