TrouBLE - Rustで書かれた組み込みデバイス向け Bluetooth Low Energy (BLE) ホスト実装
前の章では、micro:bit からスマートフォンへデータ(バッテリーレベル)を送信するために nrf-softdevice crate を使用しました。ここでは、Rust で書かれたクロスプラットフォームな BLE Host スタックである TrouBLE を紹介します。TrouBLE はまだ初期段階にあり(最初のバージョンは 2025 年 3 月に crates.io でリリースされました)
TrouBLE は、将来的な認証取得を目標とした、Rust で書かれた組み込みデバイス向け Bluetooth Low Energy (BLE) Host 実装です。
BLE Host
BLE スタックでは、システムは 2 つの部分に分かれています。
- Controller : 低レベルの無線処理を担当します。
- Host : GATT、L2CAP、ATT、SMP などの高レベルプロトコルを管理します。
これら 2 つのコンポーネントは Host Controller Interface (HCI) を介して通信します。これは標準化されたプロトコルで、UART、USB、あるいはメモリ内共有バッファなど、さまざまなトランスポート上で動作します。
Controller-Agnostic
この分離により、同じ Host スタックを異なる Controller 間で動作させることができます。TrouBLE は、bt-hci crate の必要なトレイトを実装している任意の Controller で動作します(bt-hci は Bluetooth 通信用の embedded-hal のようなものです)。つまり、Rust で 1 つの BLE アプリケーションを書けば、次のようなプラットフォーム間で再利用できます。
- Nordic nRF52(SoftDevice Controller 経由)
- ESP32
- Raspberry Pi Pico W
- Apache NimBLE
- UART HCI
今後さらに多くのプラットフォームがサポートされる可能性があります。サポートされている Controller の最新一覧は、TrouBLE GitHub リポジトリを参照してください。
microbit向け(より正確には、nRF52 向け) - Softdevice vs Softdevice Controller
前の章では、nrf-softdevice crate を使用しました。この方法では、デバイスに SoftDevice ファームウェアを書き込み、メモリレイアウト(memory.x 経由)を設定する必要があります。nrf-softdevice crate は、Nordic のオリジナルの SoftDevice に対する Rust ラッパーとして機能します。Softdevice は、完全なクローズドソースのプリコンパイル済み Bluetooth スタックです。SoftDevice には Controller(Link Layer)層と Host(GAP、GATT、L2CAP など)層の両方が含まれており、完全な BLE 実装を提供します。
対照的に、SoftDevice Controller は nRF52 および nRF53 シリーズ向けに設計された、より新しいソリューションです。オリジナルの SoftDevice とは異なり、これは Controller 部分のみです。これはそれ自体が Rust ライブラリではなく、nrf-sdc crate がそれに対する Rust バインディングを提供します。この crate は bt-hci トレイトを実装します。ただし、Controller 側しか扱わないため、BLE 機能を完成させるには依然として Host スタックが必要です。そして、そこで Trouble(しゃれです)が登場します。TrouBLE は、SoftDevice Controller と組み合わせて使える Host スタックです。
- 古いアプローチ: nrf-softdevice crate とともに完全な SoftDevice(controller + host)を使用します。完全に認証済みです。
- 新しいアプローチ: nrf-sdc crate と Rust ベースの Trouble host stack とともに SoftDevice Controller を使用します。より柔軟ですが、商用利用には認証が必要になります。