7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rust 3Advent Calendar 2020

Day 17

2020年 Rust で使える Bluetooth Low Energy ライブラリはどうなってるの (Windows10)

Last updated at Posted at 2020-12-16

RustからBLEを扱うためのライブラリ(Windows10用)を調べています。

Windows10向けBLE実装の現状

winrt-rs

昨年末に調べた時はwinrt-rust v0.6一択の状況でした。今年に入ってこのrust向けwinrtの実装に変化がありました。
crates.ioのwinrtを見ると、普通にv0.7系がリリースされているように見えますが、実はv0.7から開発元が変わっていて

という状況になっています。

そしてMicrosoftが実装したv0.7はv0.6と互換性がなく、そのまま置き換えることができません。残念です。

BLEまわりを少しだけ触ってみた感じですが、v0.6からv0.7になり

  • winrt側のAPIがComPtrに包まれなくなった(そのまま出てくる)
  • BluetoothLEDevice2とかBluetoothLEDevice3などを生成しなくて各種APIが使えるようになった(BluetoothLEDeviceからそのまま呼び出せる)
  • イベントハンドラの引数型が変更になった

注:winrt-rsでのBluetoothLEDevice2や3については、以前に書いた記事にまとめてあります。

v0.6時代には実質的に使えなかったAPI(APIの引数に必要な型をRust側で生成する方法が存在しないもの)がどうなっているのかは未調査です。追って調査したいと思っています。

btleplug

そして今年はクロスプラットフォームを謳うBLEライブラリ、btleplugが登場しました。

このbtleplugは、Windows, MacOS, Linuxに対応しています。
使用できる機能は現段階では各OSで違いますが、同期のRead/Write程度であればどのOSでも動くようです。

Windows向けの下回りはwinrt-rs v0.6でした。
とりあえずWindowsの下回りをwinrt-rs v0.7に対応させるプルリクを投げてみました。 マージされるかどうかはよくわかりません。 マージされましたバンザイ。
上のwinrt-rsの所では詳しく書きませんでしたが、winrt-rs v0.6とv0.7のBLEまわりの違いについて誰かの何かの参考になれば嬉しいです。

APIはRumbleに合わせていて、そのAPI体系を他のプラットフォーム上でも実現する形になっています。
元々のRumbleのAPI由来なのですが、Notifyハンドラあたりの扱いがイマイチよくわからない作りになっていて使いにくい雰囲気を受けました。

そのうち発展して使いやすくなっていくことを期待していたのですが、残念ながらbtleplugの開発者が保守にあまり興味を持っていない様子なので、なんだか先行き不透明です。

(いきなり)まとめ

2020年12月現在、Windows上でRustを使ってBLEを扱える簡単便利なライブラリは未だ存在しないようです。
クロスプラットフォームを考えないのであれば、winrt-rs経由で使うのが一番素直なのかもしれません。

今後の充実に期待したいです。

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?