エンバシー:Rustとasyncを使用した現代の組み込みフレームワーク
98日前原文(github.com)
概要
EmbassyはRustベースの次世代組込みアプリケーションフレームワーク。
安全性・正確性・省電力性を兼ね備えたコードを高速開発可能。
async/awaitによる効率的なマルチタスク制御を実現。
幅広いマイコン・通信規格に対応したライブラリ群を提供。
ドキュメント・サンプル・開発サポートも充実。
Embassyの特徴と概要
- Rust言語による高速・省メモリ・安全な組込み開発基盤
- async/awaitを活用した協調型マルチタスク実現
- RTOS不要、カーネルコンテキストスイッチなしで高速・小規模実装
- 動的メモリ割当不要、単一スタック上で複数タスク動作
- 型安全性とスレッド安全性によるコンパイル時バグ検出
標準搭載ライブラリ・機能
- **Hardware Abstraction Layer (HAL)**によるハードウェア抽象化
- embassy-stm32(STM32シリーズ全般)
- embassy-nrf(Nordic nRF52/53/54/91シリーズ)
- embassy-rp(Raspberry Pi RP2040, RP23xx)
- embassy-mspm0(TI MSPM0シリーズ)
- esp-rs(ESP32シリーズ、Wi-Fi/Bluetooth/ESP-NOW対応開発中)
- ch32-hal(WCH CH32V RISC-Vシリーズ)
- mpfs-hal(Microchip PolarFire SoC)
- py32-hal(Puya Semiconductor PY32シリーズ)
- embassy_timeによるグローバルな時間管理(Instant, Duration, Timer)
- 複数優先度Executorによるリアルタイム制御
- 省電力設計(アイドル時自動スリープ、割込みでタスク復帰)
- embassy-netでEthernet/IP/TCP/UDP/ICMP/DHCP対応ネットワーク機能
- Bluetooth(trouble/nrf-softdevice/embassy-stm32-wpan等で各種MCUサポート)
- LoRaWAN(lora-rsで非同期LoRa/LoRaWAN通信)
- embassy-usbによるUSBデバイススタック(CDC ACM, HID対応、拡張API)
- embassy-bootによる安全なブートローダ・DFU(試行起動・ロールバック対応)
サンプルコード例(抜粋)
- 非同期タスク(async fn)によるLED点滅・ボタン入力監視
- Timerでハードウェアタイマ不要の時間管理
- Input/OutputでGPIO制御
- Spawnerでバックグラウンド並列処理
- **info!**でログ出力
サンプル実行手順
- probe-rsインストール(https://probe.rs参照)
- 対象チップ用サンプルディレクトリへ移動(例:cd examples/nrf52840)
- Cargo.tomlでチップ名feature指定、.cargo/config.tomlでチップ名指定
- 実行例:cargo run --release --bin blinky
- 詳細はGetting StartedやRunning the Examples参照
開発環境サポート
- Rust Analyzer(Visual Studio Code等)対応
- .vscode/settings.jsonのrust-analyzer.linkedProjects設定参照
- 複数ターゲット対応のためCargo workspaceは未提供
ライセンス・コントリビューション
- Apache License 2.0またはMIT Licenseのデュアルライセンス
- コントリビューションは明示ない限り上記ライセンスで受領
由来
- 名前の由来:「EMBedded ASYnc」から命名
Embassyの利点まとめ
- 安全性:型・スレッド安全なRustでバグを未然防止
- 効率性:async/awaitでRTOS不要の高速・省メモリマルチタスク
- 拡張性:多様なマイコン・通信規格に対応したHAL・ライブラリ
- 開発支援:豊富なドキュメント・サンプル・ツール連携
- 省電力:自動スリープ・割込み駆動で長寿命デバイス設計