06
YOSHIMITSU — 完全ソリューション:すべてのチートコード、ひとつの巻物
勝者しかいないチートコード寓話。ひとつのゆるやかなスケッチ、六つの構え、ひとつの常設ハーネス: CRSF→PWMの受け流し(KINCHO)、Zephyrusジャイロの浮揚(MANJI_DRAGONFLY)、ポケット・フラッシャー(FLEA · MEDITATION)、剣なき作業台(NSS)、決して振り返らない鏡(BACK_TURNED) — さらに常時点灯のオーロラYOSHIと、伝説を語る瞑想する管理者JIGUANG(極光)。配線は一度、書き込みも一度。その後はライブラリが更新され、玉座が命じる。
1枚のボード、6つの構え
YOSHIMITSUは六つの構えを持つ隠秘の忍びだ — 構えごとに異なる勝利、すべて同じ魂をまとう。ひとつのゆるやかなスケッチが両ボードでビルドされ、構えはUSBコマンド、GPIO0ボタン(ESP32-S3)、またはRESETタップ(RP2040-Tiny)で切り替わる:
| 構え | 意味 |
|---|---|
KINCHO
|
CRSF→PWMコンバータ——受け流し(CRCが偽りを捨てる)。チャンネル名なし、ジャイロなし。 |
MANJI_DRAGONFLY
|
コンバータ+Zephyrusジャイロリンク(MPU6050は任意)——浮揚。 |
FLEA
|
電源サイクル治具——RXをブートローダーへ落とす持ち上げ。 |
MEDITATION
|
ポケットフラッシャー——海綿頭、エネルギーを蓄え、書き込みに備える。 |
NSS
|
無刀の作業台——USB直結サーボ、RFなし。 |
BACK_TURNED
|
欺きの静寂——生きたUARTの鏡。決して振り返らない。 |
ひとつのスケッチ、ふたつのターゲット: sketches/yoshimitsu/yoshimitsu.inoはWaveshare RP2040-Tiny(最軽量、オンボードボタンなし)とネイティブUSBの任意のESP32-S3向けに、標準のarduino-pico / arduino-esp32コアでコンパイルされる。Arduino IDEでは同じスケッチがFile → Examples → Yoshimitsu → Yoshimitsu_Defaultにある。
YOSHIMITSU — 統合ファームウェア
YOSHIMITSUは推奨ファームウェアです。KINCHO(コンバータ)で起動し、構えの間を移動します。USBコンソールは両ボードで正統のスイッチ——KINCHO → MANJI → FLEA → MEDITATION → NSS → BACK → POSE <n>。ESP32-S3ではBOOTボタン(GPIO0)が第二の表面です:
| 文脈 | 所作 | 動作 |
|---|---|---|
| どの構えでも | ダブルタップ | KINCHO → MANJI → NSS → BACK → KINCHO → と巡回 |
| どの構えでも | 2秒長押し | MEDITATIONへ入る |
| MEDITATION / FLEA | シングルタップ | 受信機を再起動(新しいファームウェアを実行) |
| MEDITATION / FLEA | ダブルタップ | FLEA——受信機をブートローダーへ落とす |
配線はひとつの常設ハーネスだ — 同じ配線がすべての構えに仕えるから、飛行と書き込みのあいだに配線し直すことはない。MEDITATIONではUSB→UART経路が純粋な透過ブリッジ(行のパースなし)なので、esptoolのバイナリSLIPトラフィックはそのまま素通りする。全ソース: sketches/yoshimitsu/yoshimitsu.ino(ゆるやかなスケッチ)、src/Yoshimitsu.h(コア)、src/Yoshimitsu_Loadout.h(初期ロードアウト)。
ライブラリ — スケッチに触れずに更新する
YOSHIMITSUは薄いスケッチを上に載せたライブラリだ — 忍びの全体がライブラリに生き、スケッチはあなたの設定だけを保つ。フォルダを一度Arduinoライブラリとしてインストールすれば、File → Examples → Yoshimitsu → Yoshimitsu_Defaultがピン、ゲート、コードに属する数少ないフラグを備えた、すぐ使えるゆるやかなスケッチを差し出す。コアはsrc/Yoshimitsu.hに、すべてのデフォルトはsrc/Yoshimitsu_Loadout.h(初期ロードアウト、*_DEFAULT値)に生きる。更新するにはライブラリをgit pull — または新しいリリースを置くだけ — スケッチはそのまま。ファームウェア更新は決して配線のやり直しではなく、決して設定のやり直しでもない。
src/Yoshimitsu.h— コア全体: 構え、CRSF、MUSHIN、JIGUANG、フラッシャー・ブリッジ。src/Yoshimitsu_Loadout.h— 初期ロードアウト: すべてのデフォルト(ピン、タイミング、ゲートレベル)を*_DEFAULT値として。library.properties— Arduinoライブラリのマニフェスト(バージョン、アーキテクチャ)。examples/Yoshimitsu_Default/— ゆるやかなスケッチ; includeの前に定義すれば何でも上書きできる。
KINCHO — CRSF→PWM 変換器
KINCHO——コンバータの構え——はUARTでCRSFを420 000 baudで読み、172–1811のチャンネル範囲から写像した988–2012 µsの窓でサーボを駆動し、500 msのフェイルセーフで中央に揃えます。受け流しとはCRC検査のこと:壊れたフレームはサーボに届く前に捨てられます。コンバータはチャンネルに無頓着です——サーボはSERVO_PIN_1..8、CHANNEL_TO_SERVO表が各サーボへ供給するCRSFチャンネルを決め、チャンネルの意味はミキサー/カーネルのもので、ボードのものでは決してありません。
- ESP32-S3:RX TX → GPIO44、RX RX → GPIO43、共通GND、共有5 Vレール。
- RP2040-Tiny:RX TX → GPIO1(UART0)、共通GND。
サーボ:
SERVO_PIN_1..3(S3ではさらに3つ)——PIN MAPブロックで上書き可能。
ジャイロ安定オーニソプターにはMANJI_DRAGONFLYを使います——同じコンバータにZephyrusリンクを加えたもの:GYRO_SDA/GYRO_SCL上の任意のMPU6050がヨーレート補正を冠羽サーボへ送ります。ジャイロ未配線なら、MANJI_DRAGONFLYは優雅にKINCHOへ退行します。市販のCRSF→PWMコンバータ基板にはジャイロ経路がまったくありません——EP2級受信機はIMUを積まないので、Zephyrusは受信機ではなくYOSHIMITSUの中に生きています。
受信機がすでにPWMを話すなら(5 chまたは7 ch基板)、コンバータの構えは一切不要です——その場合、下のMEDITATIONがS3を所有する唯一の理由になります。
KINCHOI — EP2級レシーバー用ポケットフラッシャー
問題:EP2級受信機(HappyModel EP2、EP1、EPW6、…)はキャスタレーション・パッドにCRSFを出し、極小のBOOTパッドを載せています。FTDIアダプタを使うということは、受信機の電源を入れ直す間、1 mmのパッド二つにプローブを当て続けるということ——扱いにくく、ファームウェア更新のたびに再はんだか再クリップが必要です。
解決策:ESP32-S3をフラッシャーにしましょう。GPIO一本が受信機のBOOTパッドをLOWに保持し、小さなP-MOSFETがソフトウェア制御で受信機の3.3 Vレールを切り替え、USBポートがシリアルポートになります。S3のボタンを一度押せば、ESP8285をROMブートローダーへ落とす正確な電源サイクルの舞いを演じ——その後esptoolがブリッジをまっすぐ通って書き込みます。FTDIなし、プローブなし、繰り返しのはんだ付けなし:受信機のパッドを一度だけ短いピグテールにはんだ付けして、永遠に使い回せます。
部品リスト:
| 部品 | 代表的な型番 | 費用 |
|---|---|---|
| ESP32-S3マイクロ基板(ネイティブUSB) | Waveshare ESP32-S3-Tiny / -Micro / -Nano | 約6 USD |
| Pチャネル・ロジックレベルMOSFET | AO3401(SOT-23)小型ブレイクアウト | 約1 USD |
| 抵抗10 kΩ(ゲート・プルアップ) | — | <0.10 USD |
| デュポン/ピグテール配線+熱収縮チューブ | — | 約1 USD |
| ELRS受信機、パッドにピグテール一度 | EP2 / EP1 / EPW6(SX1280 + ESP8285) | 約12 USDから |
ブリッジは、TX、RX、3V3、GND、BOOTパッドを露出するすべてのESP8285/SX1280 ELRS受信機で動きます—— ハードウェア表 にある*具体的な基板*の圧倒的多数です。もちろんS3自体もフラッシュします:BOOTボタン+USB、それがそこに必要なすべてです。
書き込みジグの配線
S3の電源を切った状態で治具を配線します。MOSFETが受信機の3.3 Vレールを切り替えます:ソース → S3 3V3、ドレイン → EP2 3V3、ゲート → S3 GPIO10(3V3へ10 kΩプルアップ、ゲートHIGH = MOSFETオフ)。GPIO9がBOOTパッドを駆動します。
| EP2 / RXパッド | ESP32-S3ピン | 機能 |
|---|---|---|
| BOOT (RX GPIO0) | GPIO9 | ブート保持ライン(LOW = ブートローダー進入) |
| 3V3 | MOSFETドレイン | 切替レール(ソース → S3 3V3、ゲート → GPIO10) |
| TX (CRSF out) | GPIO18 (U1RX) | RX → TX(交差) |
| RX (CRSF in) | GPIO17 (U1TX) | TX → RX(交差) |
| GND | GND | 共通グランド(必須) |
S3 3V3 ──► S ── P-MOSFET (AO3401) ── D ──► EP2 3V3
S3 GPIO10 ──► gate (10kΩ pull-up to 3V3; LOW = ON)
S3 GPIO9 ──► EP2 BOOT pad (asserted LOW during power-up)
S3 GPIO18 ◄── EP2 TX (U1 RX)
S3 GPIO17 ──► EP2 RX (U1 TX)
S3 GND ──► EP2 GND
フラッシュモード
MEDITATIONは透過パススルー(USB ↔ UART、115 200 baud)で起動します。フラッシュモードに入るには、S3のBOOTボタンをダブルタップします(またはUSBシリアルでFLEAと入力)。するとスケッチは:
- GPIO9をLOWに引き(BOOTパッド有効)、
- MOSFETを120 msオフにし(受信機の電源断)、
- 再びオンにして900 ms待ち(受信機がブートローダー内で起動)、
- GPIO9を解放——RXはROMブートローダーに座してesptoolを待つ、
- USB↔UARTパススルーを再開し、esptoolが対話できるようにする。
ブリッジは古典的なDTR/RTS自動リセット線を駆動できないため、必ず--before no_resetでフラッシュしてください——上の電源サイクルの舞いこそがリセットです。フラッシュ後、シングルのBOOTタップで受信機の電源が再び巡り、新しいファームウェアが起動します;ダブルタップは単にフラッシュモードへ再入するだけです。
S3経由でPteronautOSを書き込む
ファームウェアをビルドし(またはリリースを取得し)、S3のUSBシリアルポートへesptoolを実行します。macOSではポートは/dev/cu.usbmodem*と表示されます:
# 1. PteronautOSをビルド(リポジトリルートから)
pio run -e PteronautOS_ESP8285_2400_RX
# 2. RXをフラッシュモードへ落とす(FLEA入力、またはBOOTダブルタップ)、その後:
python3 -m esptool --chip esp8285 \
--port /dev/cu.usbmodemXXXX --baud 115200 \
--before no_reset write_flash \
--flash_mode dout --flash_size 1MB --flash_freq 40m \
0x0 .pio/build/PteronautOS_ESP8285_2400_RX/firmware.bin
# 3. RXをもう一度再起動(シングルBOOTタップ)して新ファームウェアを実行。
フラッシュ設定(dout、1 MB、40 MHz)は純正ESP8285 ELRSターゲットと一致します——qioやより大きなサイズは決して使わないでください。フラッシュ後、同じUSBポートが受信機のブートログを表示します:115 200 baudで開き、PteronautOSバナーと、送信機がバインドしたらCRSFリンクアップメッセージを確認してください。ブリッジはライブテレメトリのフィールドコンソールも兼ねます。
確認と初飛行
- FLEAはRXの電源を巡らせて待機させねばなりません——3.3 Vが約120 ms落ち込みます。
esptoolが
Chip is ESP8285を報告し、Hash of data verifiedで終わります。- ブートログにPteronautOSバナーと、無線オンならリンクアップメッセージが出ます。
- スティックを揺らす:サーボは滑らかに追従します;無線を切ると:翼は1秒以内に1500 µsへ中央に戻ります。
- RXが一向にブートローダーへ入らない場合は、BOOTパッドの極性(アクティブロー)と、上の電圧計テストでMOSFETの切替を確認してください。
一度フラッシュすれば、同じ受信機が飛びます——FTDIは残りません。
RP2040-Tiny ポケットビルド
Waveshare RP2040-Tiny(約5 USD)を選びましょう——または、まったく同じピン配置を共有する双子のRP2040-Zeroを。六つの構えはすべてRP2040上で読み取り可能なボタンなしに動きます:アダプタのBOOT/RESETタップはBOOTSEL/RUNのみを駆動するので、YOSHIMITSU-RP2040はUSBシリアルポートと、ボタンなしのRESETタップ計数器で操られます。
FLEA— 受信機をROMブートローダーへ落とし(MOSFET電源サイクルの舞い)、esptoolのためにUSB ↔ UARTを橋渡し。KINCHO/MANJI/NSS/BACK/MEDITATION— 構えを切替。POSE <n>— 番号で構えへ跳ぶ。STATUS— 有効なピンマップと自己診断報告を印字。HELP— 全コマンドを列挙。- 素早いRESETタップ(約2 s以内、AON RTCに対するフラッシュEEPROMで計数)が構えを進めます:1 = MANJI → 2 = NSS → 3 = BACK → 4 = MEDITATION → 5 = KINCHO。
RP2040-Tiny自体をフラッシュするには、電源循環中にBOOTを押し(大容量ストレージとしてマウントされる)、.uf2を置き、RESETを一度押します——ボードは新ファームウェアでKINCHOへ再起動します。一度設定、一度フラッシュ、二度と触れない。
RP2040-Tiny ピン配置
| 機能 | RP2040-Tinyピン | 注記 |
|---|---|---|
| CRSF RX ← 受信機TX | GPIO1 (UART0 RX) | 420 000 baud |
| CRSF TX(未使用、完全性のため配線) | GPIO0 (UART0 TX) | 交差:TX → RX |
| ブリッジRX ← 受信機TX | GPIO9 (UART1 RX) | 115 200 baud |
| ブリッジTX → 受信機RX | GPIO8 (UART1 TX) | 交差:TX → RX |
サーボ1( |
GPIO2 | PWM — |
サーボ2( |
GPIO3 | PWM |
サーボ3( |
GPIO4 | PWM |
| ジャイロSDA(MPU6050、任意) | GPIO10 | MANJI_DRAGONFLY |
| ジャイロSCL(MPU6050、任意) | GPIO11 | MANJI_DRAGONFLY |
| RX BOOT(受信機GPIO0、アクティブロー) | GPIO5 | LOW = ブートローダー進入 |
| RX PWR(P-MOSFETゲート、LOW = 給電) | GPIO6 | 切替3.3 Vレール |
| ステータスLED | GPIO16 | WS2812B |
完全なピンマップはsketches/yoshimitsu/yoshimitsu.ino先頭の編集可能ブロックです——ピン範囲と衝突はブートPOSTが検証し、不正なUART番号は空中で誤動作する代わりにビルドを拒否します。
YOSHI — 常時点灯の構えオーロラ
YOSHI(「オーロラ」)は常時点灯のチートコードです。YOSHI_RGBが唯一のオンボードWS2812Bを生きたムードリングに変えます:構えごとに自らの色と律動で呼吸するので、シリアル1バイトもなく部屋の向こうから浪人の心が読めます。色と点滅パターンが物語を語ります——追加コマンドは不要;構えこそがチートコード、光はそのこだまです。
| 構え | オーロラ(色 → 律動) |
|---|---|
KINCHO
|
ゆっくりとした緑の呼吸+鮮やかな二重の受け流しフラッシュ(CRCの一撃) |
MANJI_DRAGONFLY
|
ジャイロの回転子のように回る色相環(浮揚) |
FLEA
|
狂おしく立ち上がる琥珀のストロボ(持ち上げ) |
MEDITATION
|
ほぼ暗い菫+ゆっくりした心拍ひとつ——書き込みに備える |
NSS
|
青の鋭い三連タップフラッシュ(刃は鞘に、テンポは上へ) |
BACK_TURNED
|
ほぼ黒+予測不能な深紅の煌めきひとつ(鏡——決して振り返らない) |
RGBはRP2040-Tiny(RGB_LED_PIN=16)にYOSHI_RGBの奥で生きています;ESP32-S3は質素な状態LEDを保ちます。すべての色は純粋な整数演算——floatなし、mallocなし、delay()なし——そしてpumpRgb()は約50 fpsに絞られ、バイト厳密なフラッシャーブリッジが乱されることは決してありません。隠密の掟は保たれます:構えが変われば、光が従う。
JIGUANG — 語り部 · 解説者 · 管理者
三つの名前、ひとつの魂 — 完全攻略のチートコード三角形: YOSHIMITSUは隠秘の忍びファームウェア全体、YOSHIはRGBチートコード(常時点灯の構えオーロラ)、そしてJIGUANG(極光、「オーロラ」)は瞑想する管理者 — MEDITATIONの玉座に胡坐をかく不動の動者。Yoshimitsuの声は機能的で簡潔、JIGUANGの声は神話だ。極光は飾りではなくコンソールプロンプトだ: 管理者として振る舞うには極光と入力してからコマンドを打つ — さもなくば玉座は手の届かない場所に残る。プロンプトは#define(JIGUANG_PROMPT)なのでスケッチで改名でき、語り部全体はコンパイルゲートJIGUANG(1=遍在、0=極光のバイトはひとつもコンパイルされない)の陰に隠れる。
イースターエッグ: 極光 LEGENDと打てば、伝説のすべてが一本のASCIIスクロールとして繰り広がる — 構え、チートコード、玉座、そして死なないプロンプト。JIGUANG / jiguang / 極光は死なない — コードにも、コメントにも、このチュートリアルにも。
極光 JIGUANGで声を目覚めさせると四段階に登る: 0子羊(沈黙、ただし明示的なコマンドには応答する)、1物語(起動と構えの変更をすべて語る)、2スクロール(+ CRSFチャンネルの読み出し)、3オムニ(+ 受信機のELRSデバッグバイトをそのまま素通し)。極光 MUTEが黙らせ、極光 CRSFが16チャンネルのスクロールを印字し、極光 SCOREがアーケードのHIGHSCORE台帳を繰り広げる — 良好なCRSFフレーム、フェイルセーフ事象、ブリッジバイト、アップタイム。JIGUANGは決して構えを奪わない: 伝説が語られているあいだも、CRSFもサーボもブリッジもポーズに従い続ける。
MEDITATIONではスポンジ頭がJIGUANGの玉座だ — そして玉座は守られている: 管理者コマンドはすべてコンソールプロンプト極光で始まる。USBシリアルの天から極光 STATUS、極光 CRSF、極光 SCORE、極光 POSE、極光 DOC(チートコード目録)、極光 SETUP(ディファインの壁ではなく主要設定を案内する瞑想ウィザード)に応える。構えの変更は開かれたままだ — KINCHO、MANJI、FLEA、MEDITATION、NSS、BACK、POSE n。ポーズはかつての瞑想ポーズのようにエネルギーを節約し、浪人は書き込まれる準備をして座る。esptoolのSLIPバイトが呼んだ瞬間、玉座は透過フラッシャー・ブリッジに譲り、MEDITATIONが再び入るまでそこに留まる。YOSHI_RGBレベル3では語り部はオーロラをまとうこともある: jiguang(ms)が遅いフルスペクトルの車輪を描き、すべての構えの色をひとつの息に織り込む。
MUSHIN 無心 — 筋肉記憶のチートコード
MUSHIN(無心、「無の心」)はヒーロー機能だ — 無執着、思考より先に打つ剣。剣術において無心とは、自らを手放す心である: 見ることと為すことの間に隙は残らない。PteronautOSは精神 — 翼の波形を計画し、ブリッジ越しにサーボの意図を送る。YOSHIMITSUは計画に執着しない: ローカルのZephyrusジャイロPIDで筋肉のところで応え、次の思考がしがみつく前にサーボはすでに動いている。二つのコア、一つの一撃 — 他のどのELRS-PWMボードもこれをまとえない。
玉座から武装せよ: 極光 MUSHINが報告し、極光 MUSHIN ON/OFFが武装/解除し、その選択はフラッシュに永続する — 準備完了のまま起動する。スケッチではMUSHINはデフォルトで武装起動し、管理フラグがランタイムスイッチなので、変更のために再コンパイルすることはない。
無心プロトコルv0はフラッシャーと同じ二本の線を渡る: [0x9B][len][type][payload][xor] — 0x01インテント(精神→筋肉、n×uint16 µs)、0x02アナウンス・キープアライブ、0x03ジャイロ・テレメトリ。新鮮なインテント(500 ms以内)がサーボを駆動し、ローカルのジャイロPIDが鶏冠を保つ。線が黙れば、YOSHIMITSUは自身のCRSFの筋肉に戻る — 優雅な縮退、決して死んだスティックではない。
飛行中、分業はウィンウィンだ: 受信機が一撃の前に思考を担い(CRSF、Zephyrus、ミキサーの魂)、YOSHIMITSUが筋肉に座る仕事を担う(グリッチのないPIO PWM)。ヘリコプターでも羽ばたきでも — 剣の視点では同じことだ: 正準の軌道ひとつ、そして剣はどの器を運ぶのか決して尋ねない。ポーズは飛び続ける; 変わるのは見た目だけ。