Bluetooth Low Energyで遊んだ話

このエントリーは、エキサイト Advent Calendar 2016の12/11の記事です。


こんにちは。
ブロードバンド技術部の古内です。


Bluetooth Low Energy(BLE)で遊んだ話(1年前)を簡単にまとめます。


はじめにBLEとは

Bluetooth SIGが規格を策定しておりBluetooth 4.0のことである。
従来のBluetoothと比べてとても省電力である。
すごいBluetoothとでも最初は思っていただければ大丈夫です。
詳しくは検索とか公式見るとかの方が早いので。


やったこと

まずはやったことを簡単に書くと スマホでFacebookのIDをBLEのビーコンでアドバタイズして、他のスマホでビーコンを検知するというをやりました。
さらに、これを双方向に行いすれちがい通信的なことをやりました。
なぜこれをやったのかというと、当時Facebookには「近くの友達を探す」機能がなかったのとIoTっぽいことをやってみたかったからです。


もっと詳しくやってみたかったことを書くと

  • BLEを用いれば今後IoT対応もできる。
    例えば、友達のおすすめの飲食店や友達おすすめの本など商品やお店に近づいたら通知してくれたり、BLE対応家電とか出てくればこれも該当する可能性があります。
  • なるべくオンライン上の処理を減らし、オフラインでもすれちがい通信ができるアドホックなアプリケーション作成。
    「これなんで?」と思う方もいると思うので理由を後述します。

この辺りを結構意識しました。


実装はAndroidと以下のものを用いて実装しました。

  • realm(DB)
  • facebook SDK
  • javaとか
    • android.bluetooth.BluetoothAdapter
    • android.bluetooth.BluetoothManager
    • android.bluetooth.le.AdvertiseData
    • android.bluetooth.le.AdvertiseSettings
    • android.bluetooth.le.BluetoothLeAdvertiser
    • android.bluetooth.le.BluetoothLeScanner

この辺使った(はず)


詰まった点とか注意点

  • そもそも1年前ほどの情報なので少し古い可能性があるのでそこは何卒、何卒…。
  • 当時一番厄介だったことはBLEの動作が端末(Bluetoothのモジュール)によって動く・動かないがありました。
    実際に自分のNexus5では動作しなかったためNexus9で動作テストを行いながら開発しました。
    Nexus5のOSアップデートでも解決できない問題だったためNexus5くらいの世代のスマホは動かない可能性があります。すごく悲しい…。
  • アドバタイズメントパケットの中身をバイナリレベルで少し知っておかないとだめです。(自分は16進数の定数とかを入れながら頑張りました。AltBeaconでやったほうがいいと思います。)
  • Javaでライブラリ無しでBLEを実装するとき2つくらい実装パターンがある。(Androidバージョンによって変わる&AltBeaconとかライブラリ使ったほうがいい。)

上記で書いた「やってみたかったこと」で意識した理由をここで書きます。

IoTはモノのインターネットと言われていて、たくさんの様々なものが通信するようになると言われています。
例えば、蛍光灯から玄関の鍵、家電と様々なものが通信で制御できるのが当たり前の時代が来たとします。
現在のように、どこかにサーバがありそこを介して通信を行い制御するという仕組みをそのままやろうとすると接続されるモノの数があまりにも多すぎて現実的ではないと勝手に思っています。
その為、わざわざインターネットを介してサーバに接続し制御するという方法ではなく、近距離にある端末同士がネットワークを組み互いの情報を交換し、その場で解決できればいいなぁと思ったのが理由です。
こんなこと書きましたが全部が全部アドホックである必要はないと思います。最低限必要なことはインターネットに接続して解決し、インターネットがなくても大丈夫そうなことはアドホックに解決できるがベストだと思います。(当たり前ですけどw)


まとめ

実際BLEを用いたアプリを作ってみてとてもBluetoothの進化を感じました。
特にAndroidやRaspberry PiにUSBドングルを使ってビーコン化させたりしてみて省電力の近接通信の可能性をすごく感じています。
今後はArduino互換のBLE対応デバイスでもやってみたいです。(物は買ったけど難しくて進んでないとは言えない…。)


明日は自分のチューターの中村さんです!
偉大な先生の記事なので必ず読みましょう!!



エンジニア募集

エキサイトではエンジニアとして一緒に働いてくださる方を新卒採用と中途採用で募集しています。詳しくは、こちらの採用情報ページをご覧ください。

[PR]
by ex-engineer | 2016-12-11 10:00