この記事は、Pokémon Past Generation Advent Calendar 2022 12月25日の記事です。
ポケモンの自動化と言っていますが、ポケモンの話は殆どしていません...。
adventar.org
概要
先月発売されたポケットモンスタースカーレット/バイオレット(以下SV)において、一部の海外勢によって早速解析が行われたものの、とある理由により乱数調整が基本的にほぼ不可能であることが確認されました。
SVの乱数調整についてですが、レイドも含めポケモンの生成処理全てにCSPRNGによる初期化が入っているらしいです
— ぼんじり(17) (@_3z8) 2022年11月19日
そんな感じなのでまあ多分無理ですね
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を購入しました。
商品の到着後、早速プログラムを書いてみた所...
数十円の中華マイコンで偽装HORIコン錬成できた pic.twitter.com/CC2qDvADX6
— ぼんじり(17) (@_3z8) 2022年10月17日
ものの1時間程度で実際に動くものができてしまいました。
チップの価格がちょっとあり得ないので正直あまり期待はしていなかったのですが、シリアル通信等色々検証してみても今まで使ってきたマイコンと同等の役割は果たせそうだった為、設計する基板にはこちらのチップを採用することに決めました。
シリアル変換ICを選定する
次はシリアル通信を行うチップの選定についてです。
現在出回っているシリアル変換ICは大体以下の3つです。
FT232RL
FTDI製のシリアル変換ICです。
発売されたのが15年くらい前だったりするので実は滅茶苦茶古いICです。
チップの供給がどうなっているのかは不明ですが、単価は発売当時よりかなり上がっているようです。(多分10倍くらい)
偽物が大量に出回っているので、現在これを採用するメリットは皆無です。
FTDI製に拘る場合はもう少し新しい製品を採用した方が絶対良いですね。
また、Amazonで販売されているシリアル変換モジュールでこれが採用されているものはほぼ偽物が使用されていると考えた方が良いです。
明らかに高価なものに関しては本物が使用されているかもしれませんが、購入する際は自己責任でお願いします。
CP2102N
シリアル変換モジュールで調べるとこちらが使用されている製品も多いです。
こちらに関しては偽物はほぼ見掛けませんね。
Amazonでシリアル変換モジュールを探す場合の安定択だと勝手に考えています。
基板を設計してみる
実際に動作するプログラムさえできてしまえば後は適当に回路を書いて基板と部品を発注するだけです。
所詮はデジタル回路なのでノイズだとかそこら辺はそこまで考えずに組んでしまっても普通に動作するはずです。
そんな感じで発注したものが届いたら組み立てて動作確認を行います。
あっさりと書いていますが基板や部品が到着するまでに結構な時間が掛かってます...。
部品が届いたので少しずつ作り始めてます pic.twitter.com/D8slQpRuSt
— ぼんじり(17) (@_3z8) 2022年11月8日
何か作ってます pic.twitter.com/LQsZuSNKZM
— ぼんじり(17) (@_3z8) 2022年11月6日
調子に乗って3Dプリンタでケースも作ってみました。
3Dモデリングは1度も触ったことがありませんでしたが、意外と簡単に作れて良かったです。(小並感)
できました pic.twitter.com/nCsGUJ2jnp
— ぼんじり(17) (@_3z8) 2022年12月14日
公開したプログラム・基板
NX Macro Controller / Poke-Controller用ファームウェア
名前の通りです。
CH552-SERIALとかそこら辺に書き込んで使います。
github.com
CH552用Nintendo Switch自動化ライブラリ
NintendoSwitchControllみたいな記法でマクロを書けるライブラリです。(完全な互換性はありません...。)
github.com
CH552-SERIAL
CH552とシリアル変換モジュールを合体させた基板です。
これとダイソーとかに売ってるType-Cケーブルがあれば簡単に自動化ができます。
bzl.booth.pm
あとがき
ここまで読んでくださってありがとうございました。
SVでは乱数調整が難しそうなので、自動化の方面に力を入れて何かできたらなと考えています。
取り敢えずは昔公開したNX Macro Controllerの機能拡張とかそこら辺をメインに頑張っていきたいですね。
Poke-Controller用に書かれたPythonプログラムの実行、変数・IF文等の追加やC#スクリプトの実行機能等、考えていることは結構ありますが時間の確保が中々難しいです。
年末年始で一気に作業を進めて更新ができたら嬉しいですね。
また、CH552でプロコン+キーボードのエミュレートが可能ということも確認できている為、諸々検証を進めて問題がなさそうであればそちらも更新したいです。
振動検知等は現状無線でしかできなかった為、有線でもそれができるようになるかもしれません。(後はコントローラーの色の変更)
以上で今年のAdvent Calendarは終了です!
皆様、良いお年をお過ごしください。