なるほどえたきちのブログじゃねーの

チラ裏雑記帳

ポケモン過去作の解析とか乱数調整とかそこら辺。不定期更新。

【Nintendo Switch】格安マイコンCH552でポケモンの自動化をしてみたい話

この記事は、Pokémon Past Generation Advent Calendar 2022 12月25日の記事です。
ポケモンの自動化と言っていますが、ポケモンの話は殆どしていません...。
adventar.org

概要



先月発売されたポケットモンスタースカーレット/バイオレット(以下SV)において、一部の海外勢によって早速解析が行われたものの、とある理由により乱数調整が基本的にほぼ不可能であることが確認されました。
www.reddit.com

まあ正直こうなることはある程度予想できたので、SVでは自動化による作業効率化が流行るのかな~と発売前から考えていました。
PCからSwitchを自動化するのが一番楽だと考えていますが、機材を整えるのが結構面倒です。
Bluetoothドングルを使用して自動化することも可能ですが、環境によって遅延やペアリング不可等の症状が発生する場合があったり、最近出回っているドングルの多くはそもそも対応していなかったりと少し問題が多かったので、今回は有線の環境にも目を向けることにしました。
その為、自分でマイコン+シリアル変換モジュールを実装した有線通信用の基板を作ってみようかと思い付きました。

採用するマイコンについて調べる



Amazonでなんとなくマイコンの価格を調べた所、昔1000円くらいで買えたはずの互換ボードが3倍以上に値上がりしていることが判明。

400円程度で買えたProMicro互換ボードも約1400円という有様でした。

調べた所、そもそも使用されているチップの供給が安定しておらず、チップ自体の価格が高騰しているような状態でした。
ATmega系のマイコンは殆どが供給が安定しておらず、元々原価ギリギリで売っていたような互換ボードはチップの高騰に合わせて値段を上げざるを得なくなったようです。
発売から結構な年月が経っているのもあって、そもそも価格や供給が今後安定するのかどうかもよく分かりません。
実際、製品に使用するマイコンチップをATmega系マイコンから他のものに乗り換えたという話も聞く中で、新たに作るものにこれを採用するのはちょっと無いなという感じです。
某中華通販サイトでチップ単体購入すると偽物ばかり届くという情報もあった為、できることなら代替品となり得るマイコンを見つけておきたいと考えました。
その中で候補となったのは以下の2つです。

Raspberry Pi Pico (RP2040)

最近電子工作界隈でよく見掛けるマイコンボードです。
ProMicro互換品以下の価格でチップ自体の供給もかなり安定している為、用途によってはこちらに乗り換えていくことも可能そうです。
おまけに価格の割にチップの性能が異様に高いです。
等速で動作するGBエミュレータ等も作れるくらいには高性能なマイコンです。
Switch自動化程度であればそこまでチップの性能は必要としないので、少々オーバースペックなのは否めません。
Raspberry Pi Pico — スイッチサイエンス

CH552

Raspberry Pi Picoと同時期くらいに中国で発売された怪しいマイコンです。
新しめの中華製品等を分解すると時々見掛けます。
現在購入できるUSBマイコンの中ではぶっちぎりでチップの価格が安いです。
供給されている数も他のマイコンより圧倒的に多いようなのですが、国内ではこちらを使用しているボードを販売している所が殆どありません。
私がこのマイコンを調べ始めた時点ではスイッチサイエンスで個人の受託販売品が扱われているのみでした。
ProMicroCH552 — スイッチサイエンス

開発ボードが少ないという点でCH552は少し敷居が高いように感じましたが、元々自分で基板を作る予定だったのでプログラムさえ一度出来上がってしまえばあまり関係がありません。
PCからマイコン経由で操作する場合、マイコンは中継器でしかないので一度決められたプログラムを書き込んでしまえばそれ以降は何も弄る必要がないのです。
国内で買う場合でもそこまで高くはなかったので、ダメ元で上記のProMicroCH552を購入しました。

商品の到着後、早速プログラムを書いてみた所...


ものの1時間程度で実際に動くものができてしまいました。
チップの価格がちょっとあり得ないので正直あまり期待はしていなかったのですが、シリアル通信等色々検証してみても今まで使ってきたマイコンと同等の役割は果たせそうだった為、設計する基板にはこちらのチップを採用することに決めました。

シリアル変換ICを選定する



次はシリアル通信を行うチップの選定についてです。
現在出回っているシリアル変換ICは大体以下の3つです。

FT232RL

FTDI製のシリアル変換ICです。
発売されたのが15年くらい前だったりするので実は滅茶苦茶古いICです。
チップの供給がどうなっているのかは不明ですが、単価は発売当時よりかなり上がっているようです。(多分10倍くらい)
偽物が大量に出回っているので、現在これを採用するメリットは皆無です。
FTDI製に拘る場合はもう少し新しい製品を採用した方が絶対良いですね。
また、Amazonで販売されているシリアル変換モジュールでこれが採用されているものはほぼ偽物が使用されていると考えた方が良いです。
明らかに高価なものに関しては本物が使用されているかもしれませんが、購入する際は自己責任でお願いします。

CP2102N

シリアル変換モジュールで調べるとこちらが使用されている製品も多いです。
こちらに関しては偽物はほぼ見掛けませんね。
Amazonでシリアル変換モジュールを探す場合の安定択だと勝手に考えています。

CH340

CH552と同じメーカーから発売されているシリアル変換ICです。
安物のArduino Uno互換品(自動化には使用不可)で使われているので少しマイナスイメージがありそうですが、性能自体には問題ありません。
こちらが採用されたシリアル変換モジュールもAmazonや某中華通販サイト等で結構見掛けます。
モジュールでの価格はCP2102Nと同じくらいですが、チップ自体の価格はこっちの方が安いです。
価格が安く、外付け部品も殆どいらない上にマイコンとメーカーを揃えるのが少し面白そうなのでこちらを採用することにしました。

基板を設計してみる



実際に動作するプログラムさえできてしまえば後は適当に回路を書いて基板と部品を発注するだけです。
所詮はデジタル回路なのでノイズだとかそこら辺はそこまで考えずに組んでしまっても普通に動作するはずです。

そんな感じで発注したものが届いたら組み立てて動作確認を行います。
あっさりと書いていますが基板や部品が到着するまでに結構な時間が掛かってます...。

調子に乗って3Dプリンタでケースも作ってみました。
3Dモデリングは1度も触ったことがありませんでしたが、意外と簡単に作れて良かったです。(小並感)

公開したプログラム・基板


NX Macro Controller / Poke-Controller用ファームウェア

名前の通りです。
CH552-SERIALとかそこら辺に書き込んで使います。
github.com

CH552用Nintendo Switch自動化ライブラリ

NintendoSwitchControllみたいな記法でマクロを書けるライブラリです。(完全な互換性はありません...。)
github.com

CH552-SERIAL

CH552とシリアル変換モジュールを合体させた基板です。
これとダイソーとかに売ってるType-Cケーブルがあれば簡単に自動化ができます。
bzl.booth.pm

CH552-MCU

CH552単体の基板です。
CH552搭載基板はタクトスイッチを押しながらUSB接続を要求するものが多いですが、何度もやってると指が痛くなるのでスライドスイッチに変更したものを作りました。
USBデバイスエミュレートのプログラム開発時のデバッグ用基板として意外と使えました。
booth.pm

あとがき



ここまで読んでくださってありがとうございました。
SVでは乱数調整が難しそうなので、自動化の方面に力を入れて何かできたらなと考えています。
取り敢えずは昔公開したNX Macro Controllerの機能拡張とかそこら辺をメインに頑張っていきたいですね。
Poke-Controller用に書かれたPythonプログラムの実行、変数・IF文等の追加やC#スクリプトの実行機能等、考えていることは結構ありますが時間の確保が中々難しいです。
年末年始で一気に作業を進めて更新ができたら嬉しいですね。

また、CH552でプロコン+キーボードのエミュレートが可能ということも確認できている為、諸々検証を進めて問題がなさそうであればそちらも更新したいです。
振動検知等は現状無線でしかできなかった為、有線でもそれができるようになるかもしれません。(後はコントローラーの色の変更)

以上で今年のAdvent Calendarは終了です!
皆様、良いお年をお過ごしください。