使ってみようiBeacon

Blog Single

前回に引き続きBLEネタもとい、Bluetoothの技術の”使ってみよう”をお届けいたします。

さてそれでは早速おさらいになりますが、”BLE”とはなんだったでしょうか?


はい、”Bluetooth Low Energy”でしたね!

知識的にはそんなに難しいものではないのですが、普段あまり馴染みのないもので、Bluetoothと聞けばイヤホンだったりヘッドホンを想像されるかと思います。
技術はほぼ同じものでも、BLEはより低電力で近距離無線通信を行うことができます。

少し掘り下げますと、BLEにはブロードキャスト型コネクション型という2つの接続形態があり、ビーコンと呼ばれる発信機を使って実現しているのがブロードキャスト型になります。
コネクション型は通常のBluetooth機器との接続で利用されているもの同様なのですが、より低電力での通信を行えることが大きな違いとなります。

今回はブロードキャスト型の接続形態を利用したBLEのアプリ側の実装に焦点を当てていきます。

BLEが幸せにする世界という記事の最後では、発信機であるビーコンを自身のパソコン上に立ち上げてみる、という実践についてお伝えしましたが、それが本当に発信されているのかというのは、気になりますよね。実際iPhoneのアプリでは、発信されているビーコンを取得し確認するものもありますが、ここはエンジニアらしく確認用のアプリも作ってみたいと思います。

アプリ自体はiOSアプリを想定して作成していきます。

まずはプロジェクトの作成。”Single View App”を選択します。

プロジェクトが作成できたら、早速ViewControllerに処理を書いていきます。
今回はBLEのブロードキャスト型ということで、CoreLocationフレームワークを読み込ませますが、コネクション型の場合はCoreBluetoothフレームワークを使用します。

import CoreLocation

CoreLocationフレームワークは位置情報関連の機能がパッケージされており、GPSを使用した位置情報の取得にも使われます。

位置情報を取り扱うにあたり、機能を管理するCLLocationManagerクラスのインスタンスを宣言しておきます。

以下のように必要なパラメータを宣言し、検索したいUUIDを定数にセットします。今回は固定値として設定していますが、この辺りは検索画面を用意するなどして動的にすることもできますね。

// Declares
var locationManager:CLLocationManager!
var beaconRegion:CLBeaconRegion!
var beaconUuids:NSMutableArray!
var beaconDetails:NSMutableArray!
// 定数(BLEにて検索対象のUUID)
let UUID = "AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE"

設定したUUIDの領域(リージョン)に入ったか出たかを監視する為に、リージョン監視を行う必要があります。

let uuid: NSUUID! = NSUUID(uuidString: "\(UUID.lowercased())")
let identifierStr: String = "ble_client"
beaconRegion = CLBeaconRegion(proximityUUID: uuid as UUID, identifier: identifierStr)
beaconRegion.notifyEntryStateOnDisplay = false
beaconRegion.notifyOnEntry = true
beaconRegion.notifyOnExit = true
locationManager.startMonitoring(for: beaconRegion)

最後のlocationManager.startMonitoring(for: beaconRegion)で、監視対象を引数に監視を開始しています。

実際にBLEの領域(リージョン)に入ったかどうかを通知させるには、以下のように”LocationManager”を使うことで、フォアグラウンド・バックグラウンド共に1秒間隔で通知することができます。

func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) {
    ...
}

今回は対象のUUIDを持ったBLEを検知し通知するところまでが着地点なので、実際に確認してみましょう。

Beaconの発信源からの距離に応じてRSSIの値が変動していますね。
画面出力ではなくデバッグコードの出力で値の変動を確認していますが、プロダクトアプリとして実装する場合は、対象のUUIDを内部的に検知している時のみ外部サーバと通信を行う、といった方法の連携が想定できます。

まとめ

iBeaconをはじめとしたBLEの技術は数年前から注目されていますが、圧倒的な成功事例はあまり耳にしません。
IoTとの連携も焦点になっているので、発想力次第では大きな成果が期待できるのではと思います。
ターゲットやマーケティング、マネタイズといったプロダクトレベルに落とし込む為の課題も多くありますが、身近にあるもので開発できるので、皆さんも是非挑戦してみてはいかがでしょうか。
またの機会には実際のアプリを紹介できればと思います。

Posted by SakaiYasuhiro
PHP,NodeJS,Reactを主に使っているが、デザイン周りもこなす何でも屋。 自称: 可能性の獣

Other Posts: