ぴよがち

技術的な話をします。みんなで強くなりましょう。

【NXBT】Raspberry Pi で Switchを自動操作する話(前編)【初期設定・使い方】

突然ですが、皆様は、
「Switch を自動操作して、お金稼ぎやレベリングのような単純な作業をできたらいいなー」
などとお考えではないでしょうか。

Nintendo Switch を自動操作する場合、通常は Arduino Leonardo 互換機などを用いて有線で行う場合が多いでしょう。 *1

今回は、あまり日本語で情報が出回ってなさそうな NXBTRaspberry Pi を用いた、無線(Bluetooth経由)での Switch の自動操作のやり方をご紹介します。

注意書き

本記事の内容により発生したいかなる損害についても、筆者は責任を負いかねます。
また、本記事内容の一部・全部を問わず、内容・画像の無断転用は固くお断りいたします。*2

Arduino と比較したメリット

  • 無線なので置き場所が自由
    • Raspberry Pi と、Switch本体とが離れていても問題ありません。
  • Web経由(自宅のLAN内)でマクロを操作できる
    • 初回セットアップが完了してしまえば、スマホからでも簡単に操作できます。
    • 動作を変更する場合にも、コンパイル作業は必要なし!お手軽!

Arduino と比較したデメリット

必要なもの

  • Bluetooth対応の Raspberry Pi
    • 私は手元にあった Raspberry Pi 3 Model B+ を用いました。
      持っていない人は、秋葉原千石電商あたりで在庫があれば買いましょう。(一応 Amazonでも買えます が、品薄なのもありやや高め。)
      • Raspberry Pi 4 でも同じ手順で動作するはずです。(動作報告求む。)
      • Raspberry Pi Zero 2 W でもいける気がします。(動作報告求む。)
  • MicroSDカード を読み書きできるPC
    • 読み書きできない場合は、外付けのMicroSDアダプタ等を使いましょう。
  • 初期化しても良い MicroSDカード(最低4GB)
  • Raspberry Pi の初期設定用のディスプレイとHDMIケーブル、キーボード、有線lanケーブル
    • ディスプレイは、テレビ等でも可。
    • 有線lanケーブル(インターネット)は、初期設定時のみ必要です。無線lanは設定が面倒なので、頑張りたい人は頑張ってください。

Raspberry Pi にインスト-ルするもの一覧

初期設定の手順

OS(Ubuntu Server 20.04)のダウンロード

NXBTの動作に必要なパッケージがDebian等では利用できなかったりするので、Ubuntuを利用します。
デスクトップ環境は今回は不要なので、Ubuntu Serverを選びました。

Ubuntu 20.04 のダウンロードページ から、Raspberry Pi向けのイメージを「Raspberry Pi Generic (64-bit ARM) preinstalled server image」をクリックしてダウンロードしましょう。

前述の通り、2022年11月時点では Ubuntu 22.04 で NXBT が動作しない点にご注意ください。

ダウンロードしたファイルは圧縮されているので、完了したら展開します。
7-Zip などを使って展開しましょう。

7-zipをインストールすると、ファイルを右クリックして、
7-Zip展開...OK で展開できるようになるはずです。

OS(Ubuntu Server 20.04)のSDカードへの書き込み

Windowsでは、 Win32DiskImager あたりを使うと書き込めます。

インストールして、
Image File の項目ではさっき展開した Ubuntu のイメージを、
Device の項目では自分のMicroSDカードのドライブを選択します。

両方とも選択したら、下の方の Write ボタンを押せるようになるので、Write を押して書き込みます。

OS・NXBTの初期設定

SDカードへの書き込みが完了したら、Raspberry Pi に差し込んで起動します。

Raspberry Pi に、電源とSDカード、LANケーブル、HDMIケーブルが接続されていることを確認し、起動しましょう。

ディスプレイに文字が出てきたら、うまくいっています。

初回起動時の設定

起動したら、最初にログインとパスワードを求められます。

ユーザ名: ubuntu
パスワード: ubuntu

でログインし、パスワードを自分の好きなものに変えてください。

SSHも設定しておくと、PCから操作できて捗ります。(不要な人は設定不要です。)

sudo apt update
sudo apt install openssh-server -y

# ファイアウォールの許可設定。操作元のコンピュータのローカルIPアドレスのみを許可する方が望ましいです。
sudo sudo ufw allow ssh

Bluetoothドライバと、pipのインストール

Raspberry Pi 用のドライバをインストールしましょう。
ついでに、NXBT のインストールに必要なpipもインストールしておきましょう。

sudo apt update
sudo apt install pi-bluetooth -y
sudo apt install python3-pip -y

サービスの再起動を求められたら、すべて選択して再起動して大丈夫です。

NXBTのインストール

NXBT をインストールします。*4
いくつかの依存パッケージがアップデートされて動かなくなってるっぽいので、手動で入れ直してやる必要があります。

sudo pip3 install nxbt
sudo pip3 install markupsafe==2.0.1 itsdangerous==2.0.1 werkzeug==2.0.3

Webアクセス用のファイアウォール設定

Ubuntuファイアウォールに、Webアクセス用ポートの許可設定を追加します。

sudo ufw allow 8000/tcp

NXBT の Webサーバ の起動

NXBT の Webサーバ を起動する前に、Raspberry PiIPアドレスを確認しておきましょう。

ip a | grep eth0

出力結果の IPアドレス っぽいのが、Raspberry PiIPアドレス です。
私の場合、以下のような結果が表示されたので、192.168.10.110 をメモしておきました。

メモできたら、Webサーバを起動しましょう。

sudo nxbt webapp

起動すると、Raspberry Pi と同一のネットワークに接続している端末からWeb画面にアクセスできるようになります。
手元のPC(操作しづらいですが、wifiに接続したスマホでも可)で、ブラウザからアクセスしてみましょう。

先ほどメモしたIPアドレスを参考に、8000番のポートをブラウザで指定して開きます。
私の場合、http://192.168.11.110:8000 を開きました。

うまくいっていると、上の画像のような画面が表示されます。

コントローラの Switch への接続

Switchを起動し、ホームメニューの コントローラー持ちかた/順番を変える を選択し、接続待機中の画面にしておきます。

この状態で、NXBT のWeb画面のコントローラのアイコンをクリックすると、コントローラとして接続されます。

接続が完了したら、メニューを閉じて操作したいゲームなどを開きます。

自動操作の実行

接続に成功すると、下図のようにWeb画面が切り替わります。

NXBT のWeb画面では、赤枠の Controller Macro に実行したい処理を書くことで自動操作することができます。

1秒ごとに1回Aボタンを押す操作を10回繰り返してみましょう。

LOOP 10
    A 0.1s
    0.9s

と書いて、RUN MACRO ボタンを押すと、実行されます。

後編(文法など)の案内

長くなったので、マクロの文法などは 後編 に書きます。

piyo-p.hatenablog.com

*1: やり方は、このへんを参照: https://note.com/kochatece/n/n301221e14593

*2:公序良俗に反しない媒体からのリンクや、著作権法上の「引用」などに際しては、筆者への連絡は不要ですし、これを妨げる意図はありません。特に営利目的など、この範囲を逸脱する利用を厳に謹んでいただくようお願い申し上げます。

*3:家にいらないPCがあれば、それにUbuntuをぶち込んでも多分できると思います。暇な人はやってみてください。

*4:設定すればユーザ権限でもインストールできるらしいので、気になる方はやってみると良いかもです。 /lib/systemd/system/bluetooth.service の ExecStart=/usr/lib/bluetooth/bluetoothd の行を、 ExecStart=/usr/lib/bluetooth/bluetoothd --noplugin=input に書き換えるといけるとか。