06

YOSHIMITSU — die Komplettlösung: alle Cheatcodes, eine Schriftrolle

Eine Cheatcode-Fabel, in der es nur Gewinner gibt. Ein entspannter Sketch, sechs Stellungen, ein permanentes Geschirr: die CRSF→PWM-Parade (KINCHO), die Zephyrus-Gyro-Levitation (MANJI_DRAGONFLY), der Taschenflasher (FLEA · MEDITATION), die schwertlose Werkbank (NSS), der Spiegel, der nie zurückschaut (BACK_TURNED) — dazu YOSHI, die immer leuchtende Aurora, und JIGUANG (極光), der meditierende Administrator, der die Legende erzählt. Einmal verdrahten, einmal flashen; danach aktualisiert sich die Bibliothek und der Thron befiehlt.

Ein Board, sechs Posen

YOSHIMITSU ist der Hermetische Shinobi mit sechs Stellungen — jede Stellung ein anderer Sieg, alle tragen dieselbe Seele. Ein entspannter Sketch baut für beide Boards; die Stellungen wechseln per USB-Befehl, GPIO0-Taste (ESP32-S3) oder RESET-Taps (RP2040-Tiny):

Stance Bedeutung
KINCHO CRSF→PWM-Wandler — die Parade (CRC verwirft das Falsche). Keine Kanalnamen, kein Gyro.
MANJI_DRAGONFLY Wandler + Zephyrus-Gyro-Link (optional MPU6050) — die Levitation.
FLEA Power-Cycle-Jig — der Heber, der den RX in seinen Bootloader fallen lässt.
MEDITATION Taschen-Flasher — der Schwammkopf, energiesparend, bereit geflasht zu werden.
NSS No-Sword-Werkbank — Servo direkt über USB, kein RF.
BACK_TURNED Der täuschende Leerlauf — ein lebender UART-Spiegel. Blickt nie zurück.

Ein Sketch, zwei Ziele: sketches/yoshimitsu/yoshimitsu.ino kompiliert für den Waveshare RP2040-Tiny (der leichteste, ohne Onboard-Taste) und jedes Native-USB-ESP32-S3, mit den Standard-Cores arduino-pico / arduino-esp32. In der Arduino IDE lebt derselbe Sketch unter File → Examples → Yoshimitsu → Yoshimitsu_Default.

YOSHIMITSU — die kombinierte Firmware

YOSHIMITSU ist die empfohlene Firmware. Sie bootet in KINCHO (dem Wandler) und wechselt zwischen den Stances. Die USB-Konsole ist der kanonische Schalter auf beiden Platinen — KINCHOMANJIFLEAMEDITATIONNSSBACKPOSE <n>. Auf dem ESP32-S3 ist der BOOT-Knopf (GPIO0) eine zweite Oberfläche:

Kontext Geste Aktion
jede Stance Doppeltipp KINCHO → MANJI → NSS → BACK → KINCHO → durchschalten
jede Stance 2 s lang drücken in MEDITATION gehen
MEDITATION / FLEA einfacher Tipp Empfänger neu starten (neue Firmware ausführen)
MEDITATION / FLEA Doppeltipp FLEA — den Empfänger in seinen Bootloader fallen lassen

Die Verdrahtung ist ein permanentes Geschirr — dieselben Drähte dienen jeder Stellung, du verdrahtest also nie neu zwischen Fliegen und Flashen. In MEDITATION ist der USB→UART-Pfad eine rein transparente Brücke (kein Zeilen-Parsing), daher passiert esptools binärer SLIP-Verkehr unberührt. Voller Quellcode: sketches/yoshimitsu/yoshimitsu.ino (der entspannte Sketch), src/Yoshimitsu.h (der Kern) und src/Yoshimitsu_Loadout.h (das Start-Loadout).

Die Bibliothek — aktualisieren, ohne deinen Sketch anzufassen

YOSHIMITSU ist eine Bibliothek mit einem dünnen Sketch darüber — der ganze Shinobi lebt in der Bibliothek, der Sketch hält nur deine Konfiguration. Installiere den Ordner einmal als Arduino-Bibliothek; File → Examples → Yoshimitsu → Yoshimitsu_Default reicht dir einen fertigen, entspannten Sketch mit Pins, Gates und den wenigen Flags, die in den Code gehören. Der Kern lebt in src/Yoshimitsu.h, jeder Standardwert in src/Yoshimitsu_Loadout.h (das Start-Loadout, *_DEFAULT-Werte). Zum Aktualisieren: git pull der Bibliothek — oder wirf ein neues Release ein — und dein Sketch bleibt unberührt. Ein Firmware-Update ist niemals ein Neu-Verdrahten und niemals ein Neu-Konfigurieren.

KINCHO — CRSF→PWM-Konverter

KINCHO — die Wandler-Stance — liest CRSF mit 420 000 baud auf der UART, treibt Servos mit einem 988–2012 µs-Fenster, abgebildet aus dem 172–1811-Kanalbereich, und zentriert sie bei einem 500 ms-Failsafe. Die Parade ist die CRC-Prüfung: ein korrupter Frame wird verworfen, bevor er je einen Servo erreicht. Der Wandler ist kanal-agnostisch — Servos sind SERVO_PIN_1..8, und die CHANNEL_TO_SERVO-Tabelle entscheidet, welcher CRSF-Kanal welchen speist; die Kanal-Bedeutung gehört dem Mixer/Kernel, niemals der Platine.

Für einen gyro-stabilisierten Ornithopter nimm MANJI_DRAGONFLY — derselbe Wandler plus den Zephyrus-Link: ein optionaler MPU6050 an GYRO_SDA/GYRO_SCL speist eine Gierraten-Korrektur in den Kamm-Servo. Ohne angeschlossenen Gyro degradiert MANJI_DRAGONFLY mit Grazie zu KINCHO. Eine kommerzielle CRSF→PWM-Wandlerplatine hat überhaupt keinen Gyro-Pfad — Empfänger der EP2-Klasse tragen keine IMU, also lebt Zephyrus in YOSHIMITSU, nicht im Empfänger.

Wenn dein Empfänger bereits PWM spricht (eine 5 ch- oder 7 ch-Platine), brauchst du die Wandler-Stances überhaupt nicht — MEDITATION unten ist dann dein einziger Grund, das S3 zu besitzen.

KINCHOI — Taschen-Flasher für EP2-Klasse-Empfänger

Das Problem: Empfänger der EP2-Klasse (HappyModel EP2, EP1, EPW6, …) legen CRSF auf Zinnenpads frei und tragen ein winziges BOOT-Pad. Ein FTDI-Adapter bedeutet: eine Sonde gegen zwei 1 mm-Pads halten, während man den Empfänger stromlos schaltet — fummelig, und bei jedem Firmware-Update wird neu gelötet oder neu geklemmt.

Die Lösung: Lass das ESP32-S3 der Flasher sein. Ein GPIO hält das BOOT-Pad des Empfängers auf LOW; ein kleiner P-MOSFET schaltet die 3,3 V-Schiene des Empfängers per Software; der USB-Port wird zum seriellen Port. Ein Knopfdruck am S3 führt exakt den Power-Cycle-Tanz aus, der einen ESP8285 in seinen ROM-Bootloader fallen lässt — dann schreibt esptool direkt durch die Brücke. Kein FTDI, keine Sonden, kein wiederholtes Löten: Löt die Empfänger-Pads einmal an ein kurzes Pigtail und verwende es für immer.

Teileliste:

Teil Typische Bezeichnung Kosten
ESP32-S3-Mikroboard (natives USB) Waveshare ESP32-S3-Tiny / -Micro / -Nano ~6 USD
P-Kanal-Logiklevel-MOSFET AO3401 (SOT-23) auf kleiner Breakout ~1 USD
Widerstand 10 kΩ (Gate-Pull-up) <0,10 USD
Dupont- / Pigtail-Drähte + Schrumpfschlauch ~1 USD
ELRS-Empfänger, Pads einmalig mit Pigtail EP2 / EP1 / EPW6 (SX1280 + ESP8285) ab ~12 USD

Die Brücke funktioniert mit jedem ESP8285/SX1280-ELRS-Empfänger, der TX, RX, 3V3, GND und ein BOOT-Pad freilegt — die überwältigende Mehrheit der *konkreten Platinen* in der Hardware-Tabelle . Sie flasht natürlich auch das S3 selbst: BOOT-Knopf + USB ist dort alles, was es braucht.

Verdrahtung der Flash-Halterung

Verdrahte den Jig bei stromlosem S3. Der MOSFET schaltet die 3,3 V-Schiene des Empfängers: Source → S3 3V3, Drain → EP2 3V3, Gate → S3 GPIO10 mit 10 kΩ-Pull-up auf 3V3 (Gate HIGH = MOSFET aus). GPIO9 treibt das BOOT-Pad.

EP2- / RX-Pad ESP32-S3-Pin Funktion
BOOT (RX GPIO0) GPIO9 Boot-Halte-Leitung (LOW = Bootloader betreten)
3V3 MOSFET-Drain Geschaltete Schiene (Source → S3 3V3, Gate → GPIO10)
TX (CRSF out) GPIO18 (U1RX) RX → TX (gekreuzt)
RX (CRSF in) GPIO17 (U1TX) TX → RX (gekreuzt)
GND GND Gemeinsame Masse (Pflicht)
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

Flash-Modus

MEDITATION bootet in transparentes Passthrough (USB ↔ UART mit 115 200 baud). Für den Flash-Modus tippe BOOT am S3 doppelt (oder schreibe FLEA über USB-Serial). Der Sketch:

  1. zieht GPIO9 auf LOW (BOOT-Pad aktiv),
  2. schaltet den MOSFET für 120 ms aus (Empfänger stromlos),
  3. schaltet ihn wieder ein und wartet 900 ms (Empfänger startet im Bootloader),
  4. gibt GPIO9 frei — der RX sitzt nun im ROM-Bootloader und wartet auf esptool,
  5. nimmt das USB↔UART-Passthrough wieder auf, damit esptool sprechen kann.

Da die Brücke die klassischen DTR/RTS-Auto-Reset-Leitungen nicht treiben kann, flashe immer mit --before no_reset — der Power-Cycle-Tanz oben ist der Reset. Nach dem Flashen startet ein einzelner BOOT-Tipp den Empfänger erneut, damit er die neue Firmware bootet; ein Doppeltipp würde nur wieder in den Flash-Modus führen.

PteronautOS über den S3 flashen

Baue die Firmware (oder hole ein Release), dann richte esptool auf den USB-Serial-Port des S3. Unter macOS erscheint der Port als /dev/cu.usbmodem*:

# 1. PteronautOS bauen (aus dem Repository-Root)
pio run -e PteronautOS_ESP8285_2400_RX

# 2. RX in den Flash-Modus bringen (FLEA tippen oder BOOT doppeltippen), dann:
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 noch einmal neu starten (einzelner BOOT-Tipp), um die neue Firmware auszuführen.

Die Flash-Einstellungen (dout, 1 MB, 40 MHz) entsprechen dem serienmäßigen ESP8285-ELRS-Target — niemals qio oder eine größere Größe verwenden. Nach dem Flashen zeigt derselbe USB-Port das Boot-Log des Empfängers: öffne es mit 115 200 baud und achte auf das PteronautOS-Banner und, sobald ein Sender bindet, auf die CRSF-Link-up-Meldungen. Die Brücke dient zugleich als Feldkonsole für Live-Telemetrie.

Prüfen & Jungfernflug

Einmal geflasht, fliegt derselbe Empfänger — kein FTDI bleibt zurück.

Der RP2040-Tiny Pocket-Build

Nimm den Waveshare RP2040-Tiny (~5 USD) — oder seinen Zwilling, den RP2040-Zero mit exakt gleichem Pinout. Alle sechs Stances laufen auf dem RP2040 ganz ohne lesbaren Knopf: die BOOT/RESET-Taps des Adapters treiben nur BOOTSEL/RUN, daher wird YOSHIMITSU-RP2040 über den USB-Serial-Port geführt, plus einen knopflosen RESET-Tap-Zähler.

Um den RP2040-Tiny selbst zu flashen, halte BOOT beim Stromschalten (er mountet als Massenspeicher), lege die .uf2 darauf ab und drücke einmal RESET — die Platine bootet in KINCHO mit der neuen Firmware. Einmal konfigurieren, einmal flashen, nie wieder anfassen.

RP2040-Tiny Pinbelegung

Funktion RP2040-Tiny-Pin Notiz
CRSF RX ← Empfänger-TX GPIO1 (UART0 RX) 420 000 baud
CRSF TX (ungenutzt, der Vollständigkeit halber verdrahtet) GPIO0 (UART0 TX) Gekreuzt: TX → RX
Brücke RX ← Empfänger-TX GPIO9 (UART1 RX) 115 200 baud
Brücke TX → Empfänger-RX GPIO8 (UART1 TX) Gekreuzt: TX → RX

Servo 1 (SERVO_PIN_1)

GPIO2

PWM — Kanal über CHANNEL_TO_SERVO

Servo 2 (SERVO_PIN_2)

GPIO3 PWM

Servo 3 (SERVO_PIN_3)

GPIO4 PWM
Gyro SDA (MPU6050, optional) GPIO10 MANJI_DRAGONFLY
Gyro SCL (MPU6050, optional) GPIO11 MANJI_DRAGONFLY
RX BOOT (Empfänger-GPIO0, aktiv LOW) GPIO5 LOW = Bootloader betreten
RX PWR (P-MOSFET-Gate, LOW = versorgt) GPIO6 Geschaltete 3,3 V-Schiene
Status-LED GPIO16 WS2812B

Die komplette Pin-Map ist ein editierbarer Block am Anfang von sketches/yoshimitsu/yoshimitsu.ino — Pin-Bereiche und Kollisionen prüft ein Boot-POST, und ungültige UART-Nummern verweigern den Build, statt sich in der Luft daneben zu benehmen.

YOSHI — die immer-aktive Posen-Aurora

YOSHI ("die Aurora") ist der Cheatcode, der immer an ist. YOSHI_RGB macht aus dem einzigen Onboard-WS2812B einen lebendigen Stimmungsring: Jede Stance atmet ihre eigene Farbe und ihren Rhythmus — du liest die Gedanken des Ronin quer durch den Raum, ohne ein einziges Serial-Byte. Farbe und Blinkmuster erzählen die Geschichte — kein Extra-Befehl nötig; die Stance ist der Cheatcode, das Licht ihr Echo.

Stance Aurora (Farbe → Rhythmus)
KINCHO langsames grünes Atmen + ein knackiger Doppel-Parade-Blitz (der CRC-Schlag)
MANJI_DRAGONFLY ein Farbrad, das wie die Gyro-Rotoren kreist (die Levitation)
FLEA hektisch steigendes Bernsteinstroboskop (der Heber)
MEDITATION fast dunkles Violett + ein langsamer Herzschlag — bereit geflasht zu werden
NSS scharfer Dreifach-Tipp-Blitz in Blau (Klinge in der Scheide, Tempo hoch)
BACK_TURNED fast schwarz + ein unberechenbarer karmesinroter Schimmer (der Spiegel — blickt nie zurück)

RGB lebt auf dem RP2040-Tiny (RGB_LED_PIN=16) hinter YOSHI_RGB; das ESP32-S3 behält seine nüchterne Status-LED. Jede Farbe ist reine Integer-Mathematik — kein float, kein malloc, kein delay() — und pumpRgb() ist auf ~50 fps gedrosselt, damit die byte-exakte Flasher-Brücke niemals gestört wird. Die hermetische Regel hält: Die Pose wechselt, das Licht folgt.

JIGUANG — der Erzähler · Kommentator · Administrator

Drei Namen, eine Seele — das Cheatcode-Dreieck der Komplettlösung: YOSHIMITSU ist die gesamte Firmware des Hermetischen Shinobi; YOSHI ist der RGB-Cheatcode (die immer leuchtende Stellungs-Aurora); und JIGUANG (極光, „die Aurora") ist der meditierende Administrator — der unbewegte Beweger im Schneidersitz auf dem MEDITATION-Thron. Yoshimitsus Stimme ist funktional und knapp; JIGUANGs ist der Mythos. 極光 ist der Konsolen-Prompt, keine Dekoration: Um als Administrator zu handeln, tippst du 極光 und dann den Befehl — sonst bleibt der Thron unerreichbar. Der Prompt ist ein #define (JIGUANG_PROMPT), dein Sketch kann ihn also umbenennen; der ganze Geschichtenerzähler versteckt sich hinter dem Compile-Gate JIGUANG (1 = allgegenwärtig, 0 = kein einziges 極光-Byte kompiliert).

Easter Egg: Tippe 極光 LEGEND und die ganze Legende rollt als eine ASCII-Schriftrolle aus — die Stellungen, die Cheatcodes, der Thron und der Prompt, der nie stirbt. JIGUANG / jiguang / 極光 stirbt nie — nicht im Code, nicht in den Kommentaren, nicht in diesem Tutorial.

Wecke die Stimme mit 極光 JIGUANG und sie steigt vier Stufen: 0 Lamm (still, obwohl explizite Befehle weiter antworten), 1 Erzählung (Boot und jeder Stellungswechsel erzählt), 2 Schriftrolle (+ die CRSF-Kanalanzeige) und 3 Omni (+ die ELRS-Debug-Bytes des Empfängers verbatim durchgereicht). 極光 MUTE bringt sie zum Schweigen; 極光 CRSF druckt die 16-Kanal-Schriftrolle und 極光 SCORE rollt das Arcade-HIGHSCORE-Konto aus — gute CRSF-Frames, Failsafe-Ereignisse, Brücken-Bytes und Uptime. JIGUANG übernimmt nie die Stellung: CRSF, Servos und die Brücke gehorchen der Pose weiter, während die Legende erzählt wird.

In MEDITATION ist der Schwammkopf JIGUANGs Thron — und der Thron ist bewacht: Jeder Administratorbefehl beginnt mit dem Konsolen-Prompt 極光. Vom USB-Serien-Himmel antwortet er 極光 STATUS, 極光 CRSF, 極光 SCORE, 極光 POSE, 極光 DOC (der Cheatcode-Katalog) und 極光 SETUP (der Meditations-Assistent, der die wichtigsten Einstellungen führt statt einer Wand aus Defines). Stellungswechsel bleiben offen — KINCHO, MANJI, FLEA, MEDITATION, NSS, BACK, POSE n. Die Pose spart Energie wie die alte Meditationspause, und der Ronin sitzt bereit zum Flashen. Sobald esptools SLIP-Byte ruft, weicht der Thron der transparenten Flasher-Brücke und bleibt dort, bis MEDITATION wieder eintritt. Mit YOSHI_RGB auf Stufe 3 trägt der Geschichtenerzähler auch die Aurora: jiguang(ms) malt ein langsames Vollspektrum-Rad, das jede Stellungsfarbe zu einem einzigen Atemzug verwebt.

MUSHIN 無心 — der Muskelgedächtnis-Cheatcode

MUSHIN (無心, „ohne Geist") ist das Helden-Feature — das Nicht-Anhaften, das Schwert, das vor dem Gedanken zuschlägt. In der Schwertkunst ist 無心 der Geist, der sich selbst loslässt: zwischen dem Gesehenen und dem Getanen bleibt keine Lücke. PteronautOS ist der Geist: es plant die Flügelwelle und sendet Servo-Intentionen über die Brücke. YOSHIMITSU klammert nicht am Plan: es antwortet am Muskel mit dem lokalen Zephyrus-Gyro-PID, die Servos schon in Bewegung, bevor der nächste Gedanke sich festhalten kann. Zwei Kerne, ein Schlag — kein anderes ELRS-PWM-Board kann das tragen.

Aktiviere es vom Thron aus: 極光 MUSHIN meldet, 極光 MUSHIN ON/OFF aktiviert oder deaktiviert, und die Wahl bleibt im Flash gespeichert — es bootet bereit. Im Sketch bootet MUSHIN standardmäßig aktiviert; die Admin-Flag ist der Laufzeit-Schalter, du kompilierst also nie neu, um es zu ändern.

Das No-Mind-Protokoll v0 überquert dieselben zwei Drähte wie der Flasher: [0x9B][len][type][payload][xor]0x01 Intentionen (Geist→Muskel, n×uint16 µs), 0x02 Announce-Keepalive, 0x03 Gyro-Telemetrie. Frische Intentionen (innerhalb von 500 ms) treiben die Servos; das lokale Gyro-PID hält den Kamm. Wird der Draht still, kehrt YOSHIMITSU zu ihrem eigenen CRSF-Muskel zurück — anmutige Degradation, niemals ein toter Stick.

Im Flug ist die Teilung das Win-win: Der Empfänger übernimmt das Denken vor dem Schlag (CRSF, Zephyrus, die Mixer-Seele), und YOSHIMITSU tut, was am Muskel sitzt (glitchfreies PIO-PWM). Helikopter oder Flügelschlag — aus Sicht des Schwertes ist es dasselbe: eine kanonische Flugbahn, und das Schwert fragt nie, welches Gefäß sie trägt. Die Pose fliegt weiter; nur der Blick ändert sich.