- Framework de próxima geração projetado para desenvolver rapidamente aplicações embarcadas seguras e eficientes
- Garante segurança de memória e de threads em tempo de compilação sem runtime nem coletor de lixo, e realiza multitarefa mesmo sem RTOS
- Inclui recursos principais como HAL, rede, Bluetooth, USB e bootloader, com suporte a diversos microcontroladores
- Com design de baixo consumo de energia e executor baseado em prioridade, considera tanto o processamento em tempo real quanto a duração da bateria
- Está se consolidando como a principal plataforma de desenvolvimento embarcado assíncrono integrada ao ecossistema Rust
Visão geral do Embassy
- Embassy é um framework de próxima geração que permite escrever aplicações embarcadas de forma segura e eficiente usando Rust e recursos async
- Funciona sem runtime, coletor de lixo ou sistema operacional
- Garante segurança de memória e de threads em tempo de compilação
Arquitetura baseada em Rust + async
- Implementa multitarefa eficiente em ambientes embarcados por meio do recurso async/await do Rust
- As tarefas são convertidas em máquinas de estado (state machines) em tempo de compilação e executadas de forma cooperativa
- Não requer alocação dinâmica de memória, executando em uma única stack
- Alcança código menor e mais rápido mesmo sem troca de contexto de um RTOS
- O material vinculado menciona vantagem de desempenho em relação a RTOS
Principais componentes (Batteries Included)
- Camada de abstração de hardware (HAL)
- Controla funções de hardware com APIs Rust seguras
- Principais alvos suportados: STM32, nRF, RP2040, MSPM0, ESP32, CH32, PolarFire SoC, PY32
- Gerenciamento de tempo (embassy-time)
- Fornece tipos Instant, Duration, Timer utilizáveis globalmente, sem overflow
- Suporte a tempo real e baixo consumo
- É possível criar vários executors para execução de tarefas baseada em prioridade
- Quando ocioso, coloca automaticamente o núcleo em modo de economia de energia, com wake-up baseado em interrupção
- Rede (embassy-net)
- Suporta Ethernet, IP, TCP, UDP, ICMP, DHCP
- A estrutura assíncrona simplifica o gerenciamento de timeout e o tratamento de múltiplas conexões
- Bluetooth
- Suporta diversas stacks BLE, como
trouble, nrf-softdevice, embassy-stm32-wpan
- LoRa, USB, Bootloader
- Suporte à stack LoRaWAN com
lora-rs
embassy-usb implementa classes USB CDC e HID
embassy-boot oferece atualização de firmware segura mesmo em caso de falha de energia
Especificações técnicas e licença
- Versão mínima suportada do Rust (MSRV): 1.75 ou superior
- Licença: escolha entre Apache-2.0 ou MIT
- O nome do projeto é uma abreviação de “** EMBedded ASYnc**”
2 comentários
Usei
embassy-rspara desenvolver um produto com STM32G030C8T6 até a produção em massa, e há algumas desvantagens ao usar.Quando é preciso acessar uma HAL que não é comum, no fim acaba sendo necessária a abordagem usada no framework RTIC.
Por causa de
async, há uma grande chance de o uso de memória se tornar ineficiente, então é preciso tomar cuidado.É muito restritivo desenvolver em ambientes com memória flash de 32 KB ou menos (
log+ símbolos de debug etc).Se quiser desenvolver em um ecossistema fora de NRF/STM/ESP/RP, na prática é muito difícil.
É bom experimentar Rust embarcado com
embassy-rs, mas se depois você quiser melhorar em termos de produção em massa e carreira, acho que vale mais a pena explorar um pouco mais o RTIC.Por outro lado, também me preocupo que, por ele acabar sendo um advanced Rust Arduino e ter boa acessibilidade, isso possa gerar situações complicadas quando se tenta fazer um desenvolvimento de maior dificuldade.
Comentários do Hacker News
Sou um grande fã do projeto Embassy. É um exemplo perfeito de por que async Rust é tão impressionante
Funciona sem heap e, com abstrações de baixo custo, permite concorrência até em chips de núcleo único. E sem a complexidade de um RTOS
É realmente surpreendente o quanto a equipe do Embassy cresceu.
Também recomendo o reqwless, um cliente HTTP para Embassy-net. Ele suporta HTTPS também
Antes eu não achava que Rust embarcado fosse melhor que C/C++, mas agora passei a decidir a compra de MCUs com base no suporte a Rust
Mas ainda não entendo muito bem o que é watchdog
O que mais gosto no Embassy é a camada de padrões de aplicação
A estrutura esconde temporização e coordenação de tarefas de dispositivo de longa duração atrás de pequenas APIs async
Por exemplo, em um código como
loop { let btn = ir.wait_for_press().await; }, o compilador gera automaticamente a máquina de estadosAcho que esse estilo é um resultado natural de async + no-std
Gostaria que houvesse mais discussão sobre essa arquitetura de aplicação do que sobre HALs ou executores
Essas ideias também aparecem em um artigo gratuito que escrevi com Brad Gibson
Também abri o repositório device-kit para experimentar e documentar esses padrões. Queria conhecer outros repositórios tentando algo parecido
Na época em que eu escrevia firmware de NIC como máquinas de estado, teria sido incrível ter algo como async do Rust
Dá para imitar corrotinas em C, mas fica muito gambiarra
Naquele tempo acreditávamos que threads de RTOS eram caras, mas hoje acho que isso não era necessariamente verdade
Se houvesse async no processamento de protocolos como 802.11, o código teria sido muito menor e mais simples
Eu gosto muito do Embassy
Vim de C bare metal e FreeRTOS, e finalmente parece que o embarcado ganhou uma toolchain moderna
Especialmente o ecossistema ao redor é excelente — integração de probe-rs + cargo run, logging com defmt, embedded_hal, stm32-rs etc.
Também usei RTIC, mas acabei ficando no Embassy por causa da ergonomia da sintaxe async
Fiquei surpreso por compilar e rodar direto no macOS. Antes eu sempre precisava usar Linux, mas agora dá para fazer tudo direto em chips M
Demorei um pouco para entender o conceito de compartilhamento de acesso a periféricos, mas como as regras de lock são impostas em tempo de compilação, quase não há bugs
A qualidade das pilhas de USB e rede também é muito alta. Uso PLDM sobre USB e uma pilha TCP sobre Ethernet, e funciona perfeitamente
Como ponto negativo, é difícil fazer onboarding de quem está acostumado com exemplos de fabricantes, e se o fornecedor não conhece Rust, a depuração em conjunto fica complicada
Ainda assim, recomendo fortemente no ecossistema STM
embassy_syncEmbassy e async Rust são a maior inovação que aconteceu no mundo embarcado nos últimos 10 anos
RTOSs baseados em C têm conceitos bons, mas na prática são dolorosos de usar. Um framework leve como Embassy é uma evolução natural
Na prática, Embassy pode até ser visto como um sistema operacional de tempo real. Para mais detalhes, veja este texto
Estou reescrevendo o Glicol para no-std, e a combinação embassy-rs + 2350 é excelente
Se você está pensando em começar com desenvolvimento embarcado em 2026, recomendo muito essa stack
Fugindo um pouco do assunto, queria saber o que seria bom para começar em desenvolvimento embarcado
Depois de mais de 10 anos só com desenvolvimento web, estou estudando o livro de Rust. Pedi um Raspberry Pi, mas isso pode realmente ser chamado de embarcado?
Um modelo com porta USB como a NUCLEO-F767ZI é uma boa escolha
Tem Wi‑Fi, BLE, sensor de 6 eixos, e os demos em C já rodam de cara. O LVGL também é excelente
Ainda não testei Rust nela, mas por ser baseada em RISC-V, acho interessante. Elecrow e Makerfabs também são boas para iniciantes
Se for usar Rust, o rp-hal é bom para iniciar, e o Embassy pode ficar para um pouco depois
Se quiser algo mais próximo de bare metal, recomendo uma placa ESP32. É barata e há muitos formatos com carregador de bateria ou display embutidos
Estou usando Embassy para fazer um relé LoRa para usar com o app Bitchat (baseado em nrf52)
No geral funciona muito bem, e os panics vieram de problemas no lado do Nordic SoftDevice
Eu estava fazendo um controlador de pedal para amplificador de guitarra com modelagem Spark usando Embassy
Ele controla o amplificador via BLE, e achei interessante que a stack BLE em Rust é totalmente open source
Mas ainda está em estágio inicial, então a API muda com frequência e eu precisei fixar revisões git no Cargo
Mesmo assim, estou animado com o futuro do projeto
A Microsoft também está usando Embassy para EC (Embedded Controller)
Mais detalhes em Open Device Partnership
O Ariel OS é um sistema operacional construído sobre o Embassy. Vale a pena dar uma olhada