2013年12月21日土曜日




今回は、あまり余所のブログでは取り上げられていない領域識別子(identifier)に注目してみた。

CLBeaconRegionオブジェクトの生成時に指定するidentifier(日本語で言うと、識別子)は、領域の識別子である。これはそのアプリケーション内で自由に決められるものである。

CLBeaconRegionオブジェクトの初期化処理(initWith...)には、次の種類がある。

  • - (id)initWithProximityUUID:(NSUUID *)proximityUUID identifier:(NSString *)identifier;
  • - (id)initWithProximityUUID:(NSUUID *)proximityUUID major:(CLBeaconMajorValue)major identifier:(NSString *)identifier;
  • - (id)initWithProximityUUID:(NSUUID *)proximityUUID major:(CLBeaconMajorValue)major minor:(CLBeaconMinorValue)minor identifier:(NSString *)identifier;

したがって、識別子をつけられる対象は、次のような組み合わせだけである。

組み合わせ

  • proximityUUID
  • proximityUUID、Major
  • proximityUUID、Major、Minor


ここからわかること、および、実際に動かしてわかったことがある:

1. 同じUUIDを持つデバイスが複数あるときに、3階層のグルーピングが可能である

2. 異なる組み合わせには、同じ識別子を付けられない
(実際、同じ識別子で異なるUUIDのCLBeaconRegionオブジェクトを作ろうとすると、後から作ったオブジェクトで上書きされてしまう)

3. 同じ組み合わせに対して、異なる識別子が付けられる

2つ目はあまり意識されていないところだと思うが、重要である。例えば、いろんなメーカーから購入したiBeaconデバイスを寄せ集めて、ひとつの領域を監視したいとする。しかし、そのようなiBeaconデバイスの中には、UUIDが予め決められていて、購入者が変更できないものもあるかもしれない。そうなると、これらのデバイスすべてを、同じ領域を表すためには使えないことになる。(たいていのiBeaconは、購入後もアプリケーションからUUIDが変更できるようになっている。)

この識別子、使い方によっては非常におもしろいことができる。ひとつのiBeaconに近づいたとか離れたとかといった使い方は基本中の基本で、本質的な使い方は、文字通り、領域にはいったかどうかである。例えば、同じUUID、MajorをもつiBeaconが、下図のように輪っかになっている場合は、そのUUIDとMajorの組に対して付けた識別子は、その赤い輪っかの領域を表す領域識別子として使用することができる。

3つ目の性質に着目すれば、同じビーコンでも異なる領域として使用可能なので、次図のように同じビーコンの配置に対して、いくつもの異なる領域が考えられる。(ただし、この場合、異なるビーコンには同じ識別子が使えないので、識別子自体をURLのようなドメイン構造にする工夫が必要となる。図では、aグループ、bグループ、cグループとしている。どのビーコンも2つの領域に属している。)

    


これは、iBeaconを社会インフラとして考えた場合、非常に柔軟に扱えることを意味している。たとえば、ある区域にiBeaconを均等に配置しておき、適切な識別子を与えただけで、あるルートを表す領域が取得でき、iBeaconの電波を拾って道案内を行うなど、低コストなナビゲーションシステムが実現できる。

例えば、次の図のように大阪駅構内にiBeaconを配置しておく、御堂筋北口から中央きっぷ売り場への道順を表す領域(赤枠)や、御堂筋南口から高速バスターミナルまでの道順を表す領域(青枠)など、おなじiBeaconインフラに対して、ことなる領域を定義することが可能となる。




領域の識別子をうまく使うことが、柔軟で低コストなiBeaconサービスを提供するための必須条件であることは間違いないだろう。


[Tips] iBeaconの領域識別子とは?




今回は、あまり余所のブログでは取り上げられていない領域識別子(identifier)に注目してみた。

CLBeaconRegionオブジェクトの生成時に指定するidentifier(日本語で言うと、識別子)は、領域の識別子である。これはそのアプリケーション内で自由に決められるものである。

CLBeaconRegionオブジェクトの初期化処理(initWith...)には、次の種類がある。

  • - (id)initWithProximityUUID:(NSUUID *)proximityUUID identifier:(NSString *)identifier;
  • - (id)initWithProximityUUID:(NSUUID *)proximityUUID major:(CLBeaconMajorValue)major identifier:(NSString *)identifier;
  • - (id)initWithProximityUUID:(NSUUID *)proximityUUID major:(CLBeaconMajorValue)major minor:(CLBeaconMinorValue)minor identifier:(NSString *)identifier;

したがって、識別子をつけられる対象は、次のような組み合わせだけである。

組み合わせ

  • proximityUUID
  • proximityUUID、Major
  • proximityUUID、Major、Minor


ここからわかること、および、実際に動かしてわかったことがある:

1. 同じUUIDを持つデバイスが複数あるときに、3階層のグルーピングが可能である

2. 異なる組み合わせには、同じ識別子を付けられない
(実際、同じ識別子で異なるUUIDのCLBeaconRegionオブジェクトを作ろうとすると、後から作ったオブジェクトで上書きされてしまう)

3. 同じ組み合わせに対して、異なる識別子が付けられる

2つ目はあまり意識されていないところだと思うが、重要である。例えば、いろんなメーカーから購入したiBeaconデバイスを寄せ集めて、ひとつの領域を監視したいとする。しかし、そのようなiBeaconデバイスの中には、UUIDが予め決められていて、購入者が変更できないものもあるかもしれない。そうなると、これらのデバイスすべてを、同じ領域を表すためには使えないことになる。(たいていのiBeaconは、購入後もアプリケーションからUUIDが変更できるようになっている。)

この識別子、使い方によっては非常におもしろいことができる。ひとつのiBeaconに近づいたとか離れたとかといった使い方は基本中の基本で、本質的な使い方は、文字通り、領域にはいったかどうかである。例えば、同じUUID、MajorをもつiBeaconが、下図のように輪っかになっている場合は、そのUUIDとMajorの組に対して付けた識別子は、その赤い輪っかの領域を表す領域識別子として使用することができる。

3つ目の性質に着目すれば、同じビーコンでも異なる領域として使用可能なので、次図のように同じビーコンの配置に対して、いくつもの異なる領域が考えられる。(ただし、この場合、異なるビーコンには同じ識別子が使えないので、識別子自体をURLのようなドメイン構造にする工夫が必要となる。図では、aグループ、bグループ、cグループとしている。どのビーコンも2つの領域に属している。)

    


これは、iBeaconを社会インフラとして考えた場合、非常に柔軟に扱えることを意味している。たとえば、ある区域にiBeaconを均等に配置しておき、適切な識別子を与えただけで、あるルートを表す領域が取得でき、iBeaconの電波を拾って道案内を行うなど、低コストなナビゲーションシステムが実現できる。

例えば、次の図のように大阪駅構内にiBeaconを配置しておく、御堂筋北口から中央きっぷ売り場への道順を表す領域(赤枠)や、御堂筋南口から高速バスターミナルまでの道順を表す領域(青枠)など、おなじiBeaconインフラに対して、ことなる領域を定義することが可能となる。




領域の識別子をうまく使うことが、柔軟で低コストなiBeaconサービスを提供するための必須条件であることは間違いないだろう。


2013年12月19日木曜日


ビーコンって何を考えてるんでしょうね?聞いてみたいと思いませんか?

と、唐突に書き始めてしまいました。開発のやりすぎで頭がおかしくなったのでしょうか? いえ、そうではなくて、今回は、ビーコンの近さに応じて、再生する音の大きさを変えてみようというお話です。でも、それはまるで、ビーコンが「近づいたよ〜」「遠のいたよ〜」と言っているように聞こえるので、結構、たのしいのです。(実際には、電波が強くなったよ〜、ですが。。。)

では、さっそく作って行きます。

1.ボタンを押したら、曲を再生する、というところまでを作ります。xcodeのプロジェクト(BeaconVoiceという名前にしました)を作成し、AVFoundation.frameworkを追加します。また、"sounds"というフォルダを作成し、そこに用意したMP3ファイルをおきます(図参照)。


画面はこんな感じ(図参照)。

しょぼいですね〜。音量と電波受信強度のラベルだけはつけときました。

ソースコードは、こんな感じです。(STARTボタンを押すと、曲が再生されて、もう一度押すと、停止する、という動きにしてます。)

ViewController.m


はい、では、次行きましょう。

2.CoreLocation.frameworkをセットして、ビーコンを受信できるようにします。この辺りは、このブログで何回か紹介してますので、コードだけ載っけます。

ViewController.hのプロパティ

ViewController.mのViewDidLoadの中

ViewController.mの中のLocationManagerのデリゲート処理

はい、できました!

では、実行の様子をお聴きください...。


ああ、残念です。音声がお伝えできない。

音量は、0.0〜1.0までの値です。RSSIの値は、-90〜-58にしています。つまり、この画像では、最大値になっています。iPhoneもビーコンもスクリーンショットを撮った開発環境のPCに接続しているので無理ないですね。では、ちょっとビーコンを遠くへ離してみます。

か、かすかに音が聞こえます。そして、ときどき、ゴハッって感じで音が大きくなります。まるで溺れかけの人のように。おおお、いい感じでビーコンの声が聞こえてますね。

まとめ

もともとビーコンの電波がどれくらい不安定なのか知りたく思い、音で体感できるようにしたかっただけなのですが、なかなかいい感じで確認できることがわかりました。例えるなら、トンネルに入ったときのラジオの音でしょうか?でも、ビーコンに近いときは、安定して聴けます。

応用として、ある範囲では、クラシック、ある範囲では、ジャズなど、特定の範囲でだけ特定の音楽が聴けるとかのサービスができそうですね。

(おわり)

ビーコンの声を聞いてみよう!


ビーコンって何を考えてるんでしょうね?聞いてみたいと思いませんか?

と、唐突に書き始めてしまいました。開発のやりすぎで頭がおかしくなったのでしょうか? いえ、そうではなくて、今回は、ビーコンの近さに応じて、再生する音の大きさを変えてみようというお話です。でも、それはまるで、ビーコンが「近づいたよ〜」「遠のいたよ〜」と言っているように聞こえるので、結構、たのしいのです。(実際には、電波が強くなったよ〜、ですが。。。)

では、さっそく作って行きます。

1.ボタンを押したら、曲を再生する、というところまでを作ります。xcodeのプロジェクト(BeaconVoiceという名前にしました)を作成し、AVFoundation.frameworkを追加します。また、"sounds"というフォルダを作成し、そこに用意したMP3ファイルをおきます(図参照)。


画面はこんな感じ(図参照)。

しょぼいですね〜。音量と電波受信強度のラベルだけはつけときました。

ソースコードは、こんな感じです。(STARTボタンを押すと、曲が再生されて、もう一度押すと、停止する、という動きにしてます。)

ViewController.m


はい、では、次行きましょう。

2.CoreLocation.frameworkをセットして、ビーコンを受信できるようにします。この辺りは、このブログで何回か紹介してますので、コードだけ載っけます。

ViewController.hのプロパティ

ViewController.mのViewDidLoadの中

ViewController.mの中のLocationManagerのデリゲート処理

はい、できました!

では、実行の様子をお聴きください...。


ああ、残念です。音声がお伝えできない。

音量は、0.0〜1.0までの値です。RSSIの値は、-90〜-58にしています。つまり、この画像では、最大値になっています。iPhoneもビーコンもスクリーンショットを撮った開発環境のPCに接続しているので無理ないですね。では、ちょっとビーコンを遠くへ離してみます。

か、かすかに音が聞こえます。そして、ときどき、ゴハッって感じで音が大きくなります。まるで溺れかけの人のように。おおお、いい感じでビーコンの声が聞こえてますね。

まとめ

もともとビーコンの電波がどれくらい不安定なのか知りたく思い、音で体感できるようにしたかっただけなのですが、なかなかいい感じで確認できることがわかりました。例えるなら、トンネルに入ったときのラジオの音でしょうか?でも、ビーコンに近いときは、安定して聴けます。

応用として、ある範囲では、クラシック、ある範囲では、ジャズなど、特定の範囲でだけ特定の音楽が聴けるとかのサービスができそうですね。

(おわり)

2013年12月16日月曜日



f:id:bs-android:20131215082308j:image

はじめに

GoogleGlassの新型(V2)の目玉の一つにイヤホン(Earbud)のサポートがあります。

このイヤホン、実は両耳タイプも存在しているのですが、Explore招待プログラムの時期には発売されておらず、なんとか新型の入手に成功できたものの、同時購入することができずに悔しい思いをされている方も多いのではないかと思います。また標準添付のイヤホンもGlassのロゴをあしらったお洒落なデザインで見た目はかなりクールなのですが、実際に使ってみると装着感がいまひとつで常時着けて使うのには残念な品物でした。

f:id:bs-android:20131215081637j:image:w360

f:id:bs-android:20131215081446j:image:w360

そこでGlassに自分好みのイヤホンを付けられるようにしてみましたので、その方法についてレポートいたします。


Google Glassの新機能をハックする



f:id:bs-android:20131215082308j:image

はじめに

GoogleGlassの新型(V2)の目玉の一つにイヤホン(Earbud)のサポートがあります。

このイヤホン、実は両耳タイプも存在しているのですが、Explore招待プログラムの時期には発売されておらず、なんとか新型の入手に成功できたものの、同時購入することができずに悔しい思いをされている方も多いのではないかと思います。また標準添付のイヤホンもGlassのロゴをあしらったお洒落なデザインで見た目はかなりクールなのですが、実際に使ってみると装着感がいまひとつで常時着けて使うのには残念な品物でした。

f:id:bs-android:20131215081637j:image:w360

f:id:bs-android:20131215081446j:image:w360

そこでGlassに自分好みのイヤホンを付けられるようにしてみましたので、その方法についてレポートいたします。




はじめに

飛行機を使った移動で一番困るのが到着時の荷物受け取り
いつまで待っても預けた荷物が出てこない、いやとっくの昔に出てしまったかも?、もしかしたらロストバゲット!?
流れるベルトコンベアを眺め続けながら、いつもこのような不安がよぎります・・・
今回はそんな悩みをiBeaconで解決してみたいと思います。

iBeaconで海外渡航を楽しく



はじめに

飛行機を使った移動で一番困るのが到着時の荷物受け取り
いつまで待っても預けた荷物が出てこない、いやとっくの昔に出てしまったかも?、もしかしたらロストバゲット!?
流れるベルトコンベアを眺め続けながら、いつもこのような不安がよぎります・・・
今回はそんな悩みをiBeaconで解決してみたいと思います。

2013年12月6日金曜日


※今回の記事は「〔番外編〕 電力測定ツールも自作してみよう」の続編です

今回は測定ツールの第2弾としてアプリケーション編を紹介いたします。


免責事項

この記事に書かれている内容は技術的な参考資料として記載しています
端末等の破損や作業上の事故について弊社および記事作成者は責任を持ちません
また設計上の品質についても保証を行っていませんので、作成時は各自で性能確認等を行うようにしてください。


1. 測定ツールの構成について

前回の記事である測定ツール自作編で作成したハードウェアは次のような構成になっていました。


今回の記事ではArduiono MEGA ADK側で動くスケッチとAndroidタブレットで動作するアプリを作成し、測定ツールで検出した電力値をAndroidタブレットに表示できるようにします。
・Arduino
 測定冶具で検出された電流信号をA/D変換しUSB-HOSTからAndroidタブレットにデータを送信
・Androidタブレット
 ADKプロトコルを使用して取得した測定値を画面に数値およびグラフ化して表示する

2.測定アプリ

今回作成したアプリは弊社内のニーズに基づき次のような機能を実装しました。
・ダミーバッテリの供給電圧
・現在の消費電流
・積算電力(積算電流)
・消費電流のグラフ

実際の表示画面はこのようになっています。


2-1. Arduinoのスケッチ

ADK2011(2012)のサンプルコードをベースに独自の機能を追加しました。
実際のコードについてはこちらを参照下さい スケッチ

・タイマー割り込みを使って1msecごとに電圧と電流のA/D変換
・取得した電流値を積算
・ADK経由でデータを送信

なおArduino上で実際の電圧/電流値に計算しようとすると処理時間が間に合わなくなることからAdruino側ではA/D変換とデータ保持のみを行い、実数化はAndroidアプリで行うようにしています。
被検対象となるAndroid端末のカーネルタイマーが1msecなので10倍の0.1msecごとに電流値を取ることができれば、より高精度な測定が可能となりますがアプリ動作の測定に絞るだけなら1msecでも十分評価できると思います。

<Tips> Android 4.1以降の端末でサンプルコードを使うには
公開されている初期のADKのソースコードはADK2011のみしか対応していないことからADK2012をサポートするAndroid4.1以降の端末ではADKを認識することができなくなりました。
その場合、次のようなパッチを当てると動作させることができます。
AndroidAccessory.cpp
bool AndroidAccessory::switchDevice(byte addr)
{
..
-    if (protocol == 1) {
+    if (protocol >= 1) {
        Serial.print("device supports protcol 1\n");
..
ただし今後のバージョンアップにてプロトコルの互換性が失われる場合がありますので使用にあたってはGoogleの動向をチェックするようにしてください

2-2. Androidアプリ

ADK2011のAPIを使い簡単なアプリケーションを作ってみました。
ADK経由でAdruionoからA/D変換値を取得し、アプリ側で電圧/電流/積算(Sum)に変換して表示します。また電流値をグラフ化して表示も行っています。
サンプルとしてアプリのソースコード添付しました ソースコード

Sum値は取得した電流値を積算したもので累積電力の目安として表示しています。
これがあると長時間に渡る消費電力を知ることができスリープ時の省電力を見るのに便利です。この値に電圧値を掛ければ電力値になりますが、今回アプリでは電圧を一定で測定しているので電流のみとしています。またもし表示を時間単位としたい場合はサンプリング時間を測りながら計算するように書き換えるととよいでしょう。

3.使用方法

・測定ツールと被検対象となる端末を接続してからACアダプタを接続します。
・ACアダプタからの給電が始まるとAndroidタブレットにADKのダイアログが表示されますのでOKボタンを押します。
・次にOFFボタンを押すとボタン表示がONに変わり測定が始まります。
・再度ONボタンを押すとOFFに戻り測定が中断します。スクリーンショットを取る場合に利用してください。
・Clearボタンは測定結果をクリアするときに使います、押すと積算値とグラフ時間軸がゼロに戻ります。

4. 少し特殊な使いかた

測定冶具基板に付いている半固定抵抗を回すとダミーバッテリの供給電圧を変えることができます。これによりバッテリ残量が少ないとき特有の挙動も見ることも可能です。電圧を可変させる際は Androidアプリ画面で表示している電圧値を見ながらバッテリ電圧範囲内でゆっくり可変させるようにして下さい。半固定抵抗は機械的接点で抵抗値を変動させているもののため、乱暴に回すと急激に電圧が変動し端末が破損する危険性があります。なお端末側で統計的に残量計算している機種が多いので反映するまでしばらく掛かる場合があります、その場合は一度再起動するとよいでしょう。

5. 今後の展開 -- 高機能版への進化

弊社ではこの測定ツールを進化させた商用版を準備しております。
本ブログで公開したものに比べてさらに次のような機能がパワーアップしています。
1. サンプリングの高速化
2. 取得データを収集サーバーへ転送
 サーバー側にデータを逐次送信することにより長期間の測定が可能になりました
3. 複数端末のデータ取得
 複数の測定ツールを同時使用することにより多くのデータを蓄積することができます
4. データの分析
 サーバー側で蓄積したデータを用いて統計的なデータ評価が可能となりました
 1台だけの評価に比べて試験環境による誤差が少なくなります

まとめ

今回で測定ツール自作編は終了となります。
ツールを自作することにより本ブログ開始時に使っていた機材に比べて小型軽量化され安価に消費電力が測れるようになりました。

蛇足ではありますが「あのスマホ」もダミーバッテリの作成を行い、端末の電力測定できるようにしました。弊社端末アプリ開発チームのところで重宝しております。



目的を絞ったツールを自作すれば測定器を揃えるよりも小型で安上がりに消費電力を確認することができることがご理解頂けたかと思います。
これで読者の方々のところでもツールを自作してみようという気風が高まれば幸いです。

ブランド戦略部 - 中村和貴

〔番外編〕 電力測定ツールも自作してみよう - アプリ編


※今回の記事は「〔番外編〕 電力測定ツールも自作してみよう」の続編です

今回は測定ツールの第2弾としてアプリケーション編を紹介いたします。


免責事項

この記事に書かれている内容は技術的な参考資料として記載しています
端末等の破損や作業上の事故について弊社および記事作成者は責任を持ちません
また設計上の品質についても保証を行っていませんので、作成時は各自で性能確認等を行うようにしてください。


1. 測定ツールの構成について

前回の記事である測定ツール自作編で作成したハードウェアは次のような構成になっていました。


今回の記事ではArduiono MEGA ADK側で動くスケッチとAndroidタブレットで動作するアプリを作成し、測定ツールで検出した電力値をAndroidタブレットに表示できるようにします。
・Arduino
 測定冶具で検出された電流信号をA/D変換しUSB-HOSTからAndroidタブレットにデータを送信
・Androidタブレット
 ADKプロトコルを使用して取得した測定値を画面に数値およびグラフ化して表示する

2.測定アプリ

今回作成したアプリは弊社内のニーズに基づき次のような機能を実装しました。
・ダミーバッテリの供給電圧
・現在の消費電流
・積算電力(積算電流)
・消費電流のグラフ

実際の表示画面はこのようになっています。


2-1. Arduinoのスケッチ

ADK2011(2012)のサンプルコードをベースに独自の機能を追加しました。
実際のコードについてはこちらを参照下さい スケッチ

・タイマー割り込みを使って1msecごとに電圧と電流のA/D変換
・取得した電流値を積算
・ADK経由でデータを送信

なおArduino上で実際の電圧/電流値に計算しようとすると処理時間が間に合わなくなることからAdruino側ではA/D変換とデータ保持のみを行い、実数化はAndroidアプリで行うようにしています。
被検対象となるAndroid端末のカーネルタイマーが1msecなので10倍の0.1msecごとに電流値を取ることができれば、より高精度な測定が可能となりますがアプリ動作の測定に絞るだけなら1msecでも十分評価できると思います。

<Tips> Android 4.1以降の端末でサンプルコードを使うには
公開されている初期のADKのソースコードはADK2011のみしか対応していないことからADK2012をサポートするAndroid4.1以降の端末ではADKを認識することができなくなりました。
その場合、次のようなパッチを当てると動作させることができます。
AndroidAccessory.cpp
bool AndroidAccessory::switchDevice(byte addr)
{
..
-    if (protocol == 1) {
+    if (protocol >= 1) {
        Serial.print("device supports protcol 1\n");
..
ただし今後のバージョンアップにてプロトコルの互換性が失われる場合がありますので使用にあたってはGoogleの動向をチェックするようにしてください

2-2. Androidアプリ

ADK2011のAPIを使い簡単なアプリケーションを作ってみました。
ADK経由でAdruionoからA/D変換値を取得し、アプリ側で電圧/電流/積算(Sum)に変換して表示します。また電流値をグラフ化して表示も行っています。
サンプルとしてアプリのソースコード添付しました ソースコード

Sum値は取得した電流値を積算したもので累積電力の目安として表示しています。
これがあると長時間に渡る消費電力を知ることができスリープ時の省電力を見るのに便利です。この値に電圧値を掛ければ電力値になりますが、今回アプリでは電圧を一定で測定しているので電流のみとしています。またもし表示を時間単位としたい場合はサンプリング時間を測りながら計算するように書き換えるととよいでしょう。

3.使用方法

・測定ツールと被検対象となる端末を接続してからACアダプタを接続します。
・ACアダプタからの給電が始まるとAndroidタブレットにADKのダイアログが表示されますのでOKボタンを押します。
・次にOFFボタンを押すとボタン表示がONに変わり測定が始まります。
・再度ONボタンを押すとOFFに戻り測定が中断します。スクリーンショットを取る場合に利用してください。
・Clearボタンは測定結果をクリアするときに使います、押すと積算値とグラフ時間軸がゼロに戻ります。

4. 少し特殊な使いかた

測定冶具基板に付いている半固定抵抗を回すとダミーバッテリの供給電圧を変えることができます。これによりバッテリ残量が少ないとき特有の挙動も見ることも可能です。電圧を可変させる際は Androidアプリ画面で表示している電圧値を見ながらバッテリ電圧範囲内でゆっくり可変させるようにして下さい。半固定抵抗は機械的接点で抵抗値を変動させているもののため、乱暴に回すと急激に電圧が変動し端末が破損する危険性があります。なお端末側で統計的に残量計算している機種が多いので反映するまでしばらく掛かる場合があります、その場合は一度再起動するとよいでしょう。

5. 今後の展開 -- 高機能版への進化

弊社ではこの測定ツールを進化させた商用版を準備しております。
本ブログで公開したものに比べてさらに次のような機能がパワーアップしています。
1. サンプリングの高速化
2. 取得データを収集サーバーへ転送
 サーバー側にデータを逐次送信することにより長期間の測定が可能になりました
3. 複数端末のデータ取得
 複数の測定ツールを同時使用することにより多くのデータを蓄積することができます
4. データの分析
 サーバー側で蓄積したデータを用いて統計的なデータ評価が可能となりました
 1台だけの評価に比べて試験環境による誤差が少なくなります

まとめ

今回で測定ツール自作編は終了となります。
ツールを自作することにより本ブログ開始時に使っていた機材に比べて小型軽量化され安価に消費電力が測れるようになりました。

蛇足ではありますが「あのスマホ」もダミーバッテリの作成を行い、端末の電力測定できるようにしました。弊社端末アプリ開発チームのところで重宝しております。



目的を絞ったツールを自作すれば測定器を揃えるよりも小型で安上がりに消費電力を確認することができることがご理解頂けたかと思います。
これで読者の方々のところでもツールを自作してみようという気風が高まれば幸いです。

ブランド戦略部 - 中村和貴

2013年12月3日火曜日



f:id:bs-android:20131202050632j:image:w360

弊社で取りまとめを担当した書籍「NFC Hacks」がオライリー・ジャパン様から発売中です。



http://www.oreilly.co.jp/books/9784873116242/


1章 NFCを知る

1. RFIDと非接触ICカード

2. NFCの利点

3. 「NFCタグ」を知る

4. NFCデバイスの3つのモード

5. Reader/Writerモード

6. Peer-to-Peerモード

7. Card Emulationモード

8. NFCを利用した国内のサービス

9. NFCを利用した海外のサービス

10. NFC対応デバイス

11. 対応チップ

12. NFCの物理学的基礎

13. 電磁誘導の結合強度




2章 NFCの規格を知る

14. NFC Forum Type 1 Tag

15. NFC Forum Type 2 Tag

16. NFC Forum Type 3 Tag

17. NFC Forum Type 4 Tag

18. ISO-DEPについて学ぶ

19. NFC-DEPについて学ぶ

20. LLCPについて学ぶ

21. SNEPについて学ぶ

22. NDEF

23. RTD(Record Type Definition)




3章 AndroidでNFCをHackする

24. SettingからNFCを設定する

25. NFCタグを読み取るためのクラス群(android.nfcパッケージ)

26. NFCタグのタイプ別機能のためのクラス群(android.nfc.techパッケージ)

27. Android 2.3で使えるNFC機能

28. Android 4.0で使えるAndroid Beam

29. Android 4.1/4.2/4.3で使えるNFC機能

30. Android端末をReaderモードで使う

31. アプリケーションでNFCタグを読む方法

32. NDEFを読み込むアプリを作成する

33. Android端末をWriterモードで使う

34. アプリケーションでNFCタグを書く方法

35. NDEFを書き込むアプリを作成する

36. Android Beamを知る

37. Android Beamを送受信するアプリを作る

38. Android Beam送信時にデフォルトのNDEFメッセージを送信しないようにする

39. Bluetooth Handoverについて

40. タグ情報を使いBluetoothデバイスに接続切断する

41. Secure Elementを使用するCard Emulation機能について




4章 WindowsでNFCをHackする

42. NFP機能を使う

43. PC/SC

44. PC/SCによるNDEFタグアクセス

45. PC/SCによるNFCデバイスアクセス

46. Proximity APIの利用

47. Proximity APIでのNDEFアクセス

48. Windows環境でのP2P通信




5章 セキュリティに配慮したNFC応用サービス

49. キーポイントを押さえてセキュリティモデルを検討する

50. 非暗号化領域を利用しつつネットワーク連動サービスを構築する


NFCの基礎から、規格の詳細、Android/Win8での実装方法、NFCを応用したサービスについての考察など、幅広い内容になっています。

NFCについて一から勉強してみたい方、何となく知っているけど分からないことがある方、仕様を確認したい上級者の方にお勧めです。

ぜひ読んでみてください。




[コラム] NFC Hacks発売中です!



f:id:bs-android:20131202050632j:image:w360

弊社で取りまとめを担当した書籍「NFC Hacks」がオライリー・ジャパン様から発売中です。



http://www.oreilly.co.jp/books/9784873116242/


1章 NFCを知る

1. RFIDと非接触ICカード

2. NFCの利点

3. 「NFCタグ」を知る

4. NFCデバイスの3つのモード

5. Reader/Writerモード

6. Peer-to-Peerモード

7. Card Emulationモード

8. NFCを利用した国内のサービス

9. NFCを利用した海外のサービス

10. NFC対応デバイス

11. 対応チップ

12. NFCの物理学的基礎

13. 電磁誘導の結合強度




2章 NFCの規格を知る

14. NFC Forum Type 1 Tag

15. NFC Forum Type 2 Tag

16. NFC Forum Type 3 Tag

17. NFC Forum Type 4 Tag

18. ISO-DEPについて学ぶ

19. NFC-DEPについて学ぶ

20. LLCPについて学ぶ

21. SNEPについて学ぶ

22. NDEF

23. RTD(Record Type Definition)




3章 AndroidでNFCをHackする

24. SettingからNFCを設定する

25. NFCタグを読み取るためのクラス群(android.nfcパッケージ)

26. NFCタグのタイプ別機能のためのクラス群(android.nfc.techパッケージ)

27. Android 2.3で使えるNFC機能

28. Android 4.0で使えるAndroid Beam

29. Android 4.1/4.2/4.3で使えるNFC機能

30. Android端末をReaderモードで使う

31. アプリケーションでNFCタグを読む方法

32. NDEFを読み込むアプリを作成する

33. Android端末をWriterモードで使う

34. アプリケーションでNFCタグを書く方法

35. NDEFを書き込むアプリを作成する

36. Android Beamを知る

37. Android Beamを送受信するアプリを作る

38. Android Beam送信時にデフォルトのNDEFメッセージを送信しないようにする

39. Bluetooth Handoverについて

40. タグ情報を使いBluetoothデバイスに接続切断する

41. Secure Elementを使用するCard Emulation機能について




4章 WindowsでNFCをHackする

42. NFP機能を使う

43. PC/SC

44. PC/SCによるNDEFタグアクセス

45. PC/SCによるNFCデバイスアクセス

46. Proximity APIの利用

47. Proximity APIでのNDEFアクセス

48. Windows環境でのP2P通信




5章 セキュリティに配慮したNFC応用サービス

49. キーポイントを押さえてセキュリティモデルを検討する

50. 非暗号化領域を利用しつつネットワーク連動サービスを構築する


NFCの基礎から、規格の詳細、Android/Win8での実装方法、NFCを応用したサービスについての考察など、幅広い内容になっています。

NFCについて一から勉強してみたい方、何となく知っているけど分からないことがある方、仕様を確認したい上級者の方にお勧めです。

ぜひ読んでみてください。




2013年12月1日日曜日

Bluetoothは2.4GHz帯だから、免許不要だということをよく聞く。しかし、技適はとらなくちゃいけないというのもよく聞く。免許と技適って違うものなの?などと頭が混乱してくる。電波のことをやっていて、"技適"を知らないというのはどうも恥ずかしいことなのか、誰もちゃんと教えてくれない。技適のことを知らないと、安心してBLEを使えない。ということで、今回は、"技適をちゃんと知る"ということと、それとBLEがどう関係するのか、ということに焦点を当ててみる。

技適とは、日本の総務省が定める「技術基準適合証明又は工事設計認証」の略称。

認証制度について、総務省「電波利用ホームページ」の概要は、次のようになっている:
無線通信の混信や妨害を防ぎ、また、有効希少な資源である電波の効率的な利用を確保するため、無線局の開設は原則として免許制としており、当該無線局で使用する無線設備が技術基準に適合していることを免許申請の手続きの際に検査を行うこととしております。
ただし、携帯電話等の小規模な無線局に使用するための無線局であって総務省令で定めるもの(特定無線設備)については、使用者の利便性の観点から、事前に電波法に基づく基準認証を受け、総務省令で定める表示(技適マーク)が付されている場合には、免許手続時の検査の省略等の無線局開設のための手続について特例措置が受けられます。(特例措置の概要は下図参照。)
ここでは、この特例措置の適用を受けるために必要な無線設備に関する基準認証制度の概要をご紹介します。なお、詳細は電気通信機器基準認証制度マニュアルをご参照ください。


ちなみに、技適マークとは、こんなマーク。
(左が平成7年4月から運用されているもの。右は昭和62年10月からの旧マーク。詳しくは、ここを参照。)




日本国内で電波を発する製品はすべてこの技適を取得していないといけない。技適マークが付いていない無線機器を使用すると、電波法違反になる。さらに、技適を取得していたとしても、一般の無線機器は総務大臣の免許が必要となる。ただし、上の概要にあるように、特定無線設備に関しては、技適を取得していれば、総務大臣の免許が不要になる。つまり、免許が不要というのはこの意味だったのである。ただし、無線機器としての性能などは保証されなければいけないので、認証を受ける必要があるということだ。ということは、Bluetoth機器は、この特定無線設備に含まれるということなのか?特定無線設備について、見てみる。

特定無線設備は大きく分けて、4つある。

  1. 免許不要局(20種別)
  2. 特定無線局(37種別)
  3. その他(100種別)
  4. 特別特定無線設備(24種別)

Bluetoothデバイスは、2.4GHz帯(2,402〜2,480MHz)を用いるので、免許不要局の
 2.4GHz帯高度化小電力データ通信システム(2,400~2,483.5MHz)
に属している。

というわけで、Bluetoothについては、技適は必要だが、総務大臣の免許は不要ということで一応納得できました。

参照URL:


余録

日本国内については、技適という認証が必要ですが、海外ではどうなっているのでしょうか。海外では、例えば、北米では、FCC認証、ヨーロッパでは、CE認証というものがあります。
そして、現在、相互承認協定(MRA)という、外国に行って認証試験を受けなくても、その国の認証試験が国内で受けられるという制度があります。電気通信機器に関しては、日欧間(平成14年1月発効)、日シンガポール間(平成14年11月発効)日米間(平成20年1月発効)で締結されています。これは、携帯電話などを海外へ輸出するメーカーにとっては、コスト面などで非常に助かる制度になっています。



[コラム] Bluetoothデバイスは免許不要ってよく聞くけど...どういうことか?

Bluetoothは2.4GHz帯だから、免許不要だということをよく聞く。しかし、技適はとらなくちゃいけないというのもよく聞く。免許と技適って違うものなの?などと頭が混乱してくる。電波のことをやっていて、"技適"を知らないというのはどうも恥ずかしいことなのか、誰もちゃんと教えてくれない。技適のことを知らないと、安心してBLEを使えない。ということで、今回は、"技適をちゃんと知る"ということと、それとBLEがどう関係するのか、ということに焦点を当ててみる。

技適とは、日本の総務省が定める「技術基準適合証明又は工事設計認証」の略称。

認証制度について、総務省「電波利用ホームページ」の概要は、次のようになっている:
無線通信の混信や妨害を防ぎ、また、有効希少な資源である電波の効率的な利用を確保するため、無線局の開設は原則として免許制としており、当該無線局で使用する無線設備が技術基準に適合していることを免許申請の手続きの際に検査を行うこととしております。
ただし、携帯電話等の小規模な無線局に使用するための無線局であって総務省令で定めるもの(特定無線設備)については、使用者の利便性の観点から、事前に電波法に基づく基準認証を受け、総務省令で定める表示(技適マーク)が付されている場合には、免許手続時の検査の省略等の無線局開設のための手続について特例措置が受けられます。(特例措置の概要は下図参照。)
ここでは、この特例措置の適用を受けるために必要な無線設備に関する基準認証制度の概要をご紹介します。なお、詳細は電気通信機器基準認証制度マニュアルをご参照ください。


ちなみに、技適マークとは、こんなマーク。
(左が平成7年4月から運用されているもの。右は昭和62年10月からの旧マーク。詳しくは、ここを参照。)




日本国内で電波を発する製品はすべてこの技適を取得していないといけない。技適マークが付いていない無線機器を使用すると、電波法違反になる。さらに、技適を取得していたとしても、一般の無線機器は総務大臣の免許が必要となる。ただし、上の概要にあるように、特定無線設備に関しては、技適を取得していれば、総務大臣の免許が不要になる。つまり、免許が不要というのはこの意味だったのである。ただし、無線機器としての性能などは保証されなければいけないので、認証を受ける必要があるということだ。ということは、Bluetoth機器は、この特定無線設備に含まれるということなのか?特定無線設備について、見てみる。

特定無線設備は大きく分けて、4つある。

  1. 免許不要局(20種別)
  2. 特定無線局(37種別)
  3. その他(100種別)
  4. 特別特定無線設備(24種別)

Bluetoothデバイスは、2.4GHz帯(2,402〜2,480MHz)を用いるので、免許不要局の
 2.4GHz帯高度化小電力データ通信システム(2,400~2,483.5MHz)
に属している。

というわけで、Bluetoothについては、技適は必要だが、総務大臣の免許は不要ということで一応納得できました。

参照URL:


余録

日本国内については、技適という認証が必要ですが、海外ではどうなっているのでしょうか。海外では、例えば、北米では、FCC認証、ヨーロッパでは、CE認証というものがあります。
そして、現在、相互承認協定(MRA)という、外国に行って認証試験を受けなくても、その国の認証試験が国内で受けられるという制度があります。電気通信機器に関しては、日欧間(平成14年1月発効)、日シンガポール間(平成14年11月発効)日米間(平成20年1月発効)で締結されています。これは、携帯電話などを海外へ輸出するメーカーにとっては、コスト面などで非常に助かる制度になっています。



2013年11月21日木曜日



本日、大阪IMPビルで開かれた、BluetoothSIG主催のBluetoothトレーニングイベントに参加してきました。

https://www.bluetooth.org/ja-jp/Pages/qualification-training-sessions.aspx

私自身BluetoothSIGのイベントに参加するのは初めてなのですが、BLEによる盛り上がりを受けてなのか、アジアでは東京、大阪、ソウル、上海と連続して本イベントが開かれ、BluetoothSIGが今回のイベントに非常に力を入れているのがわかりました。またこれ以降も、ブレイクスルー・アワード 2014(12/4受付締切、1/6結果発表)、1月にはCES、2月にはMWCとイベントが続きます。スポンサー企業を中心にこの流れを維持し、マーケットを開拓していこうというムードが伝わってきました。

ざっと、内容を記載します。

      前半      

BluetoothSIGからのあいさつ
  Marriot Winquist (Bluetooth SIG)

Bluetoothの基礎概観(Part1)
  Masamitsu Suzuki  (Texas Instruments)

  • Bluetoothの歴史
  • アーキテクチャの説明
  • プロファイルの説明
    • BR/EDR(クラシックBT)のプロファイル
    • BLEのプロファイル

Bluetoothの基礎概観(Part2)
  Masahiko Seki (MCPC/Sony)
  • GATT-Based Profile 概観

MCPC プレゼンテーション
 モバイルシステム検定試験の案内

 ※MCPC(モバイルコンピューティング推進コンソーシアム)は、
  モバイルコンピューティングの健全な発展のためと環境整備のために
  設立された組織で、研究機関、企業などにより運営されています。
  (http://www.mcpc-jp.org/

Texas Instruments プレゼンテーション
 自社商品「SensorTag」の紹介


      後半      

Interoperabiliy & Testing
  Sakai Itsuo (MCPC/TUV), Asami Yokoi(Frontline)

Qualification and Listing
  Takayuki Shimada (UL vs Ltd)

Frontline社アナライザの紹介

Ellisys社のアナライザ紹介

BluetoothSIGのマーケティングプログラムの紹介
 再びMarriotさん


以上。

前半のアーキテクチャやプロファイルは、一度アンドロイドのミドル層のBluetoothの開発に携わったこともあり、だいたい知っていましたので、「ああ、そうだったなあ」と忘れてた記憶が呼び起されて、いい復習になりました。HIDプロファイルは、単なる土管で、実装者はUSBのHIDファンクションを使わないといけないということをおっしゃっていて、以前からUSBのHIDと、BluetoothのHIDは似てるけど同じものなの?と思っていたのですが、そのなぞが解けました。

これから様々なGATTベースのプロファイルがBLEで導入されるらしいです。世の中に出回っていないものはまだBluetoothSIGのワーキンググリープ内で検討中らしいです。講演で紹介されていたそのようなプロファイルの中に、「Indoor Positionning」というプロファイルがありました。BLEを使った測位は、このブログの中でも取り組んでいますが、電波の精度に問題があります。しかし、BluetoothSIGの中で検討されているということはまだまだあきらめてはいけないという気になりますね。

後半になると、会場の雰囲気が変わりました。みなメモをとるぞ~という体勢になりました。私もそうなのですが、みなBluetoothの認証試験の仕組みややり方を知りたがっていたのでしょう。最初のSakaiさんの説明は、わかっている人には非常に詳しく、ノウハウが詰まった内容となっていたのでしょうが、私には使用している言葉(Componentとか、Subsystemとかいう言葉)が理解できず、ほとんど頭に入ってきませんでした。ただし、次の嶋田さんのレクチャーは、まずComponentやSubsystemという言葉の説明からされていたので、とてもわかりやすかったです。Sakaiさんと嶋田さんの順番が逆だったなら、Sakai さんの説明がよくわかっただろうなあ、と思いました。残念です。

トレーニングとは関係ありませんが、お昼に参加者全員分のお弁当が用意されていたのには驚きました。おかげでお昼代が浮きました。また、午前と午後に15分ほどの休憩時間が入ったのですが、コーヒーが用意されていました。単純に、BluetoothSIGっていいね!って思いました。ほんと。

今回は、BluetoothSIGの方たちの意気込みを感じることができ、たいへん貴重な体験となりました。iBeaconをとっかかりにこのブログを始めましたが、iBeaconという枠組みが非常に小さな枠組みであることを痛感しました。iBeaconは、Appleの作ったiOSのLocation機能の一部です。BLEの波はそれよりもずっと広大で、スマートフォン、ウェアラブル、家電などを巻き込んでいくものです。BLEの未来は明るいです。

追記

正直言って、iBeaconだけではネタが尽きかけていたので、今後はBLEに視野を広げブログ更新していきます。


[コラム] Bluetooth トレーニングイベントに参加してきました。



本日、大阪IMPビルで開かれた、BluetoothSIG主催のBluetoothトレーニングイベントに参加してきました。

https://www.bluetooth.org/ja-jp/Pages/qualification-training-sessions.aspx

私自身BluetoothSIGのイベントに参加するのは初めてなのですが、BLEによる盛り上がりを受けてなのか、アジアでは東京、大阪、ソウル、上海と連続して本イベントが開かれ、BluetoothSIGが今回のイベントに非常に力を入れているのがわかりました。またこれ以降も、ブレイクスルー・アワード 2014(12/4受付締切、1/6結果発表)、1月にはCES、2月にはMWCとイベントが続きます。スポンサー企業を中心にこの流れを維持し、マーケットを開拓していこうというムードが伝わってきました。

ざっと、内容を記載します。

      前半      

BluetoothSIGからのあいさつ
  Marriot Winquist (Bluetooth SIG)

Bluetoothの基礎概観(Part1)
  Masamitsu Suzuki  (Texas Instruments)

  • Bluetoothの歴史
  • アーキテクチャの説明
  • プロファイルの説明
    • BR/EDR(クラシックBT)のプロファイル
    • BLEのプロファイル

Bluetoothの基礎概観(Part2)
  Masahiko Seki (MCPC/Sony)
  • GATT-Based Profile 概観

MCPC プレゼンテーション
 モバイルシステム検定試験の案内

 ※MCPC(モバイルコンピューティング推進コンソーシアム)は、
  モバイルコンピューティングの健全な発展のためと環境整備のために
  設立された組織で、研究機関、企業などにより運営されています。
  (http://www.mcpc-jp.org/

Texas Instruments プレゼンテーション
 自社商品「SensorTag」の紹介


      後半      

Interoperabiliy & Testing
  Sakai Itsuo (MCPC/TUV), Asami Yokoi(Frontline)

Qualification and Listing
  Takayuki Shimada (UL vs Ltd)

Frontline社アナライザの紹介

Ellisys社のアナライザ紹介

BluetoothSIGのマーケティングプログラムの紹介
 再びMarriotさん


以上。

前半のアーキテクチャやプロファイルは、一度アンドロイドのミドル層のBluetoothの開発に携わったこともあり、だいたい知っていましたので、「ああ、そうだったなあ」と忘れてた記憶が呼び起されて、いい復習になりました。HIDプロファイルは、単なる土管で、実装者はUSBのHIDファンクションを使わないといけないということをおっしゃっていて、以前からUSBのHIDと、BluetoothのHIDは似てるけど同じものなの?と思っていたのですが、そのなぞが解けました。

これから様々なGATTベースのプロファイルがBLEで導入されるらしいです。世の中に出回っていないものはまだBluetoothSIGのワーキンググリープ内で検討中らしいです。講演で紹介されていたそのようなプロファイルの中に、「Indoor Positionning」というプロファイルがありました。BLEを使った測位は、このブログの中でも取り組んでいますが、電波の精度に問題があります。しかし、BluetoothSIGの中で検討されているということはまだまだあきらめてはいけないという気になりますね。

後半になると、会場の雰囲気が変わりました。みなメモをとるぞ~という体勢になりました。私もそうなのですが、みなBluetoothの認証試験の仕組みややり方を知りたがっていたのでしょう。最初のSakaiさんの説明は、わかっている人には非常に詳しく、ノウハウが詰まった内容となっていたのでしょうが、私には使用している言葉(Componentとか、Subsystemとかいう言葉)が理解できず、ほとんど頭に入ってきませんでした。ただし、次の嶋田さんのレクチャーは、まずComponentやSubsystemという言葉の説明からされていたので、とてもわかりやすかったです。Sakaiさんと嶋田さんの順番が逆だったなら、Sakai さんの説明がよくわかっただろうなあ、と思いました。残念です。

トレーニングとは関係ありませんが、お昼に参加者全員分のお弁当が用意されていたのには驚きました。おかげでお昼代が浮きました。また、午前と午後に15分ほどの休憩時間が入ったのですが、コーヒーが用意されていました。単純に、BluetoothSIGっていいね!って思いました。ほんと。

今回は、BluetoothSIGの方たちの意気込みを感じることができ、たいへん貴重な体験となりました。iBeaconをとっかかりにこのブログを始めましたが、iBeaconという枠組みが非常に小さな枠組みであることを痛感しました。iBeaconは、Appleの作ったiOSのLocation機能の一部です。BLEの波はそれよりもずっと広大で、スマートフォン、ウェアラブル、家電などを巻き込んでいくものです。BLEの未来は明るいです。

追記

正直言って、iBeaconだけではネタが尽きかけていたので、今後はBLEに視野を広げブログ更新していきます。


2013年11月18日月曜日

2013年11月8日金曜日

2013年11月4日月曜日

11月2日(土)に、スマベン(=スマートフォン勉強会)関西が開かれました。

http://sumaben.jp/?KansaiSpecial05BLE

今回は、メインスピーカーに上原昭宏氏を迎えて、Bluetooth Low Energyの勉強会をするということで私も参加してきました。

参加者はハードウェアの製造をされる方からソフト開発者、ウェブサービス開発者、マスコミ関係者まで幅広く、マッシュアップが非常に期待される顔ぶれでした。それほどBLE/iBeaconに対する各分野からの関心が高いということでしょう。

[コラム] スマベン関西に参加してきました。

11月2日(土)に、スマベン(=スマートフォン勉強会)関西が開かれました。

http://sumaben.jp/?KansaiSpecial05BLE

今回は、メインスピーカーに上原昭宏氏を迎えて、Bluetooth Low Energyの勉強会をするということで私も参加してきました。

参加者はハードウェアの製造をされる方からソフト開発者、ウェブサービス開発者、マスコミ関係者まで幅広く、マッシュアップが非常に期待される顔ぶれでした。それほどBLE/iBeaconに対する各分野からの関心が高いということでしょう。

2013年11月2日土曜日

2013年11月1日金曜日



f:id:bs-android:20131024185958j:image

Android 4.4 Kitkatが発表されました。本記事では速報として概要をお届け致します。

※前編に続いて、詳細機能の概要です。

[コラム] Android4.4 Kitkat 速報(コンシューマ向けハイライト・後編)



f:id:bs-android:20131024185958j:image

Android 4.4 Kitkatが発表されました。本記事では速報として概要をお届け致します。

※前編に続いて、詳細機能の概要です。

2013年10月16日水曜日

iBeaconで使えるビーコンがなんとか3つ揃いましたので、測位を試してみました。


使用したビーコン

  1. iPhone5c(Peripheralとして動作するiPhoneアプリ)
  2. BLE Mini (RedBearLab社)
  3. RaspberryPI(+ Bluz iBeacon)

屋内測位をやってみました

iBeaconで使えるビーコンがなんとか3つ揃いましたので、測位を試してみました。


使用したビーコン

  1. iPhone5c(Peripheralとして動作するiPhoneアプリ)
  2. BLE Mini (RedBearLab社)
  3. RaspberryPI(+ Bluz iBeacon)

Raspberr PIで動作するiBeaconプログラムがGitHubにあったので、動かしてみました。


USBのBluetoothドングルを使用する。

【手順】
・Raspberry PIにRaspbian(Raspberry用Debian)をインストールする。
・bluez、bluez-firmware、libbluetooth-devをインストールする。
# apt-get install bluez bluez-firmware libbluetooth-dev
・bluez-ibeaconのソースコードをチェックアウトする。
 (https://github.com/carsonmcdonald/bluez-ibeacon)

・bluez-ibeaconのbluez-beaconをビルドする。
・bluez-ibeaconのBeaconDemoをXcodeでビルドしてiPhoneにインストールする。




・BeaconDemoに表示されているUUID、Major、Minorでbluez-beaconを実行する。

# ./ibeacon 200 422106B972F04B7794FCA5D69D93F58B 1 1 -59
(第一引数はアドバタイジングパケットの送信インターバル(ms)、UUIDは、ハイフンを取り除いて記述しなくてはならない。)

・BeaconDemo上でステータスがOutdoor→Indoorに切り替わることを確認する。

       ->           


[Tips] RaspberryPIでiBeacon

Raspberr PIで動作するiBeaconプログラムがGitHubにあったので、動かしてみました。


USBのBluetoothドングルを使用する。

【手順】
・Raspberry PIにRaspbian(Raspberry用Debian)をインストールする。
・bluez、bluez-firmware、libbluetooth-devをインストールする。
# apt-get install bluez bluez-firmware libbluetooth-dev
・bluez-ibeaconのソースコードをチェックアウトする。
 (https://github.com/carsonmcdonald/bluez-ibeacon)

・bluez-ibeaconのbluez-beaconをビルドする。
・bluez-ibeaconのBeaconDemoをXcodeでビルドしてiPhoneにインストールする。




・BeaconDemoに表示されているUUID、Major、Minorでbluez-beaconを実行する。

# ./ibeacon 200 422106B972F04B7794FCA5D69D93F58B 1 1 -59
(第一引数はアドバタイジングパケットの送信インターバル(ms)、UUIDは、ハイフンを取り除いて記述しなくてはならない。)

・BeaconDemo上でステータスがOutdoor→Indoorに切り替わることを確認する。

       ->           


2013年10月11日金曜日


iBeacon は、iOSでBLEを利用できるようにしたもの、という認識でしたが、調べてみるといろいろと知っておかないといけないことがあるようです。

例えば、ビーコンを表現したCLBeaconというクラスがCoreLocationフレームワークにありますが、信号を受信できるビーコンは、Apple社のベンダー情報が設定されていないと行けないことがわかりました。どうもAppleとのNDA契約がないと勝手にiBeaconの製品を販売できないことになっているようです。

また、CoreLocationフレームワークは、GPSやネットワークを使った測位全般を扱うフレームワークですが、そこにBLEを使った領域観測の窓口があるのは、アプリ開発者にとって直にBluetoothのプロファイルを扱わなくてもよいというメリットがあります。

調べた内容は、「iBeacon開発」(ダウンロードはこちら)にまとめましたので、ご覧ください。

iBeaconの仕組を調べてみました


iBeacon は、iOSでBLEを利用できるようにしたもの、という認識でしたが、調べてみるといろいろと知っておかないといけないことがあるようです。

例えば、ビーコンを表現したCLBeaconというクラスがCoreLocationフレームワークにありますが、信号を受信できるビーコンは、Apple社のベンダー情報が設定されていないと行けないことがわかりました。どうもAppleとのNDA契約がないと勝手にiBeaconの製品を販売できないことになっているようです。

また、CoreLocationフレームワークは、GPSやネットワークを使った測位全般を扱うフレームワークですが、そこにBLEを使った領域観測の窓口があるのは、アプリ開発者にとって直にBluetoothのプロファイルを扱わなくてもよいというメリットがあります。

調べた内容は、「iBeacon開発」(ダウンロードはこちら)にまとめましたので、ご覧ください。

2013年10月10日木曜日

BLEでどういったことができるのか、現状で手に入るBLEモジュールとそのサンプルプログラムを動かしてみました。今回はRedBearLab社の2つを使用しました。



BLE Shield

Arduino用のシールドです。
2013/10/07現在でArduino Uno、Arduino Mega、Arduino Leonardoの3つに対応しています。
公式サイトで提供されているサンプルスケッチはFirmataプロトコルと呼ばれるArduinoを制御できる汎用プロトコルをBLE経由で使用できるものです。



公式サイトからダウンロードできるファイルは次の3つから構成され、それぞれ次のライセンスが記載されていました。
・BLEライブラリ(MITライセンス)
・BLE用Firmataライブラリ(LGPLライセンス)
・サンプルスケッチ(LGPLライセンス)
比較的扱いやすいライセンスが適用されています。

Arduinoに装着し、サンプルスケッチを書き込めば直ぐに使用できました。iPhone用のサンプルプログラムをAppStoreからダウンロードし、実行します。接続画面からArduinoに接続するとArduinoの操作画面が表示されます。操作画面からはArduinoの各ピンの電圧のON/OFFや値の読み取りが行えます。

サンプルスケッチではBLE経由のFirmataプロトコルの通信のみとなっていますが、内部実装を見たところ、通常のシリアル通信のようなやり取りもできるようになっていますので、自分でプロトコル設計をすれば独自のことも行えそうです。

BLE Mini

UARTインターフェースを持ったBLEモジュールです。
このBLEモジュールにはPINが6本あり、内2本がTX、RXのUARTインターフェースとなっており、標準的なシリアル通信が行うことができます。UARTインターフェースなのでArduinoに限らずRaspberry Pi、BeagleBone、Netduino、RENESAS、PICと幅広いボードで利用可能できそうです。




BLE Shield同様にFirmataプロトコル用のサンプルスケッチが提供されています。
※このサンプルスケッチはArduino Uno用になっており、Arduino Leonardoで動作させるには修正が必要でした。

BLE Miniはファームウェアの書き換えが可能で、後述のiBeaconのように単独での動作も可能になります。公式サイトによるとファームウェアの開発環境についてはまだベータ版ということですが、今後の広がりに期待が持てます。

iBeaconとBLE Mini

BLE MiniにはArduinoのような別のマイコンに接続せず、
単独でiBeaconとなるファームウェアが提供されています。
2013/10/07現在は正式な仕様が公開されておらず、
このファームウェアは試験評価用という位置づけですが、
こちらもiPhone用のサンプルプログラムが公開されており、
どのように動作するかを体験することができます。




非常に汎用的ですので応用すれば自分たちでBLEを用いたハードウェアを創ることもできます。BLEは省電力かつ手軽に使えるということからこれを使ったデバイスが増えていくことが期待されますので、これからもこういったモジュールを追って行きたいと思います。


なお、今回紹介したRedBearLab社のBLEモジュールは技術基準適合は受けておりません。電波暗室や電波障害を起こさない十分に広い敷地・建屋内で実験を行ってください。不用意に電波を発射すると、日本の法律に反する可能性がありますのでご注意ください。

[Tips] BLEモジュールを試してみました

BLEでどういったことができるのか、現状で手に入るBLEモジュールとそのサンプルプログラムを動かしてみました。今回はRedBearLab社の2つを使用しました。



BLE Shield

Arduino用のシールドです。
2013/10/07現在でArduino Uno、Arduino Mega、Arduino Leonardoの3つに対応しています。
公式サイトで提供されているサンプルスケッチはFirmataプロトコルと呼ばれるArduinoを制御できる汎用プロトコルをBLE経由で使用できるものです。



公式サイトからダウンロードできるファイルは次の3つから構成され、それぞれ次のライセンスが記載されていました。
・BLEライブラリ(MITライセンス)
・BLE用Firmataライブラリ(LGPLライセンス)
・サンプルスケッチ(LGPLライセンス)
比較的扱いやすいライセンスが適用されています。

Arduinoに装着し、サンプルスケッチを書き込めば直ぐに使用できました。iPhone用のサンプルプログラムをAppStoreからダウンロードし、実行します。接続画面からArduinoに接続するとArduinoの操作画面が表示されます。操作画面からはArduinoの各ピンの電圧のON/OFFや値の読み取りが行えます。

サンプルスケッチではBLE経由のFirmataプロトコルの通信のみとなっていますが、内部実装を見たところ、通常のシリアル通信のようなやり取りもできるようになっていますので、自分でプロトコル設計をすれば独自のことも行えそうです。

BLE Mini

UARTインターフェースを持ったBLEモジュールです。
このBLEモジュールにはPINが6本あり、内2本がTX、RXのUARTインターフェースとなっており、標準的なシリアル通信が行うことができます。UARTインターフェースなのでArduinoに限らずRaspberry Pi、BeagleBone、Netduino、RENESAS、PICと幅広いボードで利用可能できそうです。




BLE Shield同様にFirmataプロトコル用のサンプルスケッチが提供されています。
※このサンプルスケッチはArduino Uno用になっており、Arduino Leonardoで動作させるには修正が必要でした。

BLE Miniはファームウェアの書き換えが可能で、後述のiBeaconのように単独での動作も可能になります。公式サイトによるとファームウェアの開発環境についてはまだベータ版ということですが、今後の広がりに期待が持てます。

iBeaconとBLE Mini

BLE MiniにはArduinoのような別のマイコンに接続せず、
単独でiBeaconとなるファームウェアが提供されています。
2013/10/07現在は正式な仕様が公開されておらず、
このファームウェアは試験評価用という位置づけですが、
こちらもiPhone用のサンプルプログラムが公開されており、
どのように動作するかを体験することができます。




非常に汎用的ですので応用すれば自分たちでBLEを用いたハードウェアを創ることもできます。BLEは省電力かつ手軽に使えるということからこれを使ったデバイスが増えていくことが期待されますので、これからもこういったモジュールを追って行きたいと思います。


なお、今回紹介したRedBearLab社のBLEモジュールは技術基準適合は受けておりません。電波暗室や電波障害を起こさない十分に広い敷地・建屋内で実験を行ってください。不用意に電波を発射すると、日本の法律に反する可能性がありますのでご注意ください。

2013年10月4日金曜日


最近よく耳にするiBeaconとはなんでしょうか。Appleはまだ明言していないようですが、いろいろなサイトを読むと、Bluetooth 4.0 で導入されたBLE(=Bluetooth Low Energy)をiOSで使えるようにしたものの総称のようです。iOS7から実装されています。

今、流行のiBeaconとは?


最近よく耳にするiBeaconとはなんでしょうか。Appleはまだ明言していないようですが、いろいろなサイトを読むと、Bluetooth 4.0 で導入されたBLE(=Bluetooth Low Energy)をiOSで使えるようにしたものの総称のようです。iOS7から実装されています。

2013年9月20日金曜日






今回は各種デバイスにスポットを当てて計測していきます。
その前に前回の記事で、BrowserのhttpリクエストにおけるUser-Agentの問題で画面がスマートフォンサイズに最適化されていないと記載した件について調べてみると少し違っていましたので補足させて頂きます。

Keonの電力測定 - デバイス編






今回は各種デバイスにスポットを当てて計測していきます。
その前に前回の記事で、BrowserのhttpリクエストにおけるUser-Agentの問題で画面がスマートフォンサイズに最適化されていないと記載した件について調べてみると少し違っていましたので補足させて頂きます。

2013年8月30日金曜日




Keonの電力測定を行うにあたり、まずは待ち受け画面での測定やロック画面、各種デバイス(まずはWifi)のON/OFF時の測定と実機を触ってみて気になったTizenやAndroidとも比較しやすいBrowserアプリから行っていきます。
早速ですが待ち受けでの測定から行います。

Keonの電力測定




Keonの電力測定を行うにあたり、まずは待ち受け画面での測定やロック画面、各種デバイス(まずはWifi)のON/OFF時の測定と実機を触ってみて気になったTizenやAndroidとも比較しやすいBrowserアプリから行っていきます。
早速ですが待ち受けでの測定から行います。

2013年8月22日木曜日

Are you the kind of person who is always looking for latest versions and bleeding edge software for testing those new functions? If yes, you've come to the right place.

Here are step by step instructions in how to install FreeBSD 10 with latest clang, libobjc and GNUstep.

These instructions are for a laptop with Intel graphics and shell is the default csh.

You may have to alter some points to match your system.

FreeBSD

Download the latest release and install as normal.
Boot up and login as root. 

Download most recent ports

# portsnap fetch
# portsnap extract

Intel KMS

Add to /etc/make.conf for Intel KMS support
WITH_KMS=YES
WITH_NEW_XORG=YES

Portmaster

A convenient tool for installing ports.
# cd /usr/ports/ports-mgmt/portmaster
# make install

Nano

We don't wanna use vi....
# portmaster -G editors/nano

Subversion

# portmaster -G devel/subversion

Clang

Required for latest Obj-C features.
# portmaster -G lang/clang33

Sudo
# portmaster -G security/sudo

Edit settings so that we can use sudo 
# visudo
Uncomment the line “%wheel ALL=(ALL) NOPASSWD: ALL”


Add user to wheel group to allow sudo# pw usermod [youruser] -G wheel
 

Xorg

# portmaster x11/xorg (select drivers as needed)
# portmaster -G x11-wm/openbox (my choice of wm)
# portmaster -G x11-wm/xcompmgr (optional, needed for transparent windows)


# cd ~
# Xorg -configure
# cp xorg.conf.new /etc/X11/xorg.conf


Add to /etc/X11/xorg.conf
section ServerLayout to enable mouse and keyboard (without hald)
Option          "AutoAddDevices" "Off"


Add to /home/[youruser]/.xinitrc
exec xcompmgr &
exec openbox-session


Now X can be started with “startx” after login.



Autologin

If you want auto login and auto start X do this:
Add to /etc/gettytab
# WB: autologin console as user "brilliant"
A|Al|Autologin console:\
       :ht:np:sp#115200:al=
brilliant


Edit line in /etc/ttys
ttyv1   "/usr/libexec/getty Al"       xterm  on  secure


Add to ~/.cshrc
# WB: startx if it isn't already running
set XPID = `/usr/bin/pgrep X`
if ( { [ -n "$XPID" ] } ) then
 #echo "X is already running"
else
 startx
 logout
endif


GNUstep

Prerequisites

# portmaster -G security/gnutls
# portmaster -G devel/icu
# portmaster -G devel/libdispatch


Make clang33 our default compiler
Add to ~/.cshrc and then re-login
setenv CC clang33
setenv CXX clang++33
setenv CPP clang-cpp33


Get source from SVN



$ cd ~
$ mkdir Download
$ cd Download
$ svn co http://svn.gna.org/svn/gnustep/tools/make/trunk make
$ svn co http://svn.gna.org/svn/gnustep/libs/base/trunk base
$ svn co http://svn.gna.org/svn/gnustep/libs/back/trunk back
$ svn co http://svn.gna.org/svn/gnustep/libs/gui/trunk gui
$ svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2


Configure & Install



gnustep-make
You may choose other layout and prefix if you like
$ ./configure --with-layout=gnustep --prefix=/usr/GNUstep --enable-objc-nonfragile-abi
$ gmake
$ sudo -E gmake install
$ source /usr/GNUstep/System/Library/Makefiles/GNUstep.csh


Add to ~/.cshrc
source /usr/GNUstep/System/Library/Makefiles/GNUstep.csh



libobjc2
$ gmake (cmake seems broken, use normal Makefile with gmake)
$ sudo -E gmake install
- Reinstall gnustep-make according to above so that it is configured to used the new libobjc2


gnustep-base
$ ./configure --disable-unicodeconstants --enable-fake-main
$ gmake
$ sudo -E gmake install


gnustep-gui
$ ./configure
$ gmake
$ sudo -E gmake install


gnustep-back
$ ./configure --enable-graphics=cairo --with-name=cairo
$ gmake
$ sudo -E gmake install


Set default backend to cairo
$ defaults write NSGlobalDomain GSBackend cairo

Play Time


Now everything should be set up so you can start compiling and running GNUstep applications.
If you have any problems, please let me know in the comments below.


Good Luck :)


Bleeding edge

Are you the kind of person who is always looking for latest versions and bleeding edge software for testing those new functions? If yes, you've come to the right place.

Here are step by step instructions in how to install FreeBSD 10 with latest clang, libobjc and GNUstep.

These instructions are for a laptop with Intel graphics and shell is the default csh.

You may have to alter some points to match your system.

FreeBSD

Download the latest release and install as normal.
Boot up and login as root. 

Download most recent ports

# portsnap fetch
# portsnap extract

Intel KMS

Add to /etc/make.conf for Intel KMS support
WITH_KMS=YES
WITH_NEW_XORG=YES

Portmaster

A convenient tool for installing ports.
# cd /usr/ports/ports-mgmt/portmaster
# make install

Nano

We don't wanna use vi....
# portmaster -G editors/nano

Subversion

# portmaster -G devel/subversion

Clang

Required for latest Obj-C features.
# portmaster -G lang/clang33

Sudo
# portmaster -G security/sudo

Edit settings so that we can use sudo 
# visudo
Uncomment the line “%wheel ALL=(ALL) NOPASSWD: ALL”


Add user to wheel group to allow sudo# pw usermod [youruser] -G wheel
 

Xorg

# portmaster x11/xorg (select drivers as needed)
# portmaster -G x11-wm/openbox (my choice of wm)
# portmaster -G x11-wm/xcompmgr (optional, needed for transparent windows)


# cd ~
# Xorg -configure
# cp xorg.conf.new /etc/X11/xorg.conf


Add to /etc/X11/xorg.conf
section ServerLayout to enable mouse and keyboard (without hald)
Option          "AutoAddDevices" "Off"


Add to /home/[youruser]/.xinitrc
exec xcompmgr &
exec openbox-session


Now X can be started with “startx” after login.



Autologin

If you want auto login and auto start X do this:
Add to /etc/gettytab
# WB: autologin console as user "brilliant"
A|Al|Autologin console:\
       :ht:np:sp#115200:al=
brilliant


Edit line in /etc/ttys
ttyv1   "/usr/libexec/getty Al"       xterm  on  secure


Add to ~/.cshrc
# WB: startx if it isn't already running
set XPID = `/usr/bin/pgrep X`
if ( { [ -n "$XPID" ] } ) then
 #echo "X is already running"
else
 startx
 logout
endif


GNUstep

Prerequisites

# portmaster -G security/gnutls
# portmaster -G devel/icu
# portmaster -G devel/libdispatch


Make clang33 our default compiler
Add to ~/.cshrc and then re-login
setenv CC clang33
setenv CXX clang++33
setenv CPP clang-cpp33


Get source from SVN



$ cd ~
$ mkdir Download
$ cd Download
$ svn co http://svn.gna.org/svn/gnustep/tools/make/trunk make
$ svn co http://svn.gna.org/svn/gnustep/libs/base/trunk base
$ svn co http://svn.gna.org/svn/gnustep/libs/back/trunk back
$ svn co http://svn.gna.org/svn/gnustep/libs/gui/trunk gui
$ svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/trunk libobjc2


Configure & Install



gnustep-make
You may choose other layout and prefix if you like
$ ./configure --with-layout=gnustep --prefix=/usr/GNUstep --enable-objc-nonfragile-abi
$ gmake
$ sudo -E gmake install
$ source /usr/GNUstep/System/Library/Makefiles/GNUstep.csh


Add to ~/.cshrc
source /usr/GNUstep/System/Library/Makefiles/GNUstep.csh



libobjc2
$ gmake (cmake seems broken, use normal Makefile with gmake)
$ sudo -E gmake install
- Reinstall gnustep-make according to above so that it is configured to used the new libobjc2


gnustep-base
$ ./configure --disable-unicodeconstants --enable-fake-main
$ gmake
$ sudo -E gmake install


gnustep-gui
$ ./configure
$ gmake
$ sudo -E gmake install


gnustep-back
$ ./configure --enable-graphics=cairo --with-name=cairo
$ gmake
$ sudo -E gmake install


Set default backend to cairo
$ defaults write NSGlobalDomain GSBackend cairo

Play Time


Now everything should be set up so you can start compiling and running GNUstep applications.
If you have any problems, please let me know in the comments below.


Good Luck :)


2013年8月9日金曜日


はじめに

アプリ配布を始めた途端に「あなたのアプリ入れたらバッテリの持ちが悪くなった」なんて話をよく耳にします。そんなことにならないよう配布アプリにあっても開発段階から省電力を心がける時代になってきたのではないでしょうか。
スマートフォンの電力測定というと高価な測定器が必要なイメージがありますが、用途を絞れば安価に入手が可能になります。今回は番外編としてソフトウェア開発者向けに安価で電力測定が行えるツールの自作方法について紹介いたします。

〔番外編〕 電力測定ツールも自作してみよう


はじめに

アプリ配布を始めた途端に「あなたのアプリ入れたらバッテリの持ちが悪くなった」なんて話をよく耳にします。そんなことにならないよう配布アプリにあっても開発段階から省電力を心がける時代になってきたのではないでしょうか。
スマートフォンの電力測定というと高価な測定器が必要なイメージがありますが、用途を絞れば安価に入手が可能になります。今回は番外編としてソフトウェア開発者向けに安価で電力測定が行えるツールの自作方法について紹介いたします。

2013年8月2日金曜日

※以前の記事を纏めました。




Firefox OS端末での電力測定を行うにあたり計測機器として使用できるダミーバッテリの作成を行いました。
今回はその作成方法について紹介致します。

Keon端末向けダミーバッテリの作りかた

※以前の記事を纏めました。




Firefox OS端末での電力測定を行うにあたり計測機器として使用できるダミーバッテリの作成を行いました。
今回はその作成方法について紹介致します。

2013年7月26日金曜日


スマートデバイスの消費電力を測るためには内蔵バッテリの代わりとなるダミーバッテリ作りが必須となります。今回は広く流通しているSamsungスマートフォン向けダミーバッテリの作成法を紹介いたします。SamsungのバッテリにはNFC等の付加機能が付いており、ダミーバッテリでもこれらの機能を残しておきたかったことから今回は純正バッテリの回路を流用する方法を使いました。

Samsung端末向けダミーバッテリの作りかた


スマートデバイスの消費電力を測るためには内蔵バッテリの代わりとなるダミーバッテリ作りが必須となります。今回は広く流通しているSamsungスマートフォン向けダミーバッテリの作成法を紹介いたします。SamsungのバッテリにはNFC等の付加機能が付いており、ダミーバッテリでもこれらの機能を残しておきたかったことから今回は純正バッテリの回路を流用する方法を使いました。

2013年7月18日木曜日

Firefox OSのダミーバッテリー作成を行います。

ここでは開発者用端末のKeonを使用し、作成していきます。




端末によっては、安定化電源を接続しただけでは起動しないものがありますので、Keonはどうなのか確認します。




問題なく、起動できました。
もし、起動しないのであればバッテリーを分解し、制御チップを移植する作業が発生するのですが、今回は不要です。

Keonのダミーバッテリーの作成(その1)

Firefox OSのダミーバッテリー作成を行います。

ここでは開発者用端末のKeonを使用し、作成していきます。




端末によっては、安定化電源を接続しただけでは起動しないものがありますので、Keonはどうなのか確認します。




問題なく、起動できました。
もし、起動しないのであればバッテリーを分解し、制御チップを移植する作業が発生するのですが、今回は不要です。

Related Posts Plugin for WordPress, Blogger...