🔧

マクロコンを自作してNintendo Switchをブラウザから操作する【導入編】

2021/10/12に公開

🚀 はじめに

【2021/11/29追記】うまくいかない時はを追加
【2021/11/12追記】GND接続について追記
【2021/10/14追記】Windowsでのドライバ設定を追記

みなさん、Nintendo Switchのゲームライフを楽しんでいますか?

本記事では、人類に無限の快楽を与えてくれるNintendo Switchをブラウザから動かすツールPhantomHandの導入手順を説明します。

本ツールを導入すれば、RPGのレベル上げ、ポケモンの孵化作業、スマブラの2Pコントローラーの操作など、あらゆるSwitchのゲームアクションを自動化できます。

「Arduino」や「マイコン」などの聞き慣れない単語が出てきますが、何も考えず説明通りに上から実行すればPCに詳しくない人でも問題なく導入できるはずです。

💡 機能

C0010_5

  • ブラウザの画面でSwitchを操作
  • 一連の操作をコマンドとして保存(マクロ機能)
  • 保存したコマンドを呼び出して再現(マクロ再生機能)
  • コマンドをTwitterでフォロワーに共有
    などの機能をGoogle Cromeで実行できます。

💻 動作環境

  • Google Chrome (Windows / macOS / Linux)
    • スマホ・タブレットは非対応です(Androidなら動くかもしれませんがテストしてません)
  • Nintendo Switch (v13.0)

📦 必要なデバイス

以下のデバイスが必要です。

  • Atmega32u4搭載マイコン
  • シリアル通信モジュール
  • ジャンパワイヤ オスーメス

Atmega32u4搭載マイコン(いずれか1個)

Switchに接続するデバイスです。コントローラーの代わりの役割を果たします。予算にこだわりがなければ純正がオススメです。

Arduino Leonard 純正(3000円前後) + MircoUSB ケーブル

純正品にはケーブルが付属しないみたいです。
お手持ちのMicroUSBケーブルを使う場合は、充電専用ではなくデータ転送用であることを確認してください。(充電専用だと動きません)
https://www.amazon.co.jp/gp/product/B008A36R2Y/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1

HiLetgo Leonardo R3 Pro(1000円前後)

動作確認してませんが、多分これでも動きます。
こっちにはケーブルが付いてるみたいです。
https://www.amazon.co.jp/HiLetgo®-Leonardo-ATmega32U4-Arduinoと互換-ケーブル付き/dp/B013QV2BB0

シリアル通信モジュール(いずれか1個)

上記のマイコンとPCを通信させるためのモジュールです。
無線接続は安定しないので、できるだけ有線モジュールを購入してください。

FT232(有線モジュール) 【推奨!】

有線接続なので、PCとSwitchが物理的に近くにある必要があります。無線に比べて操作感は良好です。PCとSwitchの定位置が近くなのであれば、有線接続がおすすめです。
*売り切れていることがあるようですが、FT232と検索して出てくるものであればだいたい動くと思います。
https://www.amazon.co.jp/gp/product/B085NM1M48/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1

CC2640R2F(無線モジュール)

無線接続なので、PCとSwitchが物理的に離れていても使えますが、一方で有線に比べて微妙に遅延があり動作も不安定なので推奨しません。スマブラの操作速度には全く追いつけません。
https://www.amazon.co.jp/gp/product/B07N1FWQYP/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1

ジャンパワイヤ オスーメス (2本または4本)

マイコンと通信モジュールを電気で物理的に繋げるための導線です。はんだ付けなどは不要で、それぞれにプスッと刺すだけでOKです。
無線の場合は4本、有線の場合は2本あれば十分なのですが、Amazonにはセット売りしかないようです。
https://www.amazon.co.jp/dp/B072N2WR5N/?coliid=IF0SPBXJA3TB3&colid=3AVMKRBQHUM2K&psc=1&ref_=lv_ov_lig_dp_it

💿 マイコンにプログラムを書き込む

工業出荷状態のマイコンにはプログラムが書き込まれていませんので、PCソフト「Arduino IDE」を使ってプログラムを書き込む必要があります。

まずは、Arduino IDEを公式サイトからインストールしてください。
https://www.arduino.cc/en/software

Arduino IDEのインストール

selectOS
自分のOSに合ったバージョンをダウンロードします。(推奨: 1.8.X)

download
macOSの場合はアプリケーションフォルダに移動させておきましょう。
app
アプリを起動すると、このような画面になります。
launch

プログラムのダウンロード

続いてマイコンに書き込むプログラムをダウンロードします。
https://github.com/noov-smash/PhantomHand-Arduino
上記のページにアクセスして、Download Zipをクリックします。
code

Arduino IDEの設定画面を開きます
performance
この画面の、スケッチブックの保存場所をメモします。
path
Finderまたはエクスプローラーでメモした場所まで移動します。多くの場合は以下のパスになっていると思います。
macOS: /Users/Documents/{YourUserName}/Arduino
Windows: C:\Users\{YourUserName}\Documents\Arduino\
arduinofolder
先程ダウンロードしたzipを解凍し、スケッチブックの保存場所に記されていたArduinoフォルダ中に移動します。
Librariesフォルダが既にある場合は、中身だけ移動してください。
move

ここまで完了したら、一度Arduino IDEを終了させましょう。

書き込み設定

Arduinoにプログラムを書き込む準備ができました。次に、Arduinoのボード設定を行います。

あらゆるUSBデバイスには製造元を表すVendorIDと、製品を表すProductIDが割り当てられています。ArduinoのIDをそのまま使用すると、SwitchがArduinoをコントローラーとして認識しません。Arduinoに割り当てられたIDをポッ拳DXプロパッドと同じIDに書き換えると、SwitchがArduinoをコントローラーとして認識します。

以下ではその書き換え作業を行います。

macOS

アプリケーションフォルダ内のArduinoを右クリックし、パッケージの内容を表示を選択します。
arduino
以下のフォルダにあるboards.txtというファイルをテキストエディタ等で開きます。
/Contents/Java/hardware/arduino/avr/
boardspath

Windows

以下のフォルダにあるboards.txtというファイルをテキストエディタ等で開きます。
C:\Users\<YourUserName>\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.13
1.8.13の部分は、インストールしたArduino IDEのバージョンが入ります

boards.txtの編集 (macOS/Windows)

以下の4箇所の値を書き換えて保存します。変更箇所を間違えないように気をつけてください。

key 変更前の値 変更後の値
285 leonardo.vid.1 0x2341 => 0x0f0d
286 leonardo.pid.1 0x8036 => 0x0092
311 leonardo.build.vid 0x2341 => 0x0f0d
312 leonardo.build.pid 0x8036 => 0x0092

boards.txt

プログラムを書き込む

準備が整ったので、Arduinoにプログラムを書き込みましょう。
ArduinoをUSBでPCに接続します。正常に接続できると、LEDが点灯します。
arduino

先程ファイルを移動したArduinoフォルダに戻ります。
入手したシリアル通信モジュールが FT232(有線モジュール) の場合はFT232CC2640R2F(無線モジュール) の場合はCC2640R2Fの中身を開きます。
folder
file
ツール→ボードを開き、Arduino Leonardoを選択します。
baord
ツール→シリアルポートを開き、usbという文字列が含まれたものを選択します。
*多くの場合はusbが含まれるポートは1つしかないと思いますが、複数あった場合は上から順に選択して以下の工程が成功するまで試してください。
port
左上のチェックボタンをクリックして、プログラムをコンパイルします。
画面下部に「コンパイルが完了しました」と表示されればOKです。
compile
最後に、矢印ボタンをクリックして、スケッチの書き込みを行います。
画面下部に「ボードへの書き込みが完了しました」と表示されれば書き込み完了です!
upload

ボード情報の確認

最後に、先ほど書き換えたVIDとPIDが反映されているかどうかを確認します。
Arduino IDE > ツール > 「ボード情報」 で確認できます。
以下のように、書き換えたIDが表示されていればOKです!お疲れ様でした🍺

boards

*書き換わらなかった場合は、うまくいかない時はを確認してください。

🔌 デバイスの接続

FT232(有線モジュール) の場合

ジャンパワイヤを使ってArduinoとFT232を接続します。RXピンとTXピンが交差するようにワイヤーを刺します。

Arduino FT232
TX1 <=> RX
RX1 <=> TX
GND <=> GND

小さくて見づらいですが、ピンの近くに名称が書いてあります。
ft232
ジャンパワイヤの色は好きなものを使ってください。
rxtx
ArduinoをSwitchのドックに接続します。
arduino-switch
FT232はPCに接続します。
ft232-pc
最終的に、以下のように全体が接続されたことを確認してください。
*写真にはありませんが、GNDとGNDも接続してください。
sketch

CC2640R2F(無線モジュール) の場合

Arduino CC2640R2F
TX1 <=> RX
RX1 <=> TX
5V <=> VCC
GND <=> GND

PC側には何も接続する必要はありません。

🌎 Google Chromeの設定

GoogleChromeでArduinoと通信するために、設定を有効にします。
以下を一つひとつアドレスバーに入力し、黄色くハイライトされた項目をEnabledに設定してください。
chrome://flags/#enable-javascript-harmony
chrome://flags/#enable-experimental-web-platform-features

CC2640R2F(無線モジュール) を使用する場合は以下の項目もEnabledに設定してください。
chrome://flags/#enable-web-bluetooth-new-permissions-backend

chrome

🪟 Windowsのドライバ設定

どうやらChromeのWebUSB APIは、WindowsではOSでシステムドライバが用意されるデバイス(FT232)が使用ができないようです。
GoogleChromeでchrome://flags/#new-usb-backendを開いて、黄色くハイライトされた項目をDisabledにすれば解決することがあるようですが、未確認です。

私の手元のWindows10においては、(Chromeの設定はせずに)以下の設定を行うことで解決できました。

  • Zadigをインストール
  • 以下の設定でReplace Driverをする
    windows

手順やリスクについてはこちらの記事が詳しかったです。設定変更は自己責任でお願いします。
https://qiita.com/frameair/items/abcaebbd654c304a0906

🎉 準備が整いました!

これで準備は完了です!
PhantomHandの使い方を説明します。
まずはサイトにアクセスしてください。

https://phantom-hand.web.app/

紫色のボタンをクリックします
home

PhantomHandでコントロールしたいゲームソフトを選んでください。なければ適当に選んでください。(ゲームソフトの追加リクエストがあれば、DMをください🤲 )
projects
コントローラーの画面に遷移したら、左上のUSBアイコンをクリックし、Search Deviceを選択します。
*CC2640R2F(無線モジュール)を使用する場合はBluetoothアイコンをクリックします。
search
ポップアップウィンドウが表示されたら、デバイスを選択して「接続」をクリックします。
connect

ここまで完了すれば、ブラウザからSwitchを操作できるはずです。
GUIコントローラーを操作して、Switchの画面が反応するか確認しましょう!
demo

動かない場合はArduinoのリセットボタンを押してみてください。LEDの点滅が始まり、5~10秒で再起動が完了します。
それでも動かない場合は、接続に問題がある可能性が高いです。全ての接続を確認してください。
(RXピンとTXピンの接続ミスはよくあることです)
reset

📖 使い方

ここまで来れた方は説明しなくても分かると思いますが 、念のため簡単に説明します。
(*アプデで機能追加してだんだん複雑になってきました...そのうち説明を充実させます🙇‍♂️)

gui

サイドメニュー

再生するコマンドの選択や作成ができます。
将来的にはコマンドをユーザー間で共有する機能を作る予定です。

ゲームパッド

画面中央に表示されたゲームパッドは、クリックやドラッグで操作できます。デバイスを接続していれば、操作はSwitchに反映されます。
PCにプロコンを接続していた場合、このゲームパッドと連動します。
gamepad

マクロ

右上のコントロールボタンで、マクロコマンドの作成再生リピートシェアを行えます。

シェア

作成したコマンドの保存機能は現在一般に開放していませんが、代わりにURLを通じてコマンドをシェアできます。シェアボタンを押すと、URLが発行されます。そのURLにアクセスすれば、いつでも作成したコマンドをワンクリックで再生できます。
share

✅ さいごに

PhantomHandの導入方法、マクロコンの自作方法については以上です。

より技術的な内容を知りたい方はNintendo Switchをブラウザから操作する【技術編】をご覧ください。

🤔 うまくいかない時は(トラブルシューティング)

以前は動いていたのに、動かなくなった

たまにスイッチがArduinoを認識しなくなるので、その時はArduinoのリセットボタンを押すか、Arduinoを接続し直してみてください

正しく接続できているはずなのに、ボタンを押しても反応しない。

以下を確認してください。

ブラウザでボタンを押したときに、FT232のLEDが点灯するか?

点灯する

PC→FT232までは正常に接続できている可能性が高いです。
以下を確認してください。

  • ArduinoとSwitchを繋ぐケーブルが充電専用のものではないか?
    • Arduinoを買ったときに付属で付いてきたケーブルを使うのが確実です
  • ArduinoとFT232の接続が正常ではない
    • RXがTX1に、TXがRX1、GNDがGNDにつながってますか?
  • Arduinoのボード情報が正常に書き換わっていない。
点灯しない

PC→FT232の接続が正常ではない可能性が高いです。
以下を確認してください。

  • PCとFT232を繋ぐケーブルが充電専用のものではないか?
    • データ転送対応のケーブルを使用してください。
  • ブラウザがGoogle Chromeではない。または、Chromeの設定が正しくない。
  • (Windowsの場合)ドライバの設定がうまく行っていない
  • ブラウザとFT232の接続が切れている
    • コントローラーの画面を表示し、左上のUSBアイコンが紫色になっているかを確認してください。なっていなければ、クリックしてSearch Deviceを行ってください。

ボード情報が書き換わらない

Arduino IDE > ツール > 「ボード情報」で確認できます。
書き換えたボード情報が正しく表示されるかどうかを確認してください。
環境によっては、Arduino IDEがシステムで参照しているboards.txtが複数存在したり、別の場所に存在する場合があるようです。その場合、手順に記載した場所のboards.txtを編集してもArduinoに反映されないことがあります。
以下に可能性としてbords.txtが存在しえる場所を記載しますので、それぞれのフォルダを探してファイルがあれば書き換えてから、再度スケッチの書き込みを行ってください。

Windows
  • C:\Program Files (x86)\Arduino\hardware\arduino\avr
  • C:\Users\ユーザー名\Documents\ArduinoData\packages\arduino\hardware\avr\1.8.1
MacOS
  • /Users/ユーザー名/Library/Arduino15/packages/arduino/hardware/avr

それでも書き換えがうまくいかない場合は、次の「設定はできているはずなのに動作しない」を試してみてください。

設定はできているはずなのに動作しない

Arduino IDEのバージョンが2.0以上である

使用しているライブラリが新しいバージョンに対応していない可能性があります。
1.8.Xを再インストールしてください。

  1. ArduinoIDE(2.0以上)をアンインストールする
  2. "Arduino"フォルダを中身ごと削除する
  3. Arduino IDE 1.8.Xをインストールする
Arduino IDEのバージョンが1.8.Xである

もしかすると、この記事を書いた後にリリースされた最新のIDEのボード設定ではうまく動かない可能性があります。
Arduinoのボード設定をダウングレードする方法がありますので、試してみてください。

  1. ツール > ボード > ボードマネージャ を開きます
  2. Arduino AVR Boardsのバージョン 1.8.3 を選んで「インストール」します
  3. インストール完了まで待ちます
  4. boards.txtの書き換えを再度行います
  5. スケッチの書き込みを再度行います
  6. ボード情報を確認します

downgrade

アプリケーションに不具合を見つけた

アプデで追加してほしい機能のアイデアがある

その他、わからないことや質問がある

お手数ですが、Twitterにて、詳細と一緒にご連絡ください。できるかぎりサポートします🉐

Discussion