<p align="center">
<img src="https://raw.githubusercontent.com/mikroverk/esp32sim/HEAD/docs/assets/esp32sim-logo-icon.png" alt="esp32sim 로고: 에뮬레이터 창 속 웃는 칩" width="240">
</p>
esp32sim
esp32sim은 Rust로 작성된 ESP32 에뮬레이터입니다. 하드웨어 없이 컴퓨터 또는 브라우저 탭에서 실제 ESP32 펌웨어를 실행합니다.
칩 자체의 마스크 ROM, 실제 세컨드 스테이지 부트로더(second-stage bootloader), 그리고 수정되지 않은 애플리케이션을 부팅합니다.
또한 칩 주변 보드도 모델링합니다: 디스플레이, 터치, LED, 버튼, 오디오, 카메라 및 WiFi를 표시합니다.
설치할 것이 없으니 브라우저에서 사용해 보세요: https://mikroverk.github.io/esp32sim/
지원되는 칩 (Supported chips)
| Chip | CPU | Status | Boards |
|---|
| ESP32-S3 | 2 x Xtensa LX7 | mature | Atech 14-port kit, Waveshare Touch-LCD-4B, Touch-AMOLED-1.8, ESP32-S3-CAM |
| ... | | | |
기능 (Features)
- 전체 부팅 체인: 마스크 ROM, 부트로더(bootloader), FreeRTOS, 그리고 앱까지. 패치된 펌웨어 없음.
- 수정되지 않은 Espressif WiFi 라이브러리를 사용한 WiFi. 펌웨어가 가상 액세스 포인트에 연결하고, DHCP, DNS 및 NTP를 받아 실제 네트워크에 도달할 수 있으며 HTTPS도 포함됩니다.
- 보드 모델링: 따라서 펌웨어가 디스플레이에 그릴 수 있고, 터치를 읽고, LED를 켜고, 소리를 재생할 수 있습니다.
- 속도: S3는 블록 캐시(block cache)와 JIT를 가지고 있어 실제 시간보다 약 30배 빠르게 hello_world를 실행합니다.
- 브라우저용 동일 에뮬레이터의 WebAssembly 빌드.
- 실제 칩과의 비교: JTAG lock-step 방식의 S3, 콘솔 diff 방식의 C3 및 C6. 하드웨어 테스트 참조.
데모 (Demos)
이들은 데모 사이트에서 실행됩니다:
- ESP32-S3에서 실행되는 Linux 6.11 (svermigo/Linux-on-esp32-S3) 및 로그인 셸.
- Atech 키트의 Pocket Synth와 C64 SID 주크박스 (atech-firmware).
- SID 플레이어가 탑재된 480x480 해상도의 LVGL 터치 패널.
- 작은 변압기 모델이 물고기를 조종하는 pocket-tank.
- ESP32-C6에서 실행되는 802.15.4 에너지 스캐너와 RPL/IPv6을 구동하는 두 개의 Contiki-NG 모트.
- 클래식 ESP32 T-Display의 MicroPython.
사용자 자신의 펌웨어도 모든 칩에 로드할 수 있습니다.
빠른 시작 (Quick start)
cargo build --release
tools/fetch-demo-assets.sh --no-linux
...
이 명령어는 Atech 신스 펌웨어를 부팅하고, 짧은 스크립트를 재생하며, 오디오를 out.wav로, 디스플레이를 tft.png로 저장합니다. 다른 칩의 경우 esp32sim-c3, esp32sim-c6 또는 --chip esp32를 사용하십시오.
시작하기 (Getting started)에서 나머지 내용을 다룹니다: 사용자 자신의 ESP-IDF 빌드, 각 칩, WiFi, 스크립트, 브라우저 빌드 및 디버깅.
문서화 (Documentation)
기여 (Contributing)
버그 수정, 주변 장치, 보드 및 새로운 칩에 대한 기여를 환영합니다. CONTRIBUTING.md에는 풀 리퀘스트(pull request)가 필요한 내용이 나열되어 있습니다. 이는 CI가 실행하는 것과 동일한 검사입니다.
크레딧 및 라이선스 (Credits and license)
esp32sim은 MIT License에 따라 공개되었습니다.
저자: Joakim Eriksson, RISE (@joakimeriksson),
Alice (@aliceisjustplaying) 및
Mattia Fiumara, Schematik (@mfiumara), 그리고
기타 기여자.
이 에뮬레이터는 ESP-IDF 레지스터 헤더, ESP-IDF와 함께 제공되는 Xtensa 코어 구성, RISC-V 사양, 칩의 기술 참조 매뉴얼 및 관찰된 펌웨어 동작을 기반으로 작성되었습니다. QEMU는 명령어 의미론(instruction semantics) 확인 목적으로만 참고되었으며, 코드는 복사되지 않았습니다.
esp32sim은 비공식이며 Espressif Systems와 제휴하지 않습니다.
제3자 코드, 데이터 및 데모 파일은 자체 라이선스를 유지합니다:
- pocket-tank (mediacutlet/pocket-tank, MIT). 부트로더(bootloader), 파티션 테이블(partition table) 및 앱은
web/wasm/fw/public/에 있으며, pocket-tank-LICENSE.txt를 따릅니다. 모델은 다운로드되었습니다.
- MicroPython (micropython.org, MIT): T-Display 데모에서 사용된 공식 ESP32_GENERIC v1.29.0 이미지는
tools/fetch-micropython.sh를 통해 다운로드되었으며, 리포지토리에는 포함되어 있지 않습니다. 데모의 앱 및 파일 시스템은 examples/ttgo-tdisplay에 있으며, Russ Hughes의 st7789py 드라이버와 폰트(MIT)가 사용되었습니다. 관련 고지는 web/wasm/fw/public/tdisplay-NOTICE.txt에 있습니다.
- Mask ROM ELF (espressif/esp-rom-elfs, Apache-2.0): 다운로드되었으며, 리포지토리에는 포함되어 있지 않습니다.
- xterm.js (xtermjs/xterm.js, MIT): 다운로드되었으며, 리포지토리에는 포함되어 있지 않습니다.
- Linux 이미지 (svermigo/Linux-on-esp32-S3, GPL-3.0): 다운로드되었으며, 리포지토리에는 포함되어 있지 않습니다.
- ESP-IDF ADC 보정 데이터 (Espressif, Apache-2.0):
esp-periph/src/sar_adc.rs에 있는 커브 피팅 계수(curve-fitting coefficients)와 #165의 S3 ADC1 보정 데이터를 참조하십시오. (esp-periph/LICENSE-ADC 참고).