Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

依存関係

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-peripheralble-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 }