bluezで遊んでみる - ble大阪勉強会

28
BlueZ で遊んでみる @kobashinG

Upload: shinji-kobayashi

Post on 28-Nov-2014

3.411 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: BlueZで遊んでみる - BLE大阪勉強会

BlueZ で遊んでみる

@kobashinG

Page 2: BlueZで遊んでみる - BLE大阪勉強会

今日のお題

BlueZとは?

コマンドラインでCentral

Advertiseを投げてみる

Page 3: BlueZで遊んでみる - BLE大阪勉強会

BlueZとは?OSSのBluetoothスタック

Linux/Android等で利用されているBluetoothを制御する為のもの

kernel-module/utilities/daemonから成る

Page 4: BlueZで遊んでみる - BLE大阪勉強会

BlueZとは?大雑把に図にすると、、

Kernel Driver

Utilities bluetoothd

GUI Applicationd-busd/D-bus経由

HCIソケット経由

BlueZ(厳密にはDriverも)

Page 5: BlueZで遊んでみる - BLE大阪勉強会

この辺を使ってBLEを紐解いてみる。

BlueZとは?hciconfig - ifconfigに近い。 デバイスを設定する為のコマンド。

hcitool - connectionを制御する為のコマンド。 scan/cmd/leccなど。

gatttool - tいっぱい。 GATTをコントロールする為のコマンド

Utilities 概要

Page 6: BlueZで遊んでみる - BLE大阪勉強会

用意したものUbuntu環境

BeagleBoneBlack + ubuntu13.04 BLE対応のUSBドングル

Peripheral対応端末

StickNFind / ぶるタグ

iPhone / Android(検証用)

BLExplr / 自作アプリ。

Page 7: BlueZで遊んでみる - BLE大阪勉強会

BlueZをビルドUbuntu標準のBlueZはBLE非対応。

最新のBlueZをインストール$ wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.16.tar.gz $ tar zxvf bluez-5.16.tar.gz $ sudo apt-get install libglib2.0-dev libdbus-1-dev libudev-dev libical-dev libreadline-dev $ cd bluez-5.16 $ ./configure —disable-systemd # make && make install

Page 8: BlueZで遊んでみる - BLE大阪勉強会

近くのデバイスを 検索してみる

$ hciconfig -a hci0: Type: BR/EDR Bus: USB BD Address: 00:1B:DC:06:2C:AD ACL MTU: 310:10 SCO MTU: 64:8 UP RUNNING PSCAN … 省略

$ sudo hcitool lescan LE Scan ... 44:13:19:02:E1:D9 LBT-VRU01 … 省略

◀ DOWNだったら hciconfig up する

◀ なんか見えた!!

Page 9: BlueZで遊んでみる - BLE大阪勉強会

接続してみる$ sudo hcitool lecc 44:13:19:02:E1:D9 Connection handle 71 $ sudo gatttool -i hci0 -b 44:13:19:02:E1:D9 -t random -I [44:13:19:02:E1:D9][LE]> connect Attempting to connect to 44:13:19:02:E1:D9 Connection successful [44:13:19:02:E1:D9][LE]> primary attr handle: 0x0001, end grp handle: 0x0007 uuid: 00001800-…. attr handle: 0x0008, end grp handle: 0x000a uuid: 00001803-…. attr handle: 0x000b, end grp handle: 0x000d uuid: 00001802-…. attr handle: 0x000e, end grp handle: 0x0010 uuid: 00001804-…. attr handle: 0x0011, end grp handle: 0xffff uuid: 0000180f-….

◀ なにこれ??

Page 10: BlueZで遊んでみる - BLE大阪勉強会

BLEの仕様を覗くBLEのService(機能)はそれぞれUUIDが決まってる。

Developer Portalを見てみる。https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx

Page 11: BlueZで遊んでみる - BLE大阪勉強会
Page 12: BlueZで遊んでみる - BLE大阪勉強会

Serviceの中を覗いてみる

◀ Device Nameが取れるらしい。

Page 13: BlueZで遊んでみる - BLE大阪勉強会

Serviceの中を覗いてみる

◀ 0x2A00がDevice Name。

Page 14: BlueZで遊んでみる - BLE大阪勉強会

Serviceの中を覗いてみる

Generic AccessBattery Service

Immediate AlertLink LossTx Power

Proximty Profile

Device Name

AppearancePeripheral Privacy Flag

Reconnection Address

Peripheral Preferred Connection Parameters

Services Characteristics

Page 15: BlueZで遊んでみる - BLE大阪勉強会

Device Nameを見てみる。[44:13:19:02:E1:D9][LE]> primary attr handle: 0x0001, end grp handle: 0x0007 uuid: 00001800-…. …省略

[44:13:19:02:E1:D9][LE]> char-desc 0x0001 0x0007 handle: 0x0001, uuid: 2800 handle: 0x0002, uuid: 2803 handle: 0x0003, uuid: 2a00 handle: 0x0004, uuid: 2803 handle: 0x0005, uuid: 2a01 handle: 0x0006, uuid: 2803 handle: 0x0007, uuid: 2a04 [44:13:19:02:E1:D9][LE]> char-read-hnd 0x0003 Characteristic value/descriptor: 4c 42 54 2d 56 52 55 30 31

◀ これがDevice Name.

ASCII表記「LBT-VRU01」

Page 16: BlueZで遊んでみる - BLE大阪勉強会

ぶるタグを鳴らしてみる

Generic AccessBattery Service

Immediate AlertLink LossTx Power

Proximty Profile

Alert Level

Services

Characteristics

UUID : 0x1802

UUID : 0x2A06

Page 17: BlueZで遊んでみる - BLE大阪勉強会

ぶるタグを鳴らしてみる

◀ 0x02入れたら鳴りそう!

Page 18: BlueZで遊んでみる - BLE大阪勉強会

ぶるタグを鳴らしてみる

[44:13:19:02:E1:D9][LE]> primary attr handle: 0x000b, end grp handle: 0x000d uuid: 00001802-…. [44:13:19:02:E1:D9][LE]> char-desc 0x000b 0x000d handle: 0x000b, uuid: 2800 handle: 0x000c, uuid: 2803 handle: 0x000d, uuid: 2a06 [44:13:19:02:E1:D9][LE]> char-write-cmd 0x000d 02

◀ これがAlert Level.

Page 19: BlueZで遊んでみる - BLE大阪勉強会

Advertizeを投げてみる受け手を作る。(Android)

android.bluetooth.BluetoothAdapter.LeScanCallback

◀ ここにAdvertizeのデータが入ってるぽい.

Page 20: BlueZで遊んでみる - BLE大阪勉強会

Advertiseを投げてみる拾ったデータをダンプする。

@Override public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) { // send from NOT-UI THREAD // ! StringBuffer sb = new StringBuffer(); for (byte b : scanRecord) { sb.append("0x"); sb.append(Integer.toHexString(b & 0xff)); sb.append(" "); } Log.i(TAG,sb.toString()); }

Page 21: BlueZで遊んでみる - BLE大阪勉強会

Advertizeを投げてみる$ sudo hciconfig hci0 leadv 3

0x02 0x01 0x0a 0x02 0x0a 0x08 0x0c 0x09 0x43 0x53 0x52 0x38 0x35 0x31 0x30 0x20 0x41 0x31 0x30 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

0x00 0x00 0x00 0x00 0x00 0x00

◀ [CSR8510 A10] Androidがデバイス名として認識してるのはこの辺りぽいけど?

Page 22: BlueZで遊んでみる - BLE大阪勉強会

AdvertizeパケットPreamble

1 octet 4 octet

Access Address Protocol Data Unit

2 ~ 39 octet

CRC

3 octet

▼先のAPIが取得できてたのはココ。

Header

2 octet

Payload

6 ~ 37 octet

AdvA Adv Data

Length AD Type Data

6 octet 0 ~ 31 octet

1 octet 1 octet N octet

Page 23: BlueZで遊んでみる - BLE大阪勉強会

解析してみる

Advertizeを投げてみる

0x02 0x01 0x0a

0x02 0x0a 0x08

0x0c 0x09 0x43 0x53 0x52 0x38 0x35 0x31 0x30 0x20 0x41 0x31 0x30

Length AD Type Data

Page 24: BlueZで遊んでみる - BLE大阪勉強会

Advertizeを投げてみるAD Type?

Dataに何が入っているか定義

0x02 0x01 0x0a

0x02 0x0a 0x08

0x0c 0x09 0x43 0x53 0x52 0x38 0x35 0x31 0x30 0x20 0x41 0x31 0x30

Length AD Type Data

▼0x09 Local Name(Completed). デバイス名!

Page 25: BlueZで遊んでみる - BLE大阪勉強会

Advertizeを投げてみる好きなデータを投げてみたい。以下で設定できるらしい?

$ hcitool -i hci0 cmd 0x08 0x0008 48 45 4c 4c 4f 57 $ sudo hciconfig hci0 leadv 3

ASCII表記「HELLOBLE」

えっ!?全然変わんない。。。

Page 26: BlueZで遊んでみる - BLE大阪勉強会

Advertizeを投げてみる

仕方無いので、Cプログラムからbluezを叩いてみる。(参考)bluez-ibeacon https://github.com/carsonmcdonald/bluez-ibeacon

Page 27: BlueZで遊んでみる - BLE大阪勉強会

Advertizeを投げてみるhci_send_req()を使うとdeviceに要求を出せる。

要求はstruct hci_requestにまとめる。

PARAM設定(Adv間隔),ENABLE設定,DATA設定の順に書き込めば、受信データが変わったことを確認できた。

0x0A 0x09 0x48 0x45 0x4a 0x4a 0x4f 0x57 0x42 0x4a 0x45 0x00 0x00 0x00 0x00 0x00

0x00 0x00 0x00 0x00 …省略◀ [HELLOBLE]が取れた!

Page 28: BlueZで遊んでみる - BLE大阪勉強会

!

!

Thank you !!