Bluetooth®LE通信距離確認キットアプリ開発記録
こんにちは、 iOS エンジニアの伊藤です
現在、Bluetooth®LE(以下、「BLE」と表記します)の電波の飛びを可視化するiOSアプリの開発を行なっています
その中で色々発見できたことがあったので、共有として記事を書かせていただきます
※このアプリでの"BLEの電波の飛び"とは"BLE RSSI"の数値を判断基準としています
開発のきっかけ
自社サービスのため池管理システムでは、ルーターと水位センサー及びカメラをBLE LongRangeを利用して、数十メートルの距離を通信しています
デバイス性能的にはBLEの通信は問題はないはずということでしたが・・・現地だとうまくいかないということが発生していました
BLEはデバイス性能的には通信可能な距離であっても、現地の建物や障害物のような環境によって想定よりも通信可能距離が短くなってしまうことはあります
個人的には、ため池のような何も障害物がない空間でもデバイス性能を発揮しにくい理由が何かあるのかと疑問を持っていました
現在はサービスとして、設置ガイドアプリを利用していただくことで、安定して設置することは可能になっています
この設置ガイドアプリを作成していく中でどのように設置すれば繋がりやすいのかをリアルタイムに調査できる汎用的なツールがあれば便利なのではないかと考えていました
それからたまたまBLE RSSIを比較したいという意見があり、上記の様な問題解決もできそうだったら良いよねということがありまして
会社のノリで機能を盛り込んだ"飛び体感キット"アプリの開発を行うことになりました
システム構成図
スマホを受信機ではなく、専用の受信機を用意した理由として、
- BLE以外のタスク処理も行っていること
- アンテナ性能が機種によって様々であること
以上の理由で電波の飛びを正しく評価できないと考えた為です
飛び体感キットでできること
主な機能
ーアドバタイズ検索
・受信機が受信した周辺のBLEデバイスのアドバタイズ情報をリスト表示する
ーアドバタイズ監視
・受信機が受信した周辺のBLEデバイスのBLE RSSIをリアルタイムチャートで表示する
ーBLEテスト(マップテスト・アドバタイズ受信テスト)
・受信機と送信機で専用の通信テストを行い、結果を表示する
ーコネクション監視
・受信機と送信機を接続し、送信機のBLE RSSI・送受信機の加速度をリアルタイムチャートで表示する
※iOSアプリと受信機は、BLE Legacyで接続しアドバタイズ情報を取得します
※受信機は設定により、BLE Legacy/LongRangeで周辺のBLEデバイスのアドバタイズ情報を取得します
アドバタイズ検索
受信機の周辺Bluetoothデバイスリストを表示
- リアルタイムで取得・更新を行う、BLE RSSIによってアイコンの色が変更される
- 名前で判別できない時のため、個別に名前を記録する
- 受信機経由でアドバタイズ情報を取得することで、普段iOSから見ることのできないアドバタイズ情報を表示する
アドバタイズ監視
他Bluetoothデバイスと送信機デバイスのBLE RSSIの比較チャートを表示
- Bluetoothデバイスごとのアドバタイズ取得間隔・BLE RSSIをリアルタイムで比較を行う
- 白い点がアドバタイズの受信した時刻となっていて、リアルタイムで更新される
BLEテスト(マップテスト)
送受信機間の通信距離を測定
- 送受信機間のBLE RSSIの測定を行う
- スマホのGPSを利用し送信機の設置位置を記録し、そして受信機を持って移動することで、擬似的に送受信機間の通信距離測定を行う
- 移動地点を記録していくことで、その地点でどの程度の電波強度で繋がっていたかどうかがログとして残すことができる
BLEテスト(アドバタイズ受信テスト)
送受信機間でアドバタイズ受信頻度測定
- 受信機は一度スマホと切断し、フルスキャンを行うことで送信機のアドバタイズの受信率を測定を行う
- 実際にどの程度アドバタイズが受信可能なのか測定できる
コネクション監視
送受信機接続状態でのBLE RSSIの測定チャート
- チャート表示することで、アドバタイズ時よりも接続時の方が高頻度に通信を行っていることが確認できる
- 接続状態での通信状況をリアルタイムで監視できる
デモ動画
アドバタイズ検索・監視
- 緑が送信機のチャートになり、一番近いところに置いてあるためとても電波状態がよく表示されています
アドバタイズ受信テスト
- 送受信機間でのアドバタイズ受信率を測定します
- BLEデバイスが多ければ多い環境であるほど、受信数も少なくなります
最後に
開発を始めたところ、オフィス内ではとんでもない数のアドバタイズが飛び交っていることがわかって驚きました(多すぎてiPhoneもiPadもすぐ固まってしまいました)
アドバタイズ受信テストでは、自宅でテストを行なった時より、オフィス内でのテストの方がアドバタイズ受信数が100ほど減っていることが確認でき、(何度テストしても同様の結果となりました) 他のBLEデバイスのアドバタイズのせいで、受信率が悪くなるという結果も得られたのでアプリ開発者としては、勉強になりました
試験を重ねて、BLEデバイスの通信できない問題を解決できる様なアプリにしていけるように開発・機能改善を加えていきたいと考えています
ここまでご覧いただきましてありがとうございました
NEXT
ドローン リモートIDの検証