1. はじめに
2025年10月、Nintendo Switch 2 向けに『Pokémon LEGENDS Z-A』(以下、ポケモンZA)が発売されました。
ポケモンZAでは、ストーリー中に色違いのメリープを捕まえられるサイドミッションがあります。
私はこのミッション中、誤って他のポケモンにボールを投げてしまい、制限時間内に色違いメリープを捕まえられず逃げられてしまいました。
さらに、逃げた直後に他のポケモンを捕獲してしまい、オートセーブが入ったため、ミッション中の色違いメリープを永遠に取り逃すという悲劇に…。
(ちなみに、ポケモンZAには「バックアップセーブ」機能があるのですが、当時は存在を知りませんでした…。)
Raspberry Pi Pico などのマイコンを USB ケーブルで Switch に接続すると、Switch がそのマイコンを「コントローラー」として認識します。
マイコン側からボタン入力の信号を送ることで、実際のコントローラー操作を自動化することができます。
今回は、家に転がっていた Raspberry Pi Pico を使って「色違いメリープ」を自動で厳選(いわゆるベンチ厳選)した方法をまとめました。
ついでに、金策やひかるおまもり用のバトル数稼ぎの自動化も行いました。
2. 開発環境
Raspberry Pi Pico を使って Switch を操作する方法はいくつかありますが、私は以下のリポジトリを参考にしました。
🔗 sorasen2020/SwitchControllerPico
Arduino IDE は version 2.3.6(2025年11月時点の最新) を使用し、その他の設定は上記リポジトリの説明に従いました。
3. ベンチ厳選
ポケモンZAでは「ベンチで休憩」すると時間帯が変わり、出現するポケモンがリポップします。また、色違いポケモンは倒すか捕獲するまで消えないという仕様があります。
この2点を利用し、ベンチ休憩を繰り返すことで自動的に色違い厳選を行います。
具体的には、
- Aボタンを連打してベンチに座る
- 左スティックを下に倒して時間を進める
という操作をループさせるだけでOKです。
以下が実際に Raspberry Pi Pico に書き込むコードです。
各関数の詳細は こちらの記事 を参考にしました。
#include "Arduino.h"
#include "SwitchControllerPico.h"
const uint8_t desc_hid_report[] =
{
CUSTOM_DESCRIPTOR
};
Adafruit_USBD_HID usb_hid(desc_hid_report, sizeof(desc_hid_report), HID_ITF_PROTOCOL_NONE, 2, false);
void setup() {
switchcontrollerpico_init();
// wait until device mounted
while( !TinyUSBDevice.mounted() ) delay(1);
switchcontrollerpico_reset();
}
void loop() {
pushButton(Button::A, 50, 1);
UseLStick(LS::LS_DOWN, 50, 0);
}
4. 動作状況
ポケモンZAは1つのコントローラーしか認識できないため、使用中のコントローラーを一度切断してから Raspberry Pi Pico を接続します。
接続後すぐにプログラムが動作を開始するため、開始位置はベンチ前です。
5. 結果
この方法で、放置中に色違いメリープを無事ゲットできました🎉
動作も安定しており、Switch 2 でも問題なく認識されました。
6. A連打厳選
別の場所では、「Aボタンの連打」だけで厳選できるポイントもあります。
(例:フラダリラボのダンバル・メタング など)
上記のプログラムから下入力を削除するだけです。
#include "Arduino.h"
#include "SwitchControllerPico.h"
const uint8_t desc_hid_report[] =
{
CUSTOM_DESCRIPTOR
};
Adafruit_USBD_HID usb_hid(desc_hid_report, sizeof(desc_hid_report), HID_ITF_PROTOCOL_NONE, 2, false);
void setup() {
switchcontrollerpico_init();
// wait until device mounted
while( !TinyUSBDevice.mounted() ) delay(1);
switchcontrollerpico_reset();
}
void loop() {
pushButton(Button::A, 50, 1);
}
7. 金策、バトル数稼ぎ
最近はポケモンにアイテムを使用することで、レベルを上げや最大までの努力値振り、性格変更ができます。それらのアイテムを買うためにお金が必要です。
また、「ひかるおまもり」を入手するには1000人とバトルする必要があり、手動ではかなり大変です。
そこで、バトルを自動化してみました。
操作内容は簡単で、
「ZLを押しっぱなしにしながらAを連打」することで、自動的に戦闘を繰り返します。
💰金策
- 開始場所:スーパーユカリトーナメントD(ユカリの前)
- 使用ポケモン:かなり強いポケモン(例:HA or AS メタグロスなど)
⚔️バトル数稼ぎ
- 開始場所:レストラン・ド・フツー(リンタローの前)
- 使用ポケモン:そこそこ強いポケモン(例:しんそく カイリューなど)
ChatGPTの協力も得ながら作成したコードがこちら👇
#include "Arduino.h"
#include "SwitchControllerPico.h"
const uint8_t desc_hid_report[] =
{
CUSTOM_DESCRIPTOR
};
Adafruit_USBD_HID usb_hid(desc_hid_report, sizeof(desc_hid_report), HID_ITF_PROTOCOL_NONE, 2, false);
void setup() {
switchcontrollerpico_init();
// wait until device mounted
while( !TinyUSBDevice.mounted() ) delay(1);
switchcontrollerpico_reset();
}
void loop() {
USB_JoystickReport_Input_t report = {0};
// 🎮 スティックを中央に固定(これが重要!)
report.LX = 128;
report.LY = 128;
report.RX = 128;
report.RY = 128;
// --- ZLを押した状態にする ---
report.Button |= static_cast<uint16_t>(Button::ZL);
sendReportOnly(report);
delay(100); // ZLを押して安定させる
// --- Aボタンを複数回押す ---
for (int i = 0; i < 5; i++) {
report.Button |= static_cast<uint16_t>(Button::A); // Aを押す
sendReportOnly(report);
delay(100);
report.Button &= ~static_cast<uint16_t>(Button::A); // Aだけ離す
sendReportOnly(report);
delay(100);
}
// --- ZLを離す ---
report.Button &= ~static_cast<uint16_t>(Button::ZL);
sendReportOnly(report);
delay(100); // 次のループまで待つ
}
6. おわりに
今回は、ポケモンZAで Raspberry Pi Pico を使って色違い厳選・金策・バトル数稼ぎを自動化する方法を紹介しました。
市販の連射コントローラーでも同様のことは可能ですが、価格はおよそ5,000円前後します。
一方、Raspberry Pi Pico は1,000円以下で購入できるため、コスパよく自動化環境を整えることができます。
それでは、良きポケモンライフを〜!
参考

