Un émulateur ESP32 open source, écrit en Rust, qui démarre du vrai firmware sans le moindre patch.
Et ça change pas mal de choses pour qui fait de l'embarqué.
Je vais être direct : des émulateurs ESP32, il en existe déjà, mais ils ont presque tous le même défaut.
Soit ils tournent dans le cloud avec un abonnement, soit ils stubbent la moitié du SoC et vous testez un firmware bricolé qui n'est plus vraiment le vôtre.
esp32sim prend le problème à l'envers : il émule au niveau instruction et boote le vrai mask ROM d'Espressif, puis le vrai bootloader de second niveau, puis FreeRTOS, puis votre application, sans modification.
Et il le fait sur les deux architectures de la marque : l'ESP32-S3 (double cœur Xtensa LX7, le plus abouti), l'ESP32-C3 et l'ESP32-C6 (RISC-V, encore en draft). Le tout sous licence MIT, en local ou directement dans le navigateur via WebAssembly.
Ce qui m'a vraiment bluffé, c'est le niveau de détail.
Le WiFi n'est pas simulé par une API factice : c'est le blob WiFi d'Espressif, non modifié, qui scanne, s'associe et fait son handshake WPA2 avec un point d'accès virtuel.
Derrière, l'émulateur fournit DHCP, DNS, NTP et un NAT vers votre vrai réseau.
Concrètement, le README montre un panneau d'énergie qui récupère des prix d'électricité en HTTPS et interroge un Home Assistant sur le LAN, depuis un ESP32 qui n'existe pas.
Et ça ne s'arrête pas là :
- des cartes complètes modélisées (écrans ST7735, ST7701S 480×480 avec tactile, LED WS2812, caméra OV5640, codecs audio)
- un JIT AArch64 pour le S3, annoncé entre 150 et 240 millions d'instructions par seconde
- Linux 6.11 qui tourne sur le S3 émulé, jouable en ligne sur la démo
- une détection de piétons esp-dl qui passe par l'unité SIMD PIE émulée
Mais le vrai point fort, pour moi, c'est la méthode de validation.
Le S3 est testé en lock-step JTAG contre une vraie puce : on exécute instruction par instruction sur le silicium et dans l'émulateur, puis on compare les registres.
Le C3 et le C6 sont comparés sur la sortie console d'une vraie carte (205 lignes identiques sur 208 pour le C3, 203 sur 204 pour le C6), et ces comparaisons ont débusqué cinq bugs d'émulation chacune. Les auteurs documentent même les limites de leurs propres chiffres, ce qui est rare.
Donc oui, le projet est jeune (peu d'étoiles sur GitHub, des puces RISC-V encore incomplètes), mais il ouvre une porte énorme : de la CI embarquée sans ferme de cartes, du debug avec breakpoints et watchpoints sur un firmware de prod, des démos jouables dans un navigateur.
La vraie question, c'est combien de temps il faudra avant qu'un outil comme celui-là devienne la norme dans les pipelines IoT.