El desarrollo de firmware para ESP32 arrastra problemas clásicos: toolchains incompatibles, compilaciones que solo funcionan en una máquina y la necesidad de mantener productos heredados mientras se añaden funciones como Wi-Fi 6, Matter o mejoras de consumo. Este artículo propone una solución basada íntegramente en Docker, dividida en tres bloques prácticos.
El primero emplea la imagen oficial espressif/idf, que incluye el framework ESP-IDF fijado por versión, las toolchains Xtensa y RISC-V, Python, CMake y ninja. Con un único comando docker run se obtiene una compilación limpia y reproducible. El texto detalla detalles clave: ejecutar el contenedor con el UID del usuario para no dejar artefactos en propiedad de root, fijar siempre la etiqueta (release-vX.Y para desarrollo activo, vX.Y.Z para productos en mantenimiento), resolver el error de "dubious ownership" de Git con IDF_GIT_SAFE_DIR, y activar la caché del compilador con IDF_CCACHE_ENABLE=1, que reduce reconstrucciones completas de minutos a segundos. Para el flasheo en Linux se pasa el dispositivo serie con --device; en macOS y Windows, donde Docker Desktop no reenvía USB, se recurre a un puente serie en red mediante RFC2217 y esp_rfc2217_server, un truco que también abre la puerta a runners de CI y agentes de IA. Toda esta lógica se encapsula en un Makefile que estandariza build, flash, monitor y menuconfig.
El segundo bloque explota el aislamiento de los contenedores para ejecutar en paralelo dos versiones de ESP-IDF contra dos placas distintas (nueva función frente a firmware heredado), fijar nombres de dispositivo estables mediante reglas udev basadas en el número de serie del adaptador, y documentar la configuración en un archivo compose.yaml.
La tercera parte incorpora Docker Sandboxes (CLI sbx), microVMs con kernel, sistema de archivos, pila de red y demonio de Docker propios. Permiten que agentes de programación como Claude Code trabajen sin supervisión sobre el firmware sin comprometer el equipo anfitrión: el espacio de trabajo se sincroniza en la misma ruta, las políticas de red filtran el tráfico, y el entorno es totalmente desechable.
