依存関係
nrf-softdevice クレート
このクレートは、Nordic のクローズドソースな SoftDevice Bluetooth スタックに対する Rust バインディングを提供します。SoftDevice は、起動時に最初に実行され、その後で制御をあなたのアプリに渡す、事前コンパイル済みの C バイナリです。十分に実績があり、Bluetooth 認証向けに事前認証済みです。詳細はこちら: nrf-softdevice GitHub。
このクレートを使って、このプロジェクトで Bluetooth を処理します。これを使用するには、クレートに対して次の feature を指定する必要があります。
-
SoftDevice モデルをちょうど 1 つ。モデルによって、クレートがサポートする役割は異なります。micro:bit は s113 SoftDevice を使用するため、それを使用する必要があります。このモデルでは、クレートは peripheral の役割のみをサポートします。central モードはサポートしていません。
-
サポートされている nRF チップをちょうど 1 つ。micro:bit では、すでに nrf52833 を使用していることがわかっています。
したがって、次の依存関係を使って Cargo.toml を更新する必要があります。
# nrf-softdevice = { version = "0.1.0", features = ["ble-peripheral", "ble-gatt-server", "s113", "nrf52833", "critical-section-impl", "defmt"] }
# 競合の問題を修正するため、最新の(現時点での)リビジョンを使用
nrf-softdevice = { git = "https://github.com/embassy-rs/nrf-softdevice/", rev = "5949a5b", features = [
"ble-peripheral",
"ble-gatt-server",
"s113",
"nrf52833",
"defmt",
] }
nrf-softdevice-s113 = { version = "0.1.2" }
これに加えて、今回のユースケースで必要となる ble-peripheral や ble-gatt-server といった追加 feature もいくつか有効にしています。
StaticCell クレート
"StaticCell" クレートは、変数を実行時に初期化する必要がありつつ、その変数に static ライフタイムが必要な場合に便利です。
次の依存関係を使って Cargo.toml を更新してください。
static_cell = "2"
Heapless クレート
heapless クレートの主な考え方は、動的メモリ(ヒープ)を必要としないデータ構造を使うことです。代わりに、すべてが固定サイズのメモリ領域に格納されます。
次の依存関係を使って Cargo.toml を更新してください。
heapless = "0.8"
たとえば、heapless::Vec は Rust の通常の Vec に似ていますが、大きな違いが 1 つあります。最大サイズがあらかじめ固定されており、そのサイズを超えて拡張できないことです。これは、ヒープメモリが利用できないことが多い Embedded Rust で特に役立ちます。
Futures
futures クレートは、非同期コードを書くためのコアツールを提供します。バッテリーレベル通知処理と GATT サーバータスクを並行して実行するために、ここではその select! と pin_mut! マクロを使用します。
futures = { version = "0.3.29", default-features = false }