はじめに
みなさんこんにちは。コロナ禍のご時世いかがお過ごしでしょうか。
Nintendo Switchをはじめとして、ゲームで遊ぶ機会は増えたのではないでしょうか。
1年半ほど前にArduinoを用いてSwitchを自動化する記事を書きました
こちらの記事を書いてからTwitter等で色々質問等受け付けておりましたが、先日同じように自動化を試みたものの色々な点が変わっていましたので、今回最新版ということで記事を改めて書くことにしました。
初期セットアップに詰まる方が多かったので、今回はファクトリーリセットを行なったPCで1から実装を行い、注意点等もまとめることにしました。
これを機に始められる方の参考になれば幸いです。
必要なもの
ハードウェア
- Arduino Leonardo または Arduino Micro
一番多かった質問が「Arduino Unoでもできますか?」です。そのままではできません。
ArduinoにはデフォルトでUSB機器として信号を送信できるチップが搭載されていません。
この2つの機種にはデフォルトでそのチップ ATmega32u4 が搭載されています。ですので必ずこのチップが搭載されたArduinoを選ぶ必要があります。
Amazonで探す際には必ずこのチップが搭載されているか確認して購入されることをお勧めします。
(似た名前にATmega328p というのがありますが異なります)
- PC (windows mac どちらでも可能)
言わずもがなですが。今回使用したのは Mac OS Big Sur 11.4 です。
- USB ケーブル (Type-A - microUSB)
PC に Arduino を接続するのに必要です
- Type-C 変換器
USBtype-AをSwitchに接続するために使用します
PC のセットアップ
Arduino IDE のインストール
まずは Arduino にプログラムを書き込むための Arduino IDE をインストールします。
ご自身の使用しているOSに合ったものをインストールしてください。
依存ライブラリのインストール
インストールが終わったら起動して、上部メニューから ツール > ライブラリを管理
と進みます。
右上に検索ボックスがありますので、そこに ArduinoSTL
と入力すると全く同じ名前のライブラリが見つかると思います。(今回の画像だと2番目)
そちらをインストールしてください。(バージョンは最新で大丈夫です)
画像のように INSTALLED となっていれば大丈夫です。
ボードマネージャのバージョン変更
先ほどインストールしたライブラリは今回使用するSwitch操作用のライブラリの依存パッケージなのですが、最新のボードマネージャだと不具合で動作しないのでバージョンを変更する必要があります。
上部メニューから ツール > ボード > ボードマネージャ
と進みます。
おそらく一番上にリストされた Arduino AVR Boards のバージョンが1.8.3かそれ以上になっていると思いますので、こちらのバージョンを 1.8.2 に変更します。
バージョンを選択から 1.8.2 を選択してインストールします。
このようにバージョンが 1.8.2 に変わっていたら大丈夫です。
Switch操作用ライブラリの追加
以下のGitHubのリポジトリを使用させていただきます。
右上の緑色の code というボタンから Download ZIP を選択してダウンロードします。
ダウンロードが終わったら、ZIPを展開すると SwitchControlLibrary-master
というフォルダになると思います。こちらをArduinoのライブラリフォルダにコピーします。
Windowsの人は
C:\Program files(x86)\Arduino\libraries
Macの人は
~/Documents/Arduino/libraries
コードを書く
実際にArduino IDEにコードを書いていきましょう。
詳しいリファレンスは先ほどのGitHubのページに詳しく書いてくださっているのでそちらを参考にしてください。
前に書いた記事ではバージョンが1系だったのですが、今回2系にアップデートされており、互換性はありません。
1系で既に書いてしまった人はダウンロードする際に1系を選択してください。
以下のコード例は全て2系で記述しています。
バージョン1系と2系の違いは
- 送信する関数が追加された
- ボタンを押す関数が統一された
主にこの2点です。Aボタンを押したい時は
SwitchControlLibrary().pressButton(Button::A);
のように記述します。また、これだけではボタンの送信は行われず
SwitchControlLibrary().sendReport();
こちらを呼び出すことで初めてキーの送信がされます。例えばAとBを同時押ししたい時には
SwitchControlLibrary().pressButton(Button::A);
SwitchControlLibrary().pressButton(Button::B);
SwitchControlLibrary().sendReport();
とすることで同時押しが可能になっています。
今回はAボタンを秒間10回連打するプログラムを書いてみます。
#include <SwitchControlLibrary.h>
void setup() {
// put your setup code here, to run once:
SwitchControlLibrary(); // 初期化
}
void loop() {
// put your main code here, to run repeatedly:
SwitchControlLibrary().pressButton(Button::A); // Aボタンを押す
SwitchControlLibrary().sendReport(); // Aボタンを押したことを反映
delay(50); // 50 ms 待機
SwitchControlLibrary().releaseButton(Button::A); // Aボタンを離す
SwitchControlLibrary().sendReport(); // Aボタンを離したことを反映
delay(50); // 50 ms 待機
}
Arduinoへの書き込み
それでは書き込みを行いますが、ここでも設定事項があります。
上部メニューの __ツール > ボード
__から Arduino Leonardo
に変更します
上部メニューの __ツール > シリアルポート
__から Arduinoが接続されているポートに変更します
これで1度書き込みを行います。書き込みはIDE左上の矢印ボタンで行います。
完了したらWebでゲームパッドをテストするところがあるのでそこで確認をしてみましょう。
次にこのコントローラをPro Controllerと認識させるために細工をします。以下の設定ファイルを開きましょう。
Windowsの人は
C:\Program files(x86)\Arduino\hardware\avr\1.8.2\boards.txt
Mac の人は
/Library/Arduino15/packages/arduino/hardware/avr/1.8.2/boards.txt
こちらの 311, 312 行目を以下のように変更します
# 変更前
leonardo.build.vid=0x2341
leonardo.build.pid=0x8036
# 変更後
leonardo.build.vid=0x0f0d
leonardo.build.pid=0x0092
変更が終わったら再度IDEで書き込みを行います。
313行目の名前を変えるとコントローラの名前も好きに設定できます
Switchは先ほど設定したIDで判断しますのでここは何を書いても大丈夫です
最後に
より良い自動化ライフを!