C.H. Random

【友好祭23】コントローラーの入力をSwitchとPCに同時に送ってみた

with Arduino Leonardo

【友好祭23】コントローラーの入力をSwitchとPCに同時に送ってみた
目次
  1. こんにちは
  2. 作ったもの
  3. 使ったもの
  4. やったこと
  5. プログラムを書く
  6. 接続
  7. Switch を騙す
  8. 実行
  9. おわり

こんにちは


 konoです。今回は、コントローラーからの入力を Nintendo Switch とパソコンに同時に送ることができたので、その解説をするよ~、という記事です。タイトル通りですね。頑張りました。白鷺祭の時には「迫りくるマッチョから逃げるゲームを作りたい」と言っていましたが、まあ......人の興味というものは移ろいやすいものでして、今は他の物を作ってみたいお年頃です。


作ったもの


 文字だけだと何を作ったのかよくわからないと思うので、早速ですが見てもらいます。こちらです。


 はい。右のモニターにコントローラーのイラストが映っていますね。パソコンがコントローラーからの入力を認識して、入力をイラストに反映させています。これが今回のすごいところです。Switchのコントローラーは普通、2つのデバイスに同時に接続することはできません。そこをどうにかして、Switch とパソコンに同時に入力データを送れるようにしています。


使ったもの


・Nintendo Switch
・パソコン
・パチモンの Pro コントローラー
・Arduino Leonardo
・USB - TTLコンバーター

 よくわからない単語が出てきました。なんかすごそうです。Arduinoというのは、いわゆる「マイクロコントローラーボード」というやつです。小さいコンピューターのようなもので、プログラムを書いてこれに組み込むことで、電気をつけたり消したり、モーターを動かしたり、センサーから情報を読み取ったり、そんな感じのタスクを自動でこなしてくれるようにできるやつです。USB - TTL コンバーターというのはパソコンとマイクロコントローラー(Arduino)とを接続できる便利なやつです。
 今回 Arduino はこれを使い、USB - TTL コンバーターはこれを使っています。Arduino は Arduino Leonardo という種類のものを使っていて、これを使うことで今回の実装が比較的楽になります。




やったこと

プログラムを書く


 今回、3つのプログラムを書きました。

・to_arduino.py
 コントローラーの入力をパソコンで受け取り、それをいい感じに加工してから Arduino へ送るためのプログラム。コントローラーからの入力を受け取る部分は Pygame というライブラリを使い、Arduino に送るために serial というライブラリを使っています。

・to_switch.ino
 パソコンからデータを受け取り、それを基に Switch へ命令を送るプログラムで、Arduino に組み込みます。switchに命令する部分は、celclow さんの SwitchControlLibrary を使わせていただいてます。C++ のことが何もわからなくてものすごく冗長なコードになってしまいました。

・visualize.py
 to_arduino.py と同様にコントローラーから入力を受け取り、画面に映し出したコントローラーの画像に入力を反映させています。コントローラーの絵は自作です。なかなか良い出来でしょう。できるだけプログラムを効率化して、30 fps 以上でイラストを更新できるようになっています。なんとかして 60fps 以上にしたい...

 コントローラーの入力をSwitchとパソコンに同時に送ると言っていましたが、実は入力は
コントローラー → パソコン → Arduino → Switch
という経路を通っています。同時とは言えないかもですが、別に操作遅延も感じないので問題はないでしょう!
 今回の「コントローラーの入力をSwitchとパソコンに同時に送る」という目的上、visualize.py は実は要らなかったりします。でも、データがちゃんとパソコンを通ってるぞ!感を出すためにはあった方がいいのです。自己満プログラムです。


接続


 各デバイスは以下のように繋げました。


 ジャンパーワイヤー(ジャンパー線)というのは、電子工作でよく使われる細い電線です。



Switch を騙す


 接続して、書いたプログラムを走らせました~、ではありません。その前に少しすることがあります。Arduino は普通、Switch にコントローラーとして認識されないのです。そこで、Arduino にあらかじめ設定されているコントローラー ID のようなものを書き換えることで、これを Switch 用のコントローラーとして認識させます。Arduino を Switch のコントローラーに偽造したい場合、Arduino はポッ拳のコントローラーに見せかけます。

Switch「何者だ!」
???「ポッ拳DX専門コントローラーです!」
Switch「ヨシ!」

といった具合です。かわいいですね。




実行


 プログラムを実行します。上で接続方法を説明しましたが、Switch と Arduino の接続は PC で visualize.py と to_Arduino.py を実行してからでないといけません。そうすることで、上の動画のように良い感じに動作します。




おわり


 これに取り組み始めたときは Python 以外何も知識が無い状態だったので、とりあえずキリの良いところまで作ることができて大安心しています。パソコンにあまり詳しくない人から見たら、なんかすごそうと思えるものを作れたんじゃないでしょうか。コントローラーのイラスト素材を自作したりだとか、どんなライブラリを使えば実装できそうなのか調べたりとか、どんなふうに線を繋げれば動くのか試行錯誤したりだとか、よく頑張ったと思います。自分を褒めてやりたいところです。
 最後に少し注意事項です。 Nintendo Switch利用規約 には、「本ゲーム機本体、周辺機器、本ソフトウェア等を不正に改造しないこと、および任天堂の許諾を受けていない本ゲーム機の周辺機器およびソフトウェア等を使用しないこと」という記述があります。今回、ゲーム機本体や周辺機器の改造は行っていませんが、「任天堂の許諾を受けていない本ゲーム機の周辺機器」を使用しないこと、という事項に引っかかる可能性があります。真似をする場合は自己責任でよろしくお願いします。
 それでは、ここまで読んでいただき、ありがとうございました!