Bluetooth Low Energyを試したい

6,492 views
Skip to first unread message

Shigeo Mutoh

unread,
Jun 20, 2012, 5:01:20 AM6/20/12
to android-g...@googlegroups.com
tmhouseです。

現在、NEC MEDIAS N-01Dと、ぶるタグ
http://www.pro.logitec.co.jp/pro/g/gLBT-MPVRU01BK/
が手元にあります。

何がやりたいかというと、N-01Dからぶるタグを呼び出し、振動させるアプリを
作りたいのです。

まず、機器の構成として、若干問題があることは分かっています。
両者はBluetooth4.0 Low Energyに対応していますが、ぶるタグはiOSでしか
サポートされていません。

ですが実際試してみると、N-01Dとぶるタグはペアリンクに成功し、ぶるタグからN-01Dの
呼び出し(Find me)や、端末のアラームと連動して呼び出すことに成功します。

ですから、接続には技術的に問題がないと仮定して話を進めます。

N-01DはCSR社のBT stackを用いています。logcatを見ていると分かります。
ですからあとは、CSR社のSDKか何かを用いて、ぶるタグを呼び出すアプリを
作成したいわけですが、どうやったらそれが可能か分かっていません。
少なくとも、おそらく端末の/system/以下におそらく存在しているであろう、
何かしらライブラリへアクセスするためのstubのようなものが必要だと考えて
いますが、どこにも見当たりません。

CSR社からSDKを買うのでしょうか?
それ以外に道はないのでしょうか?

一方で、現在Motorola社のRAZRならばAPIなども公開されていますから、NECには
未練などないのでそちらで試してみようとも思っています。
RAZRでBLE成功してるよなどの情報もありましたら、是非お教えくださいませ。

よろしくお願いします。

Masakazu Nakano

unread,
Jun 20, 2012, 11:02:13 AM6/20/12
to android-g...@googlegroups.com
なかの

単純にSPPでインテリジェントに操れる

わけではないの??

なかの
--
なかの
http://andnow.co はじめました

Shigeo Mutoh

unread,
Jun 20, 2012, 12:35:09 PM6/20/12
to android-g...@googlegroups.com
tmhouseです。

(2012/06/21 0:02), Masakazu Nakano wrote:
> 単純にSPPでインテリジェントに操れる
>
> わけではないの??

Serial Port接続する際の、UUIDが分からなくて挫折しています。
仮にUUIDが分かったとしても、通信内容にはいったい何を送れば
いいのか、まったく情報を得ることができませんでした。

Tam

unread,
Jun 20, 2012, 1:52:46 PM6/20/12
to android-g...@googlegroups.com
Tamと申します。 Bluetooth と聞いて。

2012年6月21日 1:35 Shigeo Mutoh <tmh...@gmail.com>:
> (2012/06/21 0:02), Masakazu Nakano wrote:
> Serial Port接続する際の、UUIDが分からなくて挫折しています。

UUID は 検索すれば、結構簡単に分かります。
また、 Bluez の sdptool では機種固有の UUID も
一覧として出てきます。

> 仮にUUIDが分かったとしても、通信内容にはいったい何を送れば
> いいのか、まったく情報を得ることができませんでした。

間に中継機を挟んで、プロトコルを覗けば解析できます。
中継機は Android で作ってしまえばお手軽です。

以上よろしくお願いします。

--
------------------------------------------------------------------------
Tam

Shigeo Mutoh

unread,
Jun 21, 2012, 4:09:51 AM6/21/12
to android-g...@googlegroups.com
tmhouseです。

貴重な情報ありがとうございます。
Bluezをダウンロードしてみます。

Motorola XT910(RAZR)を国際的に指名手配して、確保の見込みです。
こんな素晴らしいサイトがあります。
http://developer.motorola.com/
このサイトを見ていると、モトローラいいぞもっとやれという気が
していて、少しファンになりそうです。

Shigeo Mutoh

unread,
Jun 21, 2012, 9:25:45 AM6/21/12
to android-g...@googlegroups.com
tmhouseです。

(12/6/21 19:43), tono3633 wrote:
> Bluetooth4.0 Low Energy デバイス側が SPP モード通信をサポートしてません。
> アプリ側で SPP(RFCOMM)を含めて実装しても通信相手が存在していない。
>
> 対応するサービスは以下を参照すると良いかも?
> https://developer.bluetooth.org/gatt/profiles/Pages/ProfilesHome.aspx

はい。既にありとあらゆる資料を見ています。が、手が動かなくて四苦八苦
してます。

> TIが自社のデバイス通信用に Android(RAZR向け) デモアプリを公開しています。
> http://processors.wiki.ti.com/index.php/Category:MotoRAZRAndroidBLEDemo

これは参考になりそうです。ありがとうございます。
CC2541DK-SENSORキットがおいくらなのか分かりませんが、手に入れば
面白いものが作れそうですね。BLEの超低消費電力という特徴を活かして、
福祉介護向けなどに「何か作れそう」な予感はします。

Ardinoより気軽に遊べる可能性もなきにしもあらず。

> 私ではありませんが、友人がTIが提供している iPhone4S 向けのデモアプリで
> ぶるタブと通信してアプリの勉強をしています。
> http://processors.wiki.ti.com/index.php/Category:IPhone4SBLEDemo
> こちらは、アップルにデベロッパー登録しないと実行出来ないとのこと。

iOSを勉強した方が早い気はするのですが、いろんなことが徐々に
分かってきたので、もうちょっと頑張ってみます。

また何か情報がありましたらお伝えください。
ありがとうございました。

Shigeo Mutoh

unread,
Jun 21, 2012, 10:38:49 AM6/21/12
to android-g...@googlegroups.com
tmhouseです。

お教えいただいたBluezですが、最終的にこれを真面目に勉強
しなければならない気がしてきています。

UUIDが分からないという自分の問題に対する答えですが、
以下のサイトでは相手方デバイスに直接聞く、ということを行っていました。
http://digitalhacksblog.blogspot.jp/2012/05/android-example-bluetooth-discover-and.html

そのコードは4.0系でしか動かないため、手元にあるGalxy Nexusで
試したところ、動作しました。

このコードは、端折って言うと、onCreateにてデバイスが見つかったとか
UUIDが見つかったとかをregisterReceiverしておいてから、startDiscovery
で端末に探索させ、終わったらごっそりUUIDをリストするというものです。

これを修正して2.3系でも動くようにしました。
※android.bluetooth.BluetoothDevice.fetchUuidsWithSdp()
 が2.3系ではなぜか晒されてないのでrefrectionで起動。

MEDIAS N-01Dでは相手先をリストしてくれないので動作しませんでした。
Xperia X10 2.3.3(ドコモ版を本家ROMで書き換え)ではちゃんと動作しました。

なので、まともな端末さえあれば、UUIDは直接知れるということで
ご報告を終わります。

tono3633

unread,
Jun 21, 2012, 9:08:10 PM6/21/12
to android-g...@googlegroups.com
トノですが、補足情報です。
 
> 2012年6月21日木曜日 22時25分45秒 UTC+9 TM:

> > TIが自社のデバイス通信用に Android(RAZR向け) デモアプリを公開しています。
> > http://processors.wiki.ti.com/index.php/Category:MotoRAZRAndroidBLEDemo
>
> これは参考になりそうです。ありがとうございます。
> CC2541DK-SENSORキットがおいくらなのか分かりませんが、手に入れば
> 面白いものが作れそうですね。BLEの超低消費電力という特徴を活かして、
> 福祉介護向けなどに「何か作れそう」な予感はします。 
 
今月初めの「ワイアレスジャパン2012」でTI担当者が9月頃に販売を開始?っていってた。
展示会で基板を参考出品してました。
 
CC2540 Mini 開発キットは$99.00で販売されてます。
ファームウェア開発リソースは無償でダウンロード可能でした。
http://www.tij.co.jp/tool/jp/ble-stack
iPhone用デモアプリはこれをターゲットにしてます。
 
Bluetooth4.0は新しい規格なので、今後の報告を楽しみにしています。
頑張って下さい。

Shigeo Mutoh

unread,
Jun 21, 2012, 11:19:34 PM6/21/12
to android-g...@googlegroups.com
tmhouseです。

TIのMotoRAZRAndroidBLEDemoですが、面白かったので簡単にご紹介してみます。

・準備
 SDK Managerで2.3.3の中に、'DroidRAZR'があるはずなのでチェックして
 落としておく。

・Eclipseで取り込む
 いつも通り、このDemoをプロジェクトとして取り込む。
 .jarが発見できずコンパイルエラーになるので、Java Build Pathの
 Libraries内にある、MOT_??.jarの項目をEdit...して、
 
YOUR_ANDROID_SDK_PATH/add-ons/addon-droidrazr-motorola_mobility_inc-10/libs/MOT_BTLE_Stubs.jar
 に書き換え。
 コンパイルはこれで通る。

・動作
 RAZRもCC2541もまだ持ってないのでパス。

・中身
 夢のようにお気軽になっている。
 加速度、地磁気、気圧などいろいろとセンサとの通信を実装している。
 実装コードはそう多くはなく、通信は見事に簡略化されている。
 通信に関わる基本的な背景は、GATTと呼ばれる規格に準じている。
 GATTに関する実装は、MOT_BTLE_Stubs.jarの先となっている。
  com.motorola.bluetoothle.BluetoothGattがそれ。
 つまり、開発環境はMOT_BTLE_Stubs.jarを見ていて、実行時は
 端末に存在する.jarを見る。なので、モトローラ以外の端末には
 きっとinstallできない。

・まとめ
 GATTについてはBLEを調査していると、あちこちで登場するのだが
 イマイチよく分かっていませんでした。今回の収穫は、GATTの実装が
 どこにあるか、ようやく理解したということ。
 その中身を見れないのはちょっと残念だけど、まあ見なくて済んだ
 という話もある。。


以上です。どなたかの参考になれば。

Shigeo Mutoh

unread,
Jun 22, 2012, 3:58:56 AM6/22/12
to android-g...@googlegroups.com
tmhouseです。

補足があります。

(12/6/22 12:19), Shigeo Mutoh wrote:
> ・準備
>  SDK Managerで2.3.3の中に、'DroidRAZR'があるはずなのでチェックして
>  落としておく。

このとき、IDとPasswdを求められるので、あらかじめ
http://developer.motorola.com/
にて登録をしておき、そのIDとPasswdを使用すればダウンロード
できます。

あと、emulatorにDroidRAZRが現れるのですが、これを使ってBT関連
の開発は行えません。実機が必要です。

以上です。

tono3633

unread,
Jun 23, 2012, 12:46:04 AM6/23/12
to android-g...@googlegroups.com
トノです。
 
もう既に試しているかも知れませんが、NEC MEDIAS N-01Dとぶるタグを接続して
Remoppiと同等な動作はさせられるようです。
 
1.無線とネットワーク→Bluetooth設定→デバイスのスキャンを実行して
→検索結果のLBT-VRU01を接続させる
2.接続したら完了です。
 
※ぶるタブのボタンを押下すれば、Remoppi同様にMEDIASが鳴ります。
アプリが無いのでMEDIAS側から動作させることは出来ませんが・・・
 
搭載しているプロファイル機能が反応しているだけなので、後はリンク切れする
とアラームが発生するだけですが・・・
 
サポートしているUUID情報を友人から教えてもらいました。
*** Remoppi ***
service with UUID : <1800> [Generic Access(GAP)]
characteristic <2a00> : Read            [Device Name]
characteristic <2a01> : Read            [Appearance]
service with UUID : <1803> [Link Loss]
characteristic <2a06> : Read,Write      [Alert Level]
*** LBT-VRU01 ***
service with UUID : <1800> [Generic Access(GAP)]
characteristic <2a00> : Read            [Device Name]
characteristic <2a01> : Read            [Appearance]
characteristic <2a04> : Read            [Peripheral Preferred Connection Parameters]
service with UUID : <1802> [Immediate Alert]
characteristic <2a06> : WriteWithoutResponse
service with UUID : <1803> [Link Loss]
characteristic <2a06> : Read,Write      [Alert Level]
service with UUID : <1804> [Tx Power]
characteristic <2a07> : Read            [Transmit Power Level]
service with UUID : <180f> [Battery Service]
characteristic <2a19> : Read            [Battery Level]
characteristic <2a1a> : Read            [Battery Power State]
characteristic <2a1b> : Read,Notify     [Battery Level State]
characteristic <2a3a> : Read            [Removable]
 
BluetoothLE関連開発支援用のTI情報も参考になるかも知れません。
http://processors.wiki.ti.com/index.php/Category:BluetoothLE
 
私は CC2540 Mini 開発キットで勉強中なので、参考情報程度しか提供出来ません。
 
楽しいアプリを期待しています。
 

Shigeo Mutoh

unread,
Jun 28, 2012, 5:13:18 AM6/28/12
to android-g...@googlegroups.com
tmhouseです。

白旗です。
Motorola XT910 RAZRを入手していろいろ試しましたが、諦めました。

Immediate Alertの場合を端折って説明すると、connectGattしてから、
primaryUUID = "00001802-0000-1000-8000-00805f9b34fb"
mGattService.readGattCharacteristics(device, primaryUUID);
した結果、BroadcastReceiverで
action = BluetoothGatt.ACTION_GATT_CHARACTERISTICS_GET
が来るので、受けたintentに対して、
intent.getStringArrayExtra(BluetoothGatt.EXTRA_CHARCATERISTICS_HANDLE);

intent.getStringArrayExtra(BluetoothGatt.EXTRA_CHARCATERISTICS_UUIDS);
を取得できました。その結果をlogcatに出すと、

21 06-28 13:45:36.404: D/SimpleTest(3395): char handle[0] = 000d
22 06-28 13:45:40.271: D/SimpleTest(3395): uuid [0] =
00002a06-0000-1000-8000-00805f9b34fb

と出たので、primary uuid=1802に対する問い合わせとして正しく
動いたように見えます。(2a06はトノさんからの情報と合致)

ところが、この後writeGattCharacteristicValue()しても反応しません。
一応、MEDIASのlogcatに、ぶるタグへ送っているデータのダンプが見れたので
それを送ってみたのですが。。。

これです。
byte data_1[] = {
(byte)0x00, (byte)0x01, (byte)0xE3, (byte)0x82,
(byte)0xA2, (byte)0xE3, (byte)0x83, (byte)0xA9,
(byte)0xE3, (byte)0x83, (byte)0xBC, (byte)0xE3,
(byte)0x83, (byte)0xBC, (byte)0xE3, (byte)0x83,
(byte)0xA0};

結局、このデータの仕様は何なのだという大いなる疑問は解けず、だったら
そもそも頑張っても無駄ではないか?と思うともうくたびれたので、
私は退散します。

いろいろとありがとうございました。

tono3633

unread,
Jun 29, 2012, 4:42:44 AM6/29/12
to android-g...@googlegroups.com
トノです。
 
ギブアップしちゃったんですか?楽しみしていたのでとっても残念です。
 
この情報を友人にしたときに、LBT-VRU01側にImmediate Alertの情報を
送るときのデータは1バイト目に動作指示を入れるとのことでした。
 
一応データは以下になるとのこと。
0:停止
2:LBT-VRU01側のアラームを鳴らす
注:2以外のデータを送っても停止するそうです。
 
2バイト以上のデータを送っても大丈夫だったと言ってましたが、先頭には
必ず上記のデータを格納する必要があるようです。
ダンプデータを見る限り停止コマンドを送っていると思われますが・・・
 
友人はwriteGattCharacteristicValue() の引数が分からないからデータが
正しく送られているか判断できないと言ってました。
 
サービスUUID(1802)に対してデータ(02)を送ればアラームが鳴るはずと
言ってました。
 
もし、この情報を見る機会がありましたら再チャレンジしてみて下さい。
私はLBT-VRU01みたいな端末の開発系なのでアプリが分かっていません。
何かありましたら、友人に再度確認してみますので・・・
 

Shigeo Mutoh

unread,
Jun 29, 2012, 9:27:50 AM6/29/12
to android-g...@googlegroups.com
tmhouseです。

ありがとうございます! 鳴りました!
鳴ると思ってなかったので、何事かとびっくりしました。

一部分だけコード見せてもどうしようもないのですが、肝心な
部分はこんなコードです。

byte data_1[] = {(byte)0x02, 0x00};//terminateすること

uuid = m_uuid;
Log.i(c_tag, "uuid=" + uuid);
Log.i(c_tag, "handle=" + handle);
mGattService.writeGattCharacteristicValue(
m_device, uuid, handle, data_1, data_1.length);


logcat

06-29 22:16:16.171: I/SimpleTest(11929):
uuid=00001802-0000-1000-8000-00805f9b34fb
06-29 22:16:16.171: I/SimpleTest(11929): handle=000d

最初data_1には0x02だけ入れてて、だめだなーと思ってたのですが、
ためしにnull terminateしたら鳴りました!

しかし、「どうやって'0x02'の割り当てを知ることができたのか」
が大変興味があります。
そこだけお友達にお聞き願えませんか?

よろしくお願いします。

tono3633

unread,
Jun 29, 2012, 9:08:06 PM6/29/12
to android-g...@googlegroups.com
 トノです。
Androidでもアラートを通知出来たんですね!!
本当に良かったです。
 

しかし、「どうやって'0x02'の割り当てを知ることができたのか」
が大変興味があります。
そこだけお友達にお聞き願えませんか?

これは以下のURLから辿って行くと見つけられるはずです。

https://developer.bluetooth.org/gatt/profiles/Pages/ProfilesHome.aspx
→Proximityを選択
→org.bluetooth.service.immediate_alertを選択
→org.bluetooth.characteristic.alert_levelを選択で上記URLにたどり着きます。
 
こんな情報で良いですか?
 
反応はすごく遅いかも知れませんが、私にサポート可能な範囲でしたら何時でも
声を掛けて下さい。

Shigeo Mutoh

unread,
Jun 30, 2012, 12:50:57 PM6/30/12
to android-g...@googlegroups.com
tmhouseです。

重ね重ねありがとうございます。
GATTの資料は漁ったつもりでしたが、そこまでたどり着けて
いませんでした。
#あそこにある資料はいったい何の役に立つのかさえ理解できて
#ませんでした。

これは相当な物量になりますね。
とりあえず一回鳴ったので、あとは何とかなるかと思うのですが、
全体的に抽象的な設計になっているようなので、振動の長さなどの
細かい制御はできないのでしょうね。

ありがとうございました。

tono3633

unread,
Jul 1, 2012, 9:23:48 PM7/1/12
to android-g...@googlegroups.com
 トノです。
 
tmhouseさんに質問があります。
ギブアップされた時の内容に以下があったのですが、アラートを鳴らした機種は
なんだったのでしょうか?
 
> 一応、MEDIASのlogcatに、ぶるタグへ送っているデータのダンプが見れたので
> それを送ってみたのですが。。。
 
MEDIASのBluetooth Low EnergyむけAPIは公開されていなかったような・・・?
MEDIASでも動かせるなら情報を教えて下さい。
補足:
ブザーを鳴らしている時間等は端末側の内部パラメータで管理していると思います。
ロジテックさんが、パラメータを変更する仕組みを実装していればアプリから制御
することも可能だと思いますが・・・I/F情報は公開されないかな?

また、端末側がサポートしているサービスが解っているため、GATTについても必要
な部分を詳細に調査すればアプリが作れるのではないでしょうか・・・

Bluetoothに関する情報は公開されていますが、なかなか自分が必要とする情報を
見つけられないことが多い(時間が掛かってしまうってことですが・・・)。
私は英文が苦手なので四苦八苦しながら探しています。
 
頑張ってください。

Shigeo Mutoh

unread,
Jul 2, 2012, 3:38:45 AM7/2/12
to android-g...@googlegroups.com
tmhouseです。

※注意:あくまでLogitecはぶるタグのAndroid対応をうたってはおり
 ませんので、動作については自己責任でお願いします。

(12/7/2 10:23), tono3633 wrote:
> トノです。
>
> tmhouseさんに質問があります。
> ギブアップされた時の内容に以下があったのですが、アラートを鳴らした機種は
> なんだったのでしょうか?
>
>> 一応、MEDIASのlogcatに、ぶるタグへ送っているデータのダンプが見れたので
>> それを送ってみたのですが。。。

MEDIAS N-01Dです。

> MEDIASのBluetooth Low EnergyむけAPIは公開されていなかったような・・・?
> MEDIASでも動かせるなら情報を教えて下さい。

N-01Dはぶるタグとペアリングできます。
N-01Dの目覚まし時計を仕掛けて、設定時間になったとき、ぶるタグの
振動あるいはアラームを鳴らすことができます。
また、ぶるタグ側の唯一のボタンを押すと、N-01D側を呼び起こして
振動あるいはアラームを鳴らすことができます。

全ての機能を試したわけではありませんが、双方向の通信は基本的に動作
しています。

ぶるタグが公式にはiPhoneしかサポートしていないので、このことは
結構偉大です。

N-01Dとぶるタグを連係動作させるために必要な実装は、実はN-01D
の設定、無線とネットワーク、Bluetooth設定、詳細設定の画面で
行うことができます。つまり、OSレベルで組み込み済みです。
詳細設定画面には以下のメニューがあります。
・Alert Notification
・Find Me
・Proximity
・Time

これらは本来、カシオのG-shock 3210 用の設定画面のはずですが、
ぶるタグでも使えるというわけです。
というわけなので、特に技術情報がなくても、ぶるタグを使用する
だけなら、できます。

N-01Dが送信したと思われるバイト列の入手は、logcatから適当に得たもので、
なんら確証があるデータではないです。苦し紛れでした。

おっしゃるとおり、NECカシオは自社端末のBluetooth4.0に関する技術情報を、
なんら開発者向けに発信していないと、私も認識しています。
技術情報があれば助かりますが、私はその会社と製品を無視します。

logcatを見る限り、CSR社のBTスタックを使用していると見て取れるので、
最初はそれを利用しようと考えましたが、かないませんでした。

私としては今は実験レベルで調査していましたので、特に動作端末
を多くしたいなどの要望を持っていません。なのでMEDIAS情報としては
こんな程度です。


> 補足:
> ブザーを鳴らしている時間等は端末側の内部パラメータで管理していると思います。
> ロジテックさんが、パラメータを変更する仕組みを実装していればアプリから制御
> することも可能だと思いますが・・・I/F情報は公開されないかな?

そうなんです。Android端末はいくらでも身代わりがあるのですが、BT機器は
それしかないので、BT機器側が技術情報を公開してくれることの方が重要
だと思います。

> Bluetoothに関する情報は公開されていますが、なかなか自分が必要とする情報を
> 見つけられないことが多い(時間が掛かってしまうってことですが・・・)。
> 私は英文が苦手なので四苦八苦しながら探しています。

まったく同感です。
BTは今回はじめてなのですが、皆さんどうやって開発しているのだろうと
思いました。

ICS以降のBT4.0 BLE対応もよく分からないので、今後ともご指導よろしく
お願いいたします。まずはgoogleレベルで対応してもらわないと、もう
どうにもならないですね。。

以上です。


Reply all
Reply to author
Forward
0 new messages