アプリ置き場

アプリ置き場

http://www.moreread.net/

Bluetoothデバイスのバッテリー残量を表示する

昨今はPC回りの機器がワイヤレス化して便利。机がすっきり。マウス、キーボード、ヘッドホン、ゲームパッド、充電もQiなどなど。
ただし、Bluetooth機器は取り込み中(MMOとか…)にバッテリーが切れると困る。Windows上からBluetoothの設定画面で一応バッテリー情報を見れるのだけど、奥まった場所にあり不便。
何かしらバッテリー情報を表示するガジェットがないかと探したけどなぜかなさそう。ならば自分で作るかとBluetoothについて少し勉強した。
 
バッテリー情報の取り方①
Bluetooth Low EnergyのBatteryServiceに対応したデバイスではバッテリー残量を取得できた。
バッテリーサービス
0000180f-0000-1000-8000-00805f9b34fb
バッテリー情報キャラクタリスティック
00002a19-0000-1000-8000-00805f9b34fb
バッテリー情報の取り方②
昔ながらのBluetoothClassicではハンズフリープロファイル(HFP)に対応していればそれに従ってバッテリー情報がとれる。RFCOMMというプロトコルでシリアル通信すればいい。HFPプロトコルスタック的にはこのRFCOMMの上にのっかっている。
ヘッドセット(HFP)
0000111e-0000-1000-8000-00805f9b34fb
※詳細な技術情報は上記のUUIDやら単語でググったりGitHUB検索すればいろいろ出るはず
 
しかし①はBLEのBatteryServiceに対応したデバイスは少なく、ほとんどの機器のバッテリー情報が取れない。またWindowsPCと接続をとりあっているのかすぐ接続が切れる。更新通知設定は動作しなかった(使ったデバイスが悪いだけの可能性もあるけど)。まぁ毎度接続しなおせばバッテリー情報は一応とれる。
 
②はそもそもヘッドホンとしてWindowsで接続中なので、ソケット横取りしてバッテリー情報を取ることはできない(多分)。ペアリングしたあと、手動で切断した状態ならシリアル通信できた。ドライバの層でやらないとダメそう。
 
バッテリー情報を取得するソフトないなぁと思ったけど、これらが理由かな。
でも色々調べまわってたらBluetooth Battery Monitorなるものを発見した。
おそらくドライバレベルで対応している。そして素晴らしいことにバッテリー情報を取得するAPIが提供されていた。でも、ガジェットとして常時表示できないのと、見た目が好みじゃなかった。。
 
ということで単独なら①を使い、Bluetooth Battery Moniterが入っていれば提供APIを叩く感じでガジェットを作った。
Bluetooth Battery Gadget

f:id:nazenaninadesico:20210717085923p:plain

・2022/03/09 追記
Windows11でウィンドウが角丸になるので、角丸にしないオプションを追加。ただし影もなくなります。