Cómo crear, construir, flashear y simular una aplicación “Hello World” Rust Bare Metal para ESP32-S3

Rust es un gran lenguaje de programación para el desarrollo de dispositivos embebidos como los MCU, que tienen recursos limitados. Especialmente, Bare Metal (también conocido como no_std) trae muchas ventajas y permite la creación de aplicaciones completas puramente en Rust.

Los siguientes pasos describen cómo crear, construir, flashear y simular una aplicación para ESP32-S3, que está incluida en muchos DevKits como el ESP32-S3-BOX-3 o el M5Stack CoreS3.

Hay varias herramientas que necesitan ser instaladas.

Primero, necesitamos instalar Rust. Usaremos rustup.

Necesitaremos varias herramientas adicionales. Podemos usar `cargo install` para realizar la instalación desde el código fuente. El método más rápido es usar cargo-binstall, que despliega binarios de herramientas y ahorra tiempo en comparación con la instalación desde el código fuente.

Ahora podemos instalar herramientas adicionales:

  • espup – Herramienta para instalar y mantener el ecosistema Rust de Espressif.
  • cargo-generate – Herramienta para crear proyectos Rust a partir de plantillas.
  • espflash – Utilidad de flasheo serial para SoCs y módulos de Espressif. Reemplazo en Rust para esptool.py basado en Python.

Como estamos apuntando al ESP32-S3, que está basado en la arquitectura Xtensa, necesitaremos la toolchain Xtensa de Rust, que debe ser instalada por separado. Nota: Para los chips introducidos después del ESP32-S3, como el ESP32-C3, que están basados en la arquitectura RISC-V, esta dependencia no es necesaria.

Ahora podemos generar un proyecto usando la plantilla Bare Metal de esp-rs/esp-template utilizando cargo-generate. La herramienta hará varias preguntas. Aquí está la configuración recomendada:

El proyecto `embedded-rust` debería estar creado, y ahora estamos listos para construir y flashear.

Se recomienda construir el proyecto en el perfil Release, debido a las consideraciones de rendimiento, especialmente si planeas usar WiFi, que requiere muchos recursos, y el perfil de depuración es demasiado lento.

Conecta el ESP32-S3-BOX-3 a tu computadora usando un cable USB y escribe el siguiente comando, que invocará un comando de construcción y espflash con la opción de monitor para flashear y monitorear el hardware.

Si no tienes el ESP32-S3-BOX-3 contigo, es posible usar el simulador Wokwi. Abre VS Code:

Instala la extensión Wokwi para VS Code (Ctrl+Shift+P), selecciona “Install extension”, busca Wokwi y haz clic en “install”.

Activa la licencia gratuita de Wokwi (Ctrl+Shift+P), selecciona “Wokwi: Request a new license” y sigue el proceso de activación en el navegador web.

Si el proyecto fue creado en el perfil Release, necesitamos cambiar la ruta al binario en el archivo `wokwi.toml`:

Ejecuta la simulación (Ctrl+Shift+P), selecciona “Wokwi: Start Simulator”.

El chip simulado debería aparecer y deberías obtener el siguiente resultado:

¡Felicidades! Has completado tu primer proyecto Rust Bare Metal para ESP32-S3-BOX-3.

Consejo de productividad: Puedes mantener la ventana de Wokwi con el simulador abierta mientras desarrollas la aplicación. Una vez que construyas la aplicación usando `cargo run –release`, el simulador tomará el cambio y te mostrará la simulación, incluso mientras esperas a que se complete el proceso de flasheo. Esto puede ahorrar mucho tiempo permitiéndote ver los resultados de un cambio de código de inmediato.