Migrate to Waveshare ESP32-S3-Touch-AMOLED-2.16 with auto-rotation, splash, and battery
Full hardware swap from Panlee SC01 Plus (480×320 IPS) to Waveshare 2.16" square AMOLED (480×480, CO5300 + CST9220 + AXP2101 + QMI8658). Library stack moves to Arduino_GFX, SensorLib, XPowersLib on the pioarduino platform 55.03.38-1 (Arduino Core 3.x). UI: - 4 screens (splash, usage, controller, bluetooth) with 3-button physical navigation: GPIO 0 = prev, AXP PKEY = cycle, GPIO 18 = next. - IMU-driven 90° auto-rotation. CO5300 can't rotate via MADCTL, so flush callback does CPU strip-rotation in PARTIAL render mode. Rotation transitions use AMOLED brightness flash (instant black → redraw → ramp). - Battery indicator (Lucide icons) in upper-right, RGB565A8 alpha so it blends over the splash animations. - USB plugged/unplugged auto-switches between Usage and Controller screens (suppressed while on splash). - Fonts and icons re-scaled ~1.9× for the higher-DPI panel; 20px margins to clear rounded corners. Splash: - 13 × 20×20 pixel-art creature animations sourced from claudepix.vercel.app via tools/scrape_claudepix.js (scraper handles both PRESET creature-engine and standalone FRAMES+PAL formats). tools/convert_to_c.js emits firmware/src/splash_animations.h. Attribution preserved in README and the generated header. Tooling: - tools/png_to_lvgl.js converts alpha PNGs to LVGL RGB565A8 (planar layout, with --tint to colorize Lucide black-on-transparent sources). - tools/scrape_claudepix.js, tools/convert_to_c.js for the splash pipeline. Docs: - New worktree CLAUDE.md with hardware pin map, file inventory, build commands, and the 8 critical gotchas (CO5300 rotation, OPI PSRAM, pioarduino requirement, LVGL 9 font patching, centralized touch read, even-aligned flush regions, touch swap/mirror values, RGB565A8 layout). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
After Width: | Height: | Size: 933 B |
|
After Width: | Height: | Size: 929 B |
|
After Width: | Height: | Size: 704 B |
@@ -0,0 +1,6 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="m11 7-3 5h4l-3 5" />
|
||||
<path d="M14.856 6H16a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.935" />
|
||||
<path d="M22 14v-4" />
|
||||
<path d="M5.14 18H4a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h2.936" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 373 B |
|
After Width: | Height: | Size: 737 B |
|
After Width: | Height: | Size: 505 B |
@@ -0,0 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M10 10v4" />
|
||||
<path d="M14 10v4" />
|
||||
<path d="M22 14v-4" />
|
||||
<path d="M6 10v4" />
|
||||
<rect x="2" y="6" width="16" height="12" rx="2" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 338 B |
|
After Width: | Height: | Size: 497 B |
|
After Width: | Height: | Size: 473 B |
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M22 14v-4" />
|
||||
<path d="M6 14v-4" />
|
||||
<rect x="2" y="6" width="16" height="12" rx="2" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 291 B |
|
After Width: | Height: | Size: 500 B |
|
After Width: | Height: | Size: 491 B |
@@ -0,0 +1,6 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M10 14v-4" />
|
||||
<path d="M22 14v-4" />
|
||||
<path d="M6 14v-4" />
|
||||
<rect x="2" y="6" width="16" height="12" rx="2" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 316 B |
|
After Width: | Height: | Size: 509 B |
|
After Width: | Height: | Size: 429 B |
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M 22 14 L 22 10" />
|
||||
<rect x="2" y="6" width="16" height="12" rx="2" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 273 B |
|
After Width: | Height: | Size: 486 B |
|
After Width: | Height: | Size: 581 B |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 535 B |
|
After Width: | Height: | Size: 644 B |