Tested on M5Stack CoreS3: routed Claude Code, Codex, and Antigravity completion hooks to StackChan via Tailscale. Fixed audio stutter by raising I2S speaker buffer to 1024.
Tested SCD41 on M5Stack CoreS3 StackChan: sent CO2 and temp to voice server via POST /context, replaced phantom petting touch with servo head gestures for Qwen LLM.
Tested on M5Stack CoreS3 with StackChan Body: capacitive touch (Si12T) kept triggering phantom taps and petting without contact, forcing a switch back to a Key unit.
Tested on CoreS3 StackChan: rebuilt Arduino voice chat under ESP-IDF 5.5.4 with arduino-esp32 component to connect via Tailscale direct UDP, fixing touch sensor bounce.
Tested on CoreS3: switched Tailscale from Tokyo DERP to direct UDP. Fixing DISCO, lwIP double locking, and HTTP/2 window starvation cut WAV fetch from 9s to 2.4s.
Tested on CoreS3 + StackChan Body: head taps caused ghost recordings and phantom Qwen3-ASR replies. Fixed across 3 tiers with VAD, emotion tags, and lip sync.
Tested on CoreS3 + StackChan Body: replaced 128x128 pixel art with 320x240 character art using Qwen-Image 2.1 diffs, layered in PSRAM for 5-emotion tap switching.
Tested on CoreS3 + StackChan Body: the 3-zone head pad works as a talk button, strokes need a 30–400 ms gap between zones, and servo motion leaves touch stuck until recalibrate().
ESP32-S3 CoreS3 joined Tailscale and fetched a WAV without the VPS relay. Tokyo DERP downloads took about 9 seconds after enrollment, stack, and TLS fixes.
Step-by-step physical assembly guide for transplanting an M5Stack CoreS3 into the official StackChan Body. Detaching DIN Base, 4-pin wiring, and initial boot test.
CoreS3 voice chat rebuilt on action=async: filler on job_id, 0.7s polls, gapless sentence chunks, 8.3s to first reply, plus a Key unit (U144) talk button with port auto-detect.
Tested on a CoreS3: talk into the mic, get a spoken reply. 44-byte RIFF header on the PCM buffer, HTTPClient multipart POST built in PSRAM, 12.4–13.8s sync round trips.