AX 爱鲜报

esp32sim ESP32 模拟器

用 Rust 编写的开源 ESP32 模拟器,可在本地或浏览器中运行真实固件,无需硬件、云服务或订阅。支持 ESP32-S3、C3、C6、经典 ESP32 与 P4,并模拟显示屏、触摸、LED、音频、摄像头与 WiFi。

爱鲜报评分

0.0

0 人评分

956

星数

否

中文

Rust

主语言

是

活跃

15

贡献者

人工分析

EDITORIAL

推荐理由

esp32sim 直接启动芯片原厂 mask ROM 与二级引导程序,运行未经修改的固件,仿真保真度远高于普通外设模拟方案。它同时提供本地 CLI 与 WebAssembly 浏览器版本,S3 借助块缓存和 JIT 可达约 30 倍实时速度,适合快速验证与演示。项目已有 956 星、MIT 协议、文档齐全,是嵌入式开发与教学场景中值得关注的工具。

适用场景

  • 无硬件时调试与验证 ESP-IDF 固件
  • 在浏览器中演示 ESP32 项目与教学
  • CI 中自动化运行固件回归测试
  • 模拟 WiFi、显示屏、摄像头等外设联调
  • 评估 Linux、MicroPython 等第三方固件在 ESP32 上的运行效果

优点

  • 完整启动链:mask ROM、bootloader、FreeRTOS 到应用,无需修改固件
  • 支持多款芯片与开发板,外设建模较全面
  • S3 具备块缓存与 JIT,运行速度可远超实时
  • 同一套模拟器提供本地 CLI 与浏览器 WebAssembly 版本
  • 文档完善,含 CLI 参考、架构、外设与硬件对比测试说明

缺点

  • 部分芯片(C3、C6、P4)仍处于草稿或早期阶段,功能有限
  • 摄像头仅支持原始 RGB565/YUV422 采集,常见 JPEG+PSRAM 路径不支持
  • 运行前需下载 mask ROM 等资源,仓库内不直接包含
  • 项目为非官方实现,与乐鑫无关联,兼容性需自行验证
上手难度 进阶

项目概览

esp32sim 是一个用 Rust 编写的开源 ESP32 模拟器。它的目标很直接:在没有硬件的情况下运行真实的 ESP32 固件。既可以在本地命令行运行,也可以直接在浏览器标签页中启动,不需要云服务或订阅。

与常见的“外设模拟”不同,esp32sim 会启动芯片自带的 mask ROM、真实的二级引导程序,然后加载你未经修改的应用程序,因此更接近真实芯片的行为。

支持的芯片与开发板

芯片 CPU 状态
ESP32-S3 2 × Xtensa LX7 成熟
ESP32-C3 RISC-V RV32IMC 草稿
ESP32-C6 RISC-V RV32IMAC 草稿
ESP32(经典) 2 × Xtensa LX6 早期
ESP32-P4 2 × RISC-V RV32IMAFC 草稿

S3 已适配多款开发板,包括 Atech 14 口套件、Waveshare Touch-LCD-4B、Touch-AMOLED-1.8 与 ESP32-S3-CAM;经典 ESP32 支持 LilyGO TTGO T-Display、AI-Thinker ESP32-CAM 与 Ulanzi TC001。

核心特性

  • 完整启动链:mask ROM → bootloader → FreeRTOS → 应用,无需打补丁的固件。
  • WiFi 模拟:使用未修改的乐鑫 WiFi 库,固件可加入虚拟接入点,获得 DHCP、DNS、NTP,并能访问真实网络(含 HTTPS)。
  • 板级建模:固件可以驱动显示屏、读取触摸、点亮 LED、播放声音。
  • 性能:S3 具备块缓存与 JIT,运行 hello_world 约为实时的 30 倍。
  • 浏览器版本:同一模拟器编译为 WebAssembly,可直接在网页中运行。
  • 与真实芯片对比:S3 通过 JTAG 锁步对比,C3/C6 通过串口输出差异对比。

快速体验

不想安装 Rust 也可以:项目的 Releases 页面提供 macOS 与 Linux 预编译二进制。官方还提供在线演示站,打开浏览器即可试用。

从源码构建的基本流程如下(示意):

cargo build --release
tools/fetch-demo-assets.sh --no-linux   # 下载仓库中未包含的 mask ROM

./target/release/esp32sim --boot rom --rom <rom.elf> \
    --bootloader <bootloader.bin> --ptable <ptable.bin> --app <app.bin> \
    --script <script.txt> --wav out.wav --tft-png tft.png --max-seconds 5

该示例会启动固件、执行一段脚本,并把音频保存为 WAV、把屏幕输出保存为 PNG。其他芯片可使用 esp32sim-c3、esp32sim-c6、esp32sim-p4 或 --chip esp32。

演示项目

官方演示站上可以运行多个真实项目,例如:

  • 在 ESP32-S3 上运行 Linux 6.11,并带登录 shell;
  • Atech 套件的 Pocket Synth 与 C64 SID 音乐盒;
  • 480×480 的 LVGL 触摸面板与 SID 播放器;
  • 由小型 Transformer 模型控制鱼群游动的 pocket-tank;
  • ESP32-C6 上的 802.15.4 能量扫描器与两个运行 RPL/IPv6 的 Contiki-NG 节点;
  • 经典 ESP32 T-Display 上的 MicroPython。

适用与限制

esp32sim 适合固件调试、CI 自动化测试、教学演示以及无硬件环境下的快速验证。需要注意的是,C3、C6、P4 仍处于草稿阶段;摄像头仅支持原始 RGB565/YUV422 采集,常见的 JPEG+PSRAM CameraWebServer 路径尚不支持;运行前通常需要额外下载 mask ROM 等资源。

项目采用 MIT 协议,由 RISE 的 Joakim Eriksson 等人维护,属于非官方实现,与乐鑫科技无隶属关系。

评论

登录后才可评论与评分

0 条评论

  • 暂无评论,来写第一条吧。