Nintendo Switch をブラウザから操作できるようにする
どうも、ラルフです。
ポケモンの厳選中、逃すを毎回入力するのが面倒なのでどうにかできないかということで色々作りました。
あれもこれもできるようにと頑張ってたら仕舞っておくのがもったいなくなったので公開します。ベースのアイデアは NintendoSwitchをPCから操作する - おいら屋ファクトリー からになります。
※ マクロ機能は用法用量を守りましょう。何か問題が起きても責任は取れません。
概要
ソースコード類はこちらにあります。
こちらの動画をご覧ください。
必要なもの
ハードウェア側
- マイコン(Pro Micro)(ATmega32U4っていうのが搭載されていればいいらしいけど詳しくはわからない)
- 自分は Pro micro スイッチサイエンス版 (通称;モゲないMicro)を購入した
- USB-シリアル変換モジュール
- 自分は FT234X+ADuM121N使用絶縁USBシリアル変換モジュール を購入した
- 参考元のブログでは同じチップの もっと小型の方 を使っていたが、後述するようにユニバーサル基板に乗せるのに足が欲しかったのでUSB端子側にサポートの足があるこれにした
- ワイヤーとか
- とりあえずつなげるだけなら、ブレッドボードとジャンパワイヤーがあればなんとかなる
- なんかいい感じにしたいなら後半参照
- USB-Aオス – USB microケーブル x 2
- 家に落ちているものでいいですが、充電専用のやつではないことをきちんと確かめましょう(1敗)
Webアプリ側
- なるべく最新のJDK
ハードウェアの作り方
物理的なビルド
- Pro MicroのTxとUSBシリアルモジュールのRx、Pro MicroのRxとUSBシリアルモジュールのTx をそれぞれつなげる
- きちんとクロスさせましょう
- Pro MicroのGNDと、USBシリアルモジュールのGNDをつなげる
- FT234X+ADuM121N使用絶縁USBシリアル変換モジュール の場合は、Pro MicroのVCCとUSBシリアルモジュールのVDDをつなげる
- もっと小型の方の FT234X 超小型USBシリアル変換モジュール を使っている場合、この端子は5V供給端子になるので繋げてはいけない
- 自分が使用したのは、回路を物理的に絶縁させている絶縁モジュールというのが使われており、それの動作のためにVCCの入力が必要
ブレッドボード上であればこんな感じにつなげればいいでしょう
リセットスイッチはGNDとRSTをピンセットなりで触ってもいいですが、タクトスイッチがあったほうが便利です。
ファームウェアの書き込み
このような感じでファームウェアをビルド・書き込みします。
|
|
この段階で、WindowsであればPCとつなぐと「PRO CONTROLLER」と出て、ゲームパットデバイスとして認識されるようになります。
サーバーの実行とデバイスの接続
以下の手順でサーバーを起動し、サーバーが起動しているPCにデバイスのシリアル変換モジュールの方のUSBを挿します。
|
|
デフォルトの設定だと、https://localhost:8080
でアクセスできるようになります。
アクセスするとこんな感じの画面が表示されると思います。
操作方法
Control パネル
動作などの設定をおこなうパネルです。
- Serial Port
- データを送信する先のシリアルポートを選択します。複数ある場合はデバイスマネージャなり実際に送るなりで正解を見つけ出してください。
- Direct Send
- Onの場合、右側のGamepadパネル上で何かしらの入力があった場合に即座にデバイス側へ送信します。
- Hold Gamepad Input
- Onの場合、右側のGamepadパネルの操作がトグル式になります。ボタンの場合はクリックごとにOn/Offが入れ替わり、スティックはドラッグアンドドロップで離した場所に固定されます。
- Offの場合、ボタンはマウスをクリックしている間だけOnになり、スティックはドラッグアンドドロップ終了時に中央にカーソルが戻ります(実物のコントローラーのような感じになります)
Gamepad パネル
見ての通り、コントローラーの入力をおこなえる画面です。
コントローラーの下にテキストボックスがありますが、この部分に現在のコントローラーの入力値が表示されます。
この値は、後述のマクロで使用することができるフォーマットです。
HoldをOnにした状態でこのテキストをコピーし、マクロを組み立てる みたいなケースを想定しています。
Macro パネル
マクロを記述する事ができ、右上の「START MACRO」で実行を開始します。
1行に1コマンドを記述することができ、コマンドは以下のようなものが使えます。
- コントローラーの状態の変更
- 入力値をセミコロンで区切った形式
- ボタンは「A,B,X,Y,L,R,ZL,ZR,LCLICK,RCLICK,START,SELECT,HOME,CAPTURE」
- 十字キーは「HAT@{0-8}」
- 8が何も選択されていない状態、0が12時の方向で、45度ずつ時計回りに数字が増えていく
- スティックは 「(L|R)STICK@{角度:0~360},{傾き:0~1}」
- 角度は3時の方向が0、反時計回りに増える(単位円と同じ感じ)。傾きは0が倒していない状態、1が完全に倒した状態。
- 入力例
- 「A;HAT@0」:Aを押しながら十字上を押している
- 「LSTICK@180,0.5」:左スティックを左側に半分傾けた状態
- 待機
- 指定されたミリ秒の間待機する(直前の入力値を維持する)
- 「wait {ミリ秒}」
- 入力例
- 「wait 1000」:1秒待機
- ラベル
- 後述のジャンプでのジャンプ先に指定できる
- 「:{ラベル名}」
- 入力例
- 「:head」:headという名前のラベルを作る
- ジャンプ
- 特定の名前のラベルにジャンプする
- 「goto {ラベル名}」
- 「goto head」:headという名前のラベルの位置にジャンプする
マクロの記述例
|
|
|
|
デバイスをいい感じに作る
ここから先は、ハードウェアの方をブレッドボード上ではなくいい感じに仕上げた過程の防備録です。
こんな感じに仕上げます。
なお、これを作るのがはんだこて人生2度目ぐらいの電子工作に関してはド素人の状態ではじめました。
ブレッドボードそのままではなく、何かしらのケースに入れたい。けどアクリルを自分で加工する力はないというわけで、既製品のものを使うことにしました。ケースとユニバーサル基板が手軽に入手できるサイズで、一番小さなものがRaspberry Pi Zero向けのものだったので、以下の2点をベースに配置を決めていきます。
- Raspberry Pi Zero シンプルアクリルベース http://prod.kyohritsu.com/KP-SB608.html
- オンラインで購入
- Raspberry Pi Zero/Zero W プロトタイプ基板 https://www.switch-science.com/catalog/3946/
- Raspberry Pi Zero 向けのユニバーサル基板はいろいろなところから出ていますが、狭くなっている部分のピン間隔が違っていたり 、1列消えていたり するので注意が必要です。
- この製品も、一部のピンが別のピンにすでにつながっているので、配線時にはその部分の注意が必要です。
- 千石電商で購入
このユニバーサル基板だと、Pro MicroとUSBシリアルアダプターがそれぞれいい感じの位置に配置できます。
配線はこのような感じにしました。
画像下側の4列が、1-3行目、2-4行目とそれぞれ結線されているので、1-2列目には何も置かないようにする必要があります。
ユニバーサル基板への実装で使用したのはこれらのパーツです。
- Pro micro スイッチサイエンス版 https://www.switch-science.com/catalog/3914/
- 千石電商で購入
- FT234X+ADuM121N使用絶縁USBシリアル変換モジュール http://akizukidenshi.com/catalog/g/gK-14652/
- 秋月電子で購入
- ピンヘッダ http://akizukidenshi.com/catalog/g/gC-00167/
- 細ピンヘッダだと、USBシリアルアダプターのUSB端子より低くなってしまうが、通常のピンヘッダだとちょうどいい感じにユニバーサル基板と挟み込む感じにしてくれる。
- 秋月電子で購入
- タクトスイッチ http://akizukidenshi.com/catalog/g/gP-01282/
- バラ売りもある
- 秋月電子で購入
- はんだメッキ線 http://akizukidenshi.com/catalog/g/gP-13310/
- よく使われるのはスズメッキ線らしいが、最近はこっちの方がはんだ付けしやすいと話題らしい?
- 秋月電子で購入
最後に、基板とケースを固定するためのネジ類も別途いいサイズのを用意しました。ネジ径は、Raspberry Pi向けの基板とケースなので、m2.6サイズのものになります。
- M2.6 ネジ 5mm https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=3A54-6BJ5
- 表側で使用
- 千石電商で購入
- M2.6 ネジ 7mm (オンラインでは見つからず)
- 裏側で使用
- 千石電商で購入
- M2.6 中空スペーサー 2mm https://www.monotaro.com/p/1114/0072/
- 裏側の配線側とケースの間のスペーサー
- M2.6 スペーサー 6mm https://www.monotaro.com/p/1113/5118/
- 表側とケースの間のスペーサー
- 試してはいないが、5.5mmのだとProMicroのUSB端子の上面にちょうど乗っかるぐらいのいい位置に来ると思う
なんとなくBoothとかで売っている感じのいい感じにすることができます。
試してはいませんが、ちょうどPro Microの内側にUSBシリアルアダプターが隠れられるサイズのため、ユニバーサル基板の両面にそれぞれのパーツを配置するようにすればもっと小型化できるようにはなると思いますが、ケースが自作になりそうだったので諦めました。
作成者 Ralph
最終更新時刻 2020-01-26