- 安全で効率的な組み込みアプリケーションをすばやく開発できるよう設計された次世代フレームワーク
- ランタイムやガベージコレクタなしでコンパイル時のメモリ・スレッド安全性を確保し、RTOSなしでもマルチタスクを実行
- HAL、ネットワーキング、Bluetooth、USB、ブートローダーなど主要機能を含み、多様なマイクロコントローラをサポート
- 低消費電力設計と**優先度ベースのエグゼキュータ(executor)**により、リアルタイム処理とバッテリー寿命の両方を考慮
- Rustエコシステムと結びついた非同期組み込み開発の代表的プラットフォームとして定着している
Embassy 概要
- EmbassyはRustとasync機能を使って、組み込みアプリケーションを安全かつ効率的に記述できる次世代フレームワーク
- ランタイム、ガベージコレクタ、オペレーティングシステムなしで動作
- コンパイル時にメモリおよびスレッド安全性を確保
Rust + asyncベースの構造
- Rustのasync/await機能により、組み込み環境で効率的なマルチタスクを実現
- タスクはコンパイル時に**状態機械(state machine)**へ変換され、協調的に実行
- 動的メモリ割り当ては不要で、単一スタック上で実行
- RTOSのコンテキストスイッチなしでも、より高速で小さいコードサイズを達成
- リンク先資料ではRTOSに対する性能優位性に言及している
主な構成要素 (Batteries Included)
- ハードウェア抽象化レイヤー(HAL)
- 安全なRust APIでハードウェア機能を制御
- 主な対応対象: STM32, nRF, RP2040, MSPM0, ESP32, CH32, PolarFire SoC, PY32
- 時間管理(embassy-time)
- グローバルに利用可能なInstant、Duration、Timer型を提供し、オーバーフローなし
- リアルタイムおよび低消費電力サポート
- 複数のエグゼキュータ(executor)を生成し、優先度ベースのタスク実行が可能
- アイドル時にはコアを自動で省電力モードへ移行し、割り込みベースのウェイクアップに対応
- ネットワーキング(embassy-net)
- Ethernet、IP、TCP、UDP、ICMP、DHCPをサポート
- 非同期構造により、タイムアウト管理と複数接続処理を簡素化
- Bluetooth
trouble、nrf-softdevice、embassy-stm32-wpanなど多様なBLEスタックをサポート
- LoRa、USB、Bootloader
lora-rsでLoRaWANスタックをサポート
embassy-usbはUSB CDC、HIDクラスを実装
embassy-bootは電源障害時にも安全なファームウェア更新をサポート
技術仕様とライセンス
- 最小対応Rustバージョン(MSRV): 1.75以上
- ライセンス: Apache-2.0またはMITを選択可能
- プロジェクト名は「EMBedded ASYnc」の略
2件のコメント
embassy-rsを使って STM32G030C8T6 で製品開発から量産までやってみましたが、使っていて欠点はいくつかあります。一般的ではない HAL にアクセスするときは、結局 RTIC フレームワークを使っていたときのようなアプローチが必要になります。
asyncのため、メモリ効率が悪くなる可能性が高く、注意が必要です。フラッシュメモリが 32KB 以下の環境で開発するにはかなり制約があります。(
log+debug symbol など)NRF/STM/ESP/RP を外れたエコシステムで開発しようとすると、事実上かなり難しいです。
embassy-rsで Rust embedded を触ってみるのは良いですが、その後の量産やキャリア面での改善を望むなら、RTIC をもう少し触ってみるのがよさそうです。一方では、advanced rust arduino のようになってアクセスしやすいことが、かえって難易度の高い開発をするときに厄介な状況を生む問題が発生するのではないかと懸念しています.
Hacker News の意見
自分は Embassy プロジェクトの大ファンだ。これは async Rust がなぜすごいのかを示す完璧な例だ
ヒープなしで動作し、低コストな抽象化により単一コアのチップでも並行実行が可能だ。RTOS の複雑さもない
Embassy チームがここまで成長したのは本当に驚きだ。
それから、Embassy-net 向けの HTTP クライアントである reqwless もおすすめだ。HTTPS にも対応している
以前は Rust embedded が C/C++ より優れているとは思っていなかったが、今では MCU の購入判断を Rust のサポート有無で決めるようになった
ただ、自分はいまだに watchdog が何なのかよく分かっていない
自分は Embassy を アプリケーションパターン層で最も楽しんでいる
長寿命のデバイスタスクが、タイミングや調整を小さな async API の背後に隠す構造だ
たとえば
loop { let btn = ir.wait_for_press().await; }のようなコードでは、コンパイラが状態機械を自動生成してくれるこうしたスタイルは async + no-std の 自然な産物だと思う
HAL や executor よりも、こうしたアプリケーション構造についての議論がもっと増えてほしい
Brad Gibson と共著した 無料記事 でもこのアイデアを扱っている
また、こうしたパターンを実験して文書化するための device-kit リポジトリも公開した。同様の試みをしている他のリポジトリも知りたい
昔 NIC ファームウェアを状態機械で書いていた頃、Rust の async のようなものがあれば本当によかったと思う
C でもコルーチンを真似ることはできるが、かなり ハッキーだ
当時は RTOS スレッドは高コストだと信じていたが、今思えば必ずしもそうではなかった気もする
802.11 のようなプロトコル処理にも async があれば、コードはもっと小さく単純になっていただろう
自分は Embassy が本当に好きだ
ベアメタル C と FreeRTOS から移ってきたが、ようやく組み込みにもモダンなツールチェーンが来たという感じがする
とくに周辺エコシステムが素晴らしい — probe-rs + cargo run の統合、defmt ロギング、embedded_hal、stm32-rs など
RTIC も使ってみたが、async 構文の 人間工学的な使いやすさのおかげで Embassy に落ち着いた
macOS でもそのままビルドして実行できて驚いた。以前は常に Linux を使う必要があったのに、今では M チップ上でそのまま動く
ペリフェラルアクセスの共有という概念を理解するのに少し時間がかかったが、コンパイル時に ロック規則が強制されるのでバグがほとんどない
USB とネットワーキングスタックの品質も非常に高い。PLDM over USB と Ethernet TCP スタックを使っているが完璧に動いている
欠点を挙げるなら、既存のベンダーサンプルに慣れた人のオンボーディングが難しく、ベンダーが Rust を知らないとデバッグでの協業がやりにくいことだ
それでも STM エコシステムなら強くおすすめできる
embassy_syncで通信するようだEmbassy と async Rust は、ここ 10 年の組み込みの世界で起きた 最大の革新だ
C ベースの RTOS は概念としてはよいが、実際に使うとつらい。Embassy のような軽量フレームワークは自然な進化だ
Embassy は事実上 リアルタイム OSとして見ることもできる。詳しくは この記事 を参照
自分は Glicol を no-std で書き直しているが、embassy-rs + 2350 の組み合わせが最高だ
2026 年に組み込み開発を始めるつもりなら、このスタックを強くおすすめする
少し話はそれるが、組み込み開発を これから始めるなら何がよいのか気になる
10 年以上 Web 開発だけをしてきて、今は Rust の本を勉強中だ。Raspberry Pi を注文したのだが、これって本当に組み込みと言えるのだろうか?
USB ポートのある NUCLEO-F767ZI のようなモデルがよい
Wi-Fi、BLE、6 軸センサーまで載っていて、C のデモもすぐ動く。LVGL も素晴らしい
Rust はまだ試していないが、RISC-V ベースなので興味深い。Elecrow や Makerfabs も初心者にはよい
Rust なら rp-hal が入門向けによく、Embassy はもう少し後で試すとよい
もっと ベアメタルに近づきたいなら ESP32 ボードをおすすめする。安くて、バッテリー充電器やディスプレイ付きなどさまざまなフォームファクタがある
自分は Embassy で LoRa リレーを作って Bitchat アプリ(nrf52 ベース)で使っている
ほとんどは非常にスムーズに動作しており、panic は Nordic SoftDevice 側の問題だった
自分は Embassy で Spark モデリングギターアンプのペダルコントローラを作っていた
BLE でアンプを制御するのだが、Rust の BLE スタックが完全オープンソースなので興味深かった
ただ、まだ初期段階なので API が頻繁に変わり、Cargo で git リビジョンを固定する必要があった
それでもプロジェクトの 将来性に期待している
Microsoft でも Embassy を **EC(Embedded Controller)**向けに使っている
詳しくは Open Device Partnership を参照
Ariel OS は Embassy 上に構築されたオペレーティングシステムだ。参考になる