Esp32sim: chạy firmware ESP32 trực tiếp trên trình duyệt bằng Rust và WebAssembly
Dự án mã nguồn mở Esp32sim mang đến trình giả lập ESP32 viết bằng Rust, mô phỏng ở mức lệnh cho bốn dòng chip ESP32-S3, ESP32-C3, ESP32-C6 và ESP32 cổ điển, khởi động từ ROM thật đến FreeRTOS rồi ứng dụng mà không cần chỉnh sửa firmware. Nhờ biên dịch sang WebAssembly, lập trình viên có thể nạp và chạy firmware ESP32 ngay trong trình duyệt mà không cần cài đặt gì.

Việc thử nghiệm firmware nhúng trên chip ESP32 thường đòi hỏi phải có phần cứng thật trong tay — một bo mạch, cáp USB và thời gian nạp firmware mỗi lần sửa lỗi. Một dự án mã nguồn mở mới có tên Esp32sim đang cố gắng thay đổi điều đó: chạy nguyên vẹn firmware ESP32 ngay trong trình duyệt hoặc trên máy tính, không cần phần cứng.
Giả lập ở mức lệnh, không dùng firmware "độ"
Điểm cốt lõi của Esp32sim là mô phỏng ở mức từng lệnh máy (instruction-level) cho bốn dòng SoC thuộc cả hai kiến trúc CPU mà Espressif sử dụng:
- ESP32-S3 — 2 nhân Xtensa LX7 ở 240 MHz
- ESP32-C3 — 1 nhân RISC-V RV32IMC ở 160 MHz
- ESP32-C6 — 1 nhân RISC-V RV32IMAC ở 160 MHz
- ESP32 cổ điển — 2 nhân Xtensa LX6, khởi động ROM ECO3
Điều đáng chú ý là mỗi chip đều khởi động từ mask ROM thật, qua bootloader bậc hai thật rồi vào FreeRTOS và ứng dụng — không có firmware bị vá, không có stub chèn ngang. Theo nhóm phát triển, điều này giúp chạy được các dự án thực tế từ đầu đến cuối.
Dự án cũng công bố các phép kiểm tra giải mã lệnh với hàng trăm nghìn lệnh trên mỗi kiến trúc và cho kết quả 0 sai lệch.
So sánh với phần cứng thật
Nhóm tác giả không chỉ dừng ở việc "chạy được" mà còn đối chiếu với silicon thật bằng nhiều phương pháp khác nhau:
- Với ESP32-S3, họ dùng JTAG lock-step: đọc efuse và trạng thái reset từ chip thật rồi cho chip và trình giả lập chạy song song từng lệnh. Kết quả ghi nhận 3000 bước từ lúc reset với 0 phân kỳ PC.
- Với ESP32-C3, so sánh log console với một module thật cho 205/208 dòng trùng khớp qua ba chu kỳ khởi động.
- Với ESP32-C6, con số tương ứng là 203/204 dòng trên bo Waveshare ESP32-C6-LCD-1.47.
Đáng chú ý, chính các phép so sánh này đã phát hiện năm lỗi trong trình giả lập ở mỗi chip — những lỗi mà kiểm thử không có phần cứng sẽ không bao giờ bắt được.
WiFi ảo, mạng thật
Esp32sim mô phỏng cả điểm truy cập WiFi ảo: firmware dùng blob WiFi nguyên bản của Espressif vẫn quét, xác thực, bắt tay WPA2-PSK bốn bước và nhận DHCP như bình thường. Phía sau là một mạng ảo có DHCP, ARP, ICMP, DNS và SNTP.
Với chế độ NAT (mặc định), lưu lượng TCP/UDP của firmware được chuyển tiếp qua socket của máy chủ, nghĩa là firmware có thể truy cập Internet thật — ví dụ tải dữ liệu giá điện qua HTTPS hay gọi một máy chủ Home Assistant trong mạng LAN. Tất cả không cần thay đổi firmware, không cần quyền root, không cần thiết bị tun.
Không có cloud, không có tài khoản. Giấy phép MIT.
Chạy trên trình duyệt nhờ WebAssembly
Toàn bộ trình giả lập được biên dịch sang WebAssembly và chạy trong một Web Worker ngay trong trang web. Người dùng chỉ cần chọn bo mạch, nạp file ROM và firmware từ ổ đĩa rồi bấm Boot.
Bản demo trực tuyến tại địa chỉ của dự án cho phép thử ngay không cần cài đặt, bao gồm:
- Linux 6.11 chạy trên ESP32-S3 — đăng nhập và gõ lệnh trên console
- Bo Waveshare ESP32-S3-Touch-LCD-4B với trình phát nhạc SID
- Pocket-tank, một mô hình transformer 4-bit điều khiển đàn cá trên màn hình AMOLED
- Các bản demo hello_world trên ESP32-C3 và ESP32-C6
Trên trình duyệt, ESP32-S3 còn có JIT riêng cho WebAssembly, xử lý các khối lệnh "nóng" và tăng tốc SIMD cho tập lệnh PIE.
Hiệu năng và mức độ hoàn thiện
Trên máy tính, Esp32sim dùng bộ thông dịch khối lệnh kết hợp JIT cho AArch64, đạt khoảng 150–240 triệu lệnh mỗi giây. Firmware synth của bo Atech chạy theo thời gian thực khi rảnh hoặc đang phát nốt nhạc; điểm nghẽn duy nhất là lúc vẽ lại toàn bộ màn hình, khi nhân 1 phải bận 100% để bit-bang SPI.
Về độ chín muồi, dự án phân loại rõ ràng: ESP32-S3 ở mức "mature" (hoàn thiện), còn ESP32-C3 và ESP32-C6 vẫn ở mức "draft" (bản nháp), dù cả hai đều đã khởi động được toàn bộ chuỗi ROM → bootloader → FreeRTOS → ứng dụng.
Điểm đáng lưu ý cho cộng đồng nhúng Việt Nam
Với các nhà phát triển IoT và nhúng tại Việt Nam, công cụ này mở ra vài hướng ứng dụng thực tế:
- Học và giảng dạy ESP-IDF mà không cần mua bo mạch cho từng sinh viên
- Kiểm thử tự động trong CI cho firmware, vốn rất khó thực hiện với phần cứng thật
- Gỡ lỗi với các tùy chọn mạnh như
--trace,--break,--watch,--log-periphđể theo dõi lần đầu tiên từng thanh ghi lạ được truy cập - Thử nghiệm nhanh các board màn hình, cảm biến camera, codec âm thanh trước khi đặt hàng linh kiện
Dự án được viết chủ yếu dựa trên header thanh ghi của ESP-IDF, cấu hình lõi Xtensa đi kèm ESP-IDF, đặc tả RISC-V và tài liệu tham chiếu kỹ thuật của C3, C6. QEMU chỉ được tham khảo để xác nhận ngữ nghĩa lệnh, không sao chép mã nguồn.
Với giấy phép MIT và kiến trúc mô-đun cho phép thêm ngoại vi, bo mạch hay thậm chí cả CPU mới, Esp32sim có tiềm năng trở thành một phần trong bộ công cụ của bất kỳ ai làm việc với hệ sinh thái ESP32.
Bài viết liên quan
Công nghệ
Năm 1982, các nhà khoa học đã tiên đoán tương lai của lập trình — và nhiều dự báo vẫn đúng đến hôm nay
17 tháng 10, 2026

Công nghệ
Công ty ad-tech bị tố là vỏ bọc phát tán phần mềm gián điệp đánh thuê
17 tháng 10, 2026

Công nghệ
Nghệ thuật dựng bầu trời đẹp trong game Around The World
16 tháng 10, 2026