Raspberry piとiBeaconで出勤簿風を作ってみた

Raspberry piとiBeaconで出勤簿風を作ってみた

iOS7が登場してからiBeaconって流行ってますね!

そこで私もiBeaconを使って簡単なデモを作成してみました。

用意したもの

 ◼︎iMac
 ◼︎Raspberry pi
2015020402

 ◼︎Bluetooth ドングル
2015020403

 ◼︎iPhone6plus

【デモ画面】
・出社したとき
2015020404

・退社したとき
2015020405

・ログもしっかり残ってます!!
2015020406

全体の構成

rasberry側

  • rasberry piにbluetooth関連のファイルをインストールします

    bluez
    https://www.kernel.org/pub/linux/bluetooth/
    bluez-ibeacon
    https://github.com/carsonmcdonald/bluez-ibeacon

  • rasberry piにbluetoothドングルを差し込みます
  • rasberry piでibeaconを起動させます

iPhone側

  • iOSアプリを開発します!
  • iPhoneのbluetoothをオンにします!
  • beaconをキャッチします!
  • LocalNotificationで通知をだしてサーバーにログを送信します

重要なポイント

rasberry piが無くてもiMacでもBluetoothの電波を飛ばすことが可能です。

しかし、2015年1月現在YosemiteではMac単体で電波を飛ばすことができなくなっております。

上記Bluetoothドングルをさして動かすことができるのですが、他の有線で繋がっていないBluetoothキーボード などがつながらなってしまいました・・・

今回はraspberry piがありましたので、それを利用してみました。

アプリ識別子 (UUID)

このibeaconを起動させる際に埋め込むUUID(0772309735BF443AAF5913F8374702C6)はアプリで識別するのに必要です。
生成するときはターミナルを開いて「uuidgen」と入力し、出てきたuuidを利用するといいと思います。

plist入力

 iOS8以降からCLLocationMangerを使用する際は、それを使用する範囲(アプリを開いている間だけ or アプリを閉じた後も常時 )の設定とその情報をplistに入力しておく必要があります。
 ↓以下のいずれか

beaconイベント

  beaconを受信した際に呼ばれるイベント


  beaconが受信されなくなった際に呼ばれるイベント

 がありますが、
 
アプリを初回に起動した瞬間にbeaconの範囲内にiPhoneが存在していると、didEnterRegionは呼ばれません。

ので、raspberry piから結構離れてみるか、一旦raspberry piのbeaconをストップして再起動してみましょう。

またdidExitRegionはbeaconが受信されなくなってから20~30秒近く経過しないと動きませんので、気長くまってみましょう!

バックグラウンド対応

 iPhone側からサーバーに通信をするときは、よくNSURLConnectionを活用しますが、バックグランドでは動きません。
 
今回、NSURLSessionを使ってバックグランドからの通信を実装しております。
 参考までの今回のコードを載せておきます

iBeaconの活用イメージ

 各社が様々なibeaconを活用したソリューションを提案しておりますが、現在の大きな問題は「iPhoneのbluetoothをオンにしておかなれければいけない(電池が減りやすい)」事だと思います。

今回の出勤簿風も、「出勤確認のためにわざわざbluetoothをオンにしておく必要があるのか?」と言われたら・・・
そこまでの価値は今はないでしょう!!!

価値があるアプリをユーザーに提供することを心がけたいですね!

コメント