LightBlue Bean を iOS から呼んでみる

購入してからずいぶん時間が経ってしまい、電池も切れ(笑)、かわいそうなのもあるし、ちょいと自分の研究のためもあって今日はいじることにした。電池は入れ替えた。

つなげたらいきなりファームウェアをアップデートせよ、と来た。ファームウェアのアップデートが走るだけでも少し安心する。アップデートが出る、てことは、メンテされてるってことだもんね。

さて、今日は iOS(iPhone 6 Plus)から LightBlue Bean にアクセしてみたいと思う。当然、Objectiv-Cでプログラムを書いて、データの読み書きをする、ということだ。

PunchThrough が、Objective-C用のライブラリーを出している。

インストール方法はこちら。
英語が苦手な方向けに言うと、CocoaPods という Objectiv-C用の依存性解決ツールを使うので、それをインストールしたあと、Podfileを使って必要なライブラリーをダウンロードする、という方法。ただ、これはxcodeプロジェクトをまず作って、そのフォルダーの上で行う。
手順のうち、wget と pod setup は、CocoaPods のインストールと設定の手順なので、総合して1回やればよい。
さて、LightBlue Bean を呼び出す Objectiv-C のサンプルコードがここにある
サンプルの中の「bean-xcode-project-template」を使うので、そこで、またCocoaPods を使ってインストールする(pod install)
とりあえず iPhone を繋いて、実行してみよう・・・・あれ? ビルドエラー
library not found for <project name>
いろいろやってみたが、解消できない。もうサンプルはいいや・・・。
リファレンスを見て考えてみる
最初にアクセスすべきなのは
PTDBeanManager
このオブジェクトと通信するために
PTDBeanManagerDelegateを自分のクラスに指定しておく
そしたら、
self.beanManager = [[PTDBeanManager alloc] initWithDelegate:self];
とすると、マネージャーさんと会話できるようになる。
beanManagerDidUpdateState
が送られてくるのだが、これは、Bluetoothの状態の通知。もしオフなら「オフられてるぜ」とユーザーに文句をいう。オンなら
[self.beanManager startScanningForBeans_error:nil];
とかやると、機器をスキャンしはじめる。
見つかると
didDiscoverBean
が呼ばれるので、beanの一覧を溜め込むなりする。このとき渡されるPTDBeanオブジェクトは、LightBlue Bean のファサードなので、後生大事にとっておく。
どれか特定のBeanに対して、仲良くなりたかったら、
[self.beanManager connectToBean:bean error:nil];
とやる。接続が完了すると、didConnectToBean が来るので、接続完了。
そしたら、センサーの読み出しとかができる。
たとえば、加速度センサーが読みたかったら、
PTDBeanDelegate
を指定しておいて、
self.bean.delegate = self;
[self.bean readAccelerationAxes];
とかすると読めるのだが、残念ながら(?)同期メソッドではない。この結果としてdidUpdateAccelerationAxes
が呼ばれるので、そこで渡されるPTDAccelerationオブジェクトから、x、y、z、の加速度を読み出して使うことになる。1秒おきにデータが欲しければ、自分でNSTimerなどを使って繰り返し呼ぶ。このへんの動作は、iOSのセンサーとは少し違うので注意が必要だ。
このへんは、上記のサンプルから読み取れるので、必要に応じて読んだらよいと思う。
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中