- Framework de nueva generación diseñado para desarrollar rápidamente aplicaciones embebidas seguras y eficientes
- Garantiza seguridad de memoria y de hilos en tiempo de compilación sin runtime ni recolector de basura, y permite multitarea sin RTOS
- Incluye funciones clave como HAL, networking, Bluetooth, USB y bootloader, con soporte para diversos microcontroladores
- Considera tanto el procesamiento en tiempo real como la duración de la batería mediante un diseño de bajo consumo y un executor basado en prioridades
- Se está consolidando como la plataforma de referencia para el desarrollo embebido asíncrono dentro del ecosistema Rust
Resumen de Embassy
- Embassy es un framework de nueva generación que permite escribir aplicaciones embebidas de forma segura y eficiente usando Rust y capacidades async
- Funciona sin runtime, recolector de basura ni sistema operativo
- Garantiza seguridad de memoria y de hilos en tiempo de compilación
Arquitectura basada en Rust + async
- Implementa multitarea eficiente en entornos embebidos mediante la funcionalidad async/await de Rust
- Las tareas se convierten en máquinas de estado (state machine) en tiempo de compilación y se ejecutan de forma cooperativa
- No requiere asignación dinámica de memoria y se ejecuta sobre una sola pila
- Logra código más rápido y de menor tamaño incluso sin el cambio de contexto de un RTOS
- En el material enlazado se menciona una ventaja de rendimiento frente a RTOS
Componentes principales (Batteries Included)
- Capa de abstracción de hardware (HAL)
- Controla funciones de hardware con una API segura en Rust
- Principales plataformas compatibles: STM32, nRF, RP2040, MSPM0, ESP32, CH32, PolarFire SoC, PY32
- Gestión del tiempo (embassy-time)
- Proporciona tipos Instant, Duration y Timer utilizables de forma global, sin overflow
- Soporte en tiempo real y de bajo consumo
- Permite crear varios executors para ejecutar tareas con prioridad
- En reposo, cambia automáticamente el núcleo al modo de ahorro de energía, con wake-up basado en interrupciones
- Networking (embassy-net)
- Soporta Ethernet, IP, TCP, UDP, ICMP y DHCP
- Su estructura asíncrona simplifica la gestión de timeouts y el manejo de múltiples conexiones
- Bluetooth
- Soporta varios stacks BLE como
trouble, nrf-softdevice y embassy-stm32-wpan
- LoRa, USB, Bootloader
- Soporta stack LoRaWAN con
lora-rs
embassy-usb implementa clases USB CDC y HID
embassy-boot soporta actualizaciones de firmware seguras incluso ante fallos de energía
Especificaciones técnicas y licencia
- Versión mínima compatible de Rust (MSRV): 1.75 o superior
- Licencia: se puede elegir entre Apache-2.0 o MIT
- El nombre del proyecto es una abreviatura de “** EMBedded ASYnc**”
2 comentarios
He llegado a usar
embassy-rspara desarrollar y hasta llevar a producción un producto con STM32G030C8T6, y mientras lo usaba noté algunas desventajas.Cuando necesitas acceder a un HAL que no es común, al final terminas necesitando el enfoque que se usaba con el framework RTIC.
Por culpa de
async, hay una alta posibilidad de que el uso de memoria se vuelva ineficiente, así que hay que tener cuidado.Es muy restrictivo desarrollar en entornos con memoria flash de 32 KB o menos (
log+ símbolos de depuración, etc.).Si quieres desarrollar en un ecosistema fuera de NRF/STM/ESP/RP, en la práctica es muy difícil.
Está bien probar Rust embebido con
embassy-rs, pero si más adelante quieres mejorar de cara a producción en masa y también profesionalmente, creo que conviene probar un poco más RTIC.Por otro lado, me preocupa que, al volverse una especie de advanced Rust Arduino y tener buena accesibilidad, eso termine generando situaciones complicadas cuando toque hacer desarrollo más avanzado.
Comentarios de Hacker News
Soy muy fan del proyecto Embassy. Es un ejemplo perfecto de por qué async Rust es tan impresionante
Funciona sin heap, y con abstracciones de costo cero permite concurrencia incluso en chips de un solo núcleo. Tampoco tiene la complejidad de un RTOS
De verdad sorprende cuánto ha crecido el equipo de Embassy.
También recomiendo reqwless, un cliente HTTP para Embassy-net. Incluso soporta HTTPS
Antes no pensaba que Rust embebido fuera mejor que C/C++, pero ahora termino decidiendo qué MCU comprar según si soporta Rust
Aunque todavía no entiendo bien qué es un watchdog
Lo que más disfruto de Embassy es la capa de patrones de aplicación
La idea es tener tareas de dispositivo de larga vida que esconden el timing y la coordinación detrás de pequeñas APIs async
Por ejemplo, en código como
loop { let btn = ir.wait_for_press().await; }, el compilador genera automáticamente la máquina de estadosCreo que este estilo es un resultado natural de async + no-std
Me gustaría que hubiera más discusión sobre esta estructura de aplicación que sobre el HAL o el executor
En este artículo gratuito, escrito junto con Brad Gibson, también se aborda esta idea
Además abrí el repositorio device-kit para experimentar y documentar estos patrones. Me gustaría conocer otros repos que intenten algo parecido
Cuando antes escribía firmware para NICs con máquinas de estados, me habría encantado tener algo como async de Rust
En C también se pueden imitar corrutinas, pero queda demasiado hacky
En ese tiempo creía que los hilos de RTOS eran caros, aunque ahora no estoy tan seguro de que siempre fuera así
Si hubiera existido async para manejar protocolos como 802.11, el código habría sido mucho más pequeño y simple
Me gusta muchísimo Embassy
Vengo de Bare metal C y FreeRTOS, y por fin siento que los sistemas embebidos tienen un toolchain moderno
En especial, el ecosistema alrededor es excelente — integración de probe-rs + cargo run, logging con defmt, embedded_hal, stm32-rs, etc.
También probé RTIC, pero terminé quedándome con Embassy por la ergonomía de la sintaxis async
Me sorprendió que compilara y corriera directamente en macOS. Antes siempre había que usar Linux, pero ahora se puede hacer directo en chips M
Me tomó algo de tiempo entender el concepto de compartir acceso a periféricos, pero como las reglas de bloqueo se fuerzan en tiempo de compilación, casi no hay bugs
La calidad de los stacks de USB y networking también es muy alta. Uso PLDM sobre USB y un stack TCP sobre Ethernet, y funciona perfectamente
Como desventajas, es difícil incorporar gente acostumbrada a los ejemplos tradicionales de los vendors, y si el vendor no conoce Rust, depurar en colaboración se complica
Aun así, si estás en el ecosistema STM, lo recomiendo mucho
embassy_syncEmbassy y async Rust son la mayor innovación que ha ocurrido en el mundo embebido en los últimos 10 años
Los RTOS basados en C tienen buenas ideas, pero en la práctica usarlos es doloroso. Un framework liviano como Embassy es la evolución natural
De hecho, Embassy casi puede verse como un sistema operativo en tiempo real. Para más detalle, ver este artículo
Estoy reescribiendo Glicol a no-std, y la combinación embassy-rs + 2350 es lo máximo
Si planeas empezar con desarrollo embebido en 2026, recomiendo muchísimo este stack
Un poco fuera de tema, pero me pregunto qué sería bueno para empezar desde cero en desarrollo embebido
Llevo más de 10 años haciendo solo desarrollo web y estoy estudiando el libro de Rust. Ya pedí una Raspberry Pi, pero ¿eso realmente cuenta como embebido?
Un modelo como NUCLEO-F767ZI, que tiene puerto USB, está muy bien
Tiene Wi‑Fi, BLE y hasta sensor de 6 ejes, y los demos en C corren de inmediato. LVGL también está muy bien
Todavía no la he usado con Rust, pero como está basada en RISC-V me parece interesante. Elecrow y Makerfabs también son buenas opciones para principiantes
Si vas con Rust, rp-hal es bueno para arrancar, y Embassy conviene probarlo un poco más adelante
Si quieres ir a algo más cercano a bare metal, recomiendo una placa ESP32. Son baratas y hay muchos formatos con cargador de batería o pantalla integrada
Hice un relay LoRa con Embassy y lo uso con la app Bitchat (basada en nrf52)
En general funciona de forma muy fluida, y los panics venían de problemas del lado de Nordic SoftDevice
Estaba haciendo un controlador de pedal para amplificador de modelado de guitarra Spark con Embassy
Controla el amplificador por BLE, y me pareció interesante que el stack BLE de Rust fuera completamente open source
Eso sí, todavía está en una etapa temprana, así que la API cambia seguido y tuve que fijar revisiones de git en Cargo
Aun así, me entusiasma su futuro
En Microsoft también están usando Embassy para EC (Embedded Controller)
Para más detalles, ver Open Device Partnership
Ariel OS es un sistema operativo construido sobre Embassy. Vale la pena echarle un vistazo