PocketJS · ESP-IDF Host

一份 TypeScript,在 ESP32-S3 上跑原生像素

这是 PocketJS 在 StopWatch(ESP32-S3R8)上的交互演示固件:一份 TypeScript 应用(QuickJS + Rust UI Core 布局 + RGB565 软件渲染)逐帧画到那块圆 AMOLED 上。这个 Demo 是一块会动的「小球场」——彩色小球在画面里弹跳;点屏幕就在落点生成一颗新球,A / B 键分别加球 / 清空。

PocketJS 仓库 ↗
这次是交互 demo。 烧录后屏幕会亮起:PocketJS 渲染的 400×400 圆形「球场」填满圆屏,彩色小球在圆圈内弹跳(每颗带高光,像小玻璃球)。
点屏幕 = 在手指落点生成一颗球;按 A 键(GPIO2)= 在中间加球;按 B 键(GPIO1)= 清空。
看串口:同一 USB 口、115200。每 2 秒打印 RUNNING frames=… errors=…;触摸时会打印 touch raw x,y -> logical x,y(用于校准触点坐标)。
运行时

QuickJS + UI Core

应用逻辑跑在 QuickJS,布局由 Rust UI Core 逐像素求解;无 DOM / 无浏览器内核。

渲染

RGB565 软件路径

S3 走完整软件光栅;P4 才有 PPA 硬件加速。这里验证 S3 的软件路径。

工具链

IDF 6.0 · Xtensa Rust

ESP-IDF v6.0.3 + esp-rs Xtensa Rust 1.97.0-nightly;原生核从源码编译。

交互

触摸 + 按键

CST820 电容触摸(I²C @0x15,经 M5IOE1 复位)+ A/B 两枚 GPIO 按键;输入经 PocketJS 的触摸/按键模态直接进应用。

目标

ESP32-S3 (8MB PSRAM)

应用约 1.43 MB,factory 分区 4MB。面板 CO5300 QSPI AMOLED,用 esp_lcd 官方驱动。NVS 位于 0x9000,重刷不丢。