前回投稿したポケモンSV自動化ではArduinoProMicro(Leonardo)を使用しました。
環境構築は複雑にはなりますがArduinoUNOでもSwitchの操作は可能なのでやり方を書いていきます。
こちらも試す際は自己責任でお願いいたします。
PCに詳しくない人には結構難しいので今から買うなら一つ前の記事のArduinoProMicro(Leonardo)
のほうでやったほうがいいと思います。
必要なもの
- ArduinoUNO 互換品でOK
- USB (タイプA to タイプB) ArduinoUNO本体に付属してるかも
- USBタイプAをタイプCに変換できるもの(Switch本体に直接つなぐ場合は必要、ドッグに接続する場合は不要)
USB タイプC変換器 もしくは USBタイプCハブ (充電しながら使いたい場合ハブのほうがおすすめ) - PC (Windows or Macどちらでも可能ですが今回書く内容はWindowsの手順となります)
Macで行う場合こちらの方の記事がわかりやすいです。
ArduinoUNO本体とケーブル以外はArduinoProMicro(Leonardo)一緒です。
必要なソフトのダウンロード
- lufa (Code→DownloadZIPからダウンロード)
- dfu-programmer-win-0.7.2 (緑のdownloadボタンからダウンロード)
- AutoRaid-1.0.0aw リンク先のAutoWattからダウンロード
ArduinoUNOをATmega16U2として認識させる
先ほどダウンロードしたdfu-programmer-win-0.7.2は解凍して適当な場所に置いておいてください。
左下のWindowsマークを右クリックすると「デバイスマネージャー」があるので起動します。
ArduinoUNOとPCを接続します。
その後下記画像のように左上にある六本のピンのうち左二本を金属(私はイヤホンジャックで代用しました)と接触させる。接触させた時と離した時にシステム音が鳴ると思います。
その後デバイスマネージャーを見るとほかのデバイスの欄に「不明なデバイス」があると思います。
「不明なデバイス」を右クリックして「ドライバーの更新」を選択
「コンピューターを参照してドライバーを検索」を選択
その後、先ほどダウンロードした「dfu-programmer-win-0.7.2」を解凍してその中にある
「dfu-prog-usb-1.2.2」を選択してインストール。
上記画像のようにドライバーが正常に更新されたら成功。
再度デバイスマネージャーを確認すると「ATmega16U2」があると思います。
各種ファイルの確認
先ほどダウンロードしておいた
「AutoRaid-1.0.0aw」と「lufa-d6a7df4f78898957fa6d5b63e62015ce763560d4」解凍します。
「AutoRaid-1.0.0aw」の中を確認するとこのようになっていると思います。
ここにある「joystick.c」を書き換えてそれを「joystick.hex」に変換することでSwitchの自動操作が可能になります。
A連打だけする場合「joystick.c」のcommand stepsをこのように書き換えておきます。
static const command step[] = {
// Setup controller
{ B, 0 },
{ A, 0 },
// ここまでコントローラーを認識させるおまじない
// Start
// 初期設定など1回だけ動かしたいコードはここまで
// loop Start
{ LOOP_START, 0 },
// これより下を無限ループ
{ A, 5 },
{ NOTHING, 50 },
};
上から二番目の「lufa」フォルダの中に解凍した
「lufa-d6a7df4f78898957fa6d5b63e62015ce763560d4」の中身を入れます。
joystick.c を joystick.hex に変換
まずこの記事を参考にWSL(Windows Subsystem for Linux)をインストールしておきます。
ここでインストールするLinuxディストリビューションはUbuntuです。
MicroSoftStoreで「Ubuntu」と検索すると一番上に出てくると思います。
Ubuntuを起動して初期設定のユーザー名とパスワードを適当に入れます。
すると自由に操作できるようになるためコマンドを順番に実行していきます。
↓ パッケージの更新をしておきます。
sudo apt update
sudo apt upgrade
↓ gcc make というコマンドを実行できるようにするコマンドです。
sudo apt install build-essential
↓ 次にjoystick.cのあるフォルダまでcdコマンドで移動します
cd /mnt/c/ArduinoUNO/AutoRaid-1.0.0aw
「AutoRaid-1.0.0aw」を Shift + 右クリック すると「パスをコピー」という項目があると思うので
それでパスをコピーして「¥」のマークを「 / 」に変更後、頭に「/mnt/」をつけ、余分な部分を消して
貼り付けると辿り着けると思います。
lsコマンドで中身を確認すると
各種ファイルが確認出来たら
sudo apt-get install avr-libc gcc-avr
とコマンドを打ち、さらにパッケージをインストールしていきます。
完了したら次は
make
とコマンドを入力し実行します。
たくさんメッセージが表示されますがエラーが出てなければ成功です
AutoRaid-1.0.0awの中身の「joystick.hex」を確認してみて
更新日時が現在の日付になっていればビルド成功です。
ArduinoUNOに書き込む
ArduinoUNOをATmega16U2として認識させる手順と同じように
ArduinoUNOをPCと接続した後下の画像のようにピンに金属を接触させます。(DFUモードにする)
その後 Windowsキー + Rキー を同時に押し「cmd」と入力しコマンドプロンプトを開く。
cd コマンドで「dfu-programmer.exe」がある階層まで移動
移動したらコマンドプロンプトで以下のコマンドを実行。
dfu-programmer.exe atmega16u2 erase
次に「dfu-programmer.exe」がある階層に先ほどビルドした「joystick.hex」をコピーします。
コピー出来たら以下のコマンドを実行。
dfu-programmer.exe atmega16u2 flash Joystick.hex
上の画像の成功と表示されたら大丈夫です。
ArduinoをPCから抜きます。
あとはSwitchに挿すだけでA連打が始まります。
動作させる際の注意点
前の記事でも書きましたがドッグを介してUSBを差し込む際は、ArduinoをSwitchに差し込んだ時Proコンが接続されている場合、反応しないためProコンを接続解除しておいてください。
その後、Joyコンでマクロを実行したい場面の直前まで持っていき、JoyコンをSwitchにしまった後に
USBでArduinoとSwitchを接続すると動作すると思います。
Switch本体にタイプC変換器を用いて差し込む場合もProコンの接続解除は必要です。
感想
前の記事のArduinoProMicroなどと比べると難易度が一気に上がり、環境構築も面倒なため
あまりお勧めはできませんが一応こちらのやり方でも可能です。
自分もやっててよくわかりませんでした。
まとめ
ネットにあるSwitch自動化のコードはArudinoUNO用に書かれたものもあるため、両方持っておいて損はないと思いますが簡単なマクロを組むくらいならArduinoProMicroなどを使えばいいと思います。
コメント
dfu-programmer-win-0.7.2をダウンロードしたいのですが、上手くいきませんでした。緑のダウンロードボタンを見つけられていません。今もあるでしょうか?
現在、このプロジェクトはGitHubに移行されたそうです。
最新バージョンがGithubにて公開されています。
https://github.com/dfu-programmer/dfu-programmer/releases/tag/v1.0.0
こちらのページからダウンロード可能です。バージョンは1.0.0と書かれておりまだ試していないのでわかりませんがおそらく代用可能かと思われます。
Windows64bitの場合「dfu-programmer-x64-1.0.0.zip」を選択してください。
お早い返信ありがとうございました。「dfu-programmer-x64-1.0.0.zip」も試してみたのですが、いくつか手順を経る必要があるようで、ちょっと自分にはレベルが高かったようです。記事は大変参考になりました。家にあった古いArduinoを使ってみようと思っていたのですが、Arduinoの別バージョンを購入して試してみようと思います。本当にありがとうございました。
お早い返信ありがとうございました。「dfu-programmer-x64-1.0.0.zip」も試してみたのですが、いくつか手順を経る必要があるようで、ちょっと自分にはレベルが高かったようです。記事は大変参考になりました。家にあった古いArduinoを使ってみようと思っていたのですが、Arduinoの別バージョンを購入して試してみようと思います。本当にありがとうございました。