Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads.
BlueZ で遊んでみる
@kobashinG
今日のお題
BlueZとは?
コマンドラインでCentral
Advertiseを投げてみる
BlueZとは?
OSSのBluetoothスタック
Linux/Android等で利用されてい
るBluetoothを制御する為のもの
kernel-module/utilities/daemon

から成る
BlueZとは?
大雑把に図にすると、、
Kernel Driver
Utilities bluetoothd
GUI Application
d-busd/D-bus経由
HCIソケット経由
BlueZ(厳密にはDriverも)
この辺を使ってBLEを紐解いてみる。
BlueZとは?
hciconfig

- ifconfigに近い。

デバイスを設定する為のコマンド。
hcitool

- connectionを制御する為のコマンド。

scan/cmd/leccなど。
...
用意したもの
Ubuntu環境
BeagleBoneBlack + ubuntu13.04
BLE対応のUSBドングル
Peripheral対応端末
StickNFind / ぶるタグ
iPhone / Android(検証用)
BLExplr...
BlueZをビルド
Ubuntu標準のBlueZはBLE非対応。
最新のBlueZをインストール
$ wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.16.tar.gz
$ tar...
近くのデバイスを
検索してみる
$ 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 ...
接続してみる
$ 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 -...
BLEの仕様を覗く
BLEのService(機能)はそれぞれ
UUIDが決まってる。
Developer Portalを見てみる。

https://developer.bluetooth.org/gatt/services/Pages/Ser...
Serviceの中を覗いてみる
◀ Device Nameが取れるらしい。
Serviceの中を覗いてみる
◀ 0x2A00がDevice Name。
Serviceの中を覗いてみる
Generic Access
Battery Service
Immediate Alert
Link Loss
Tx Power
Proximty Profile
Device Name
Appearance
P...
Device Nameを見てみる。
[44:13:19:02:E1:D9][LE]> primary
attr handle: 0x0001, end grp handle: 0x0007 uuid: 00001800-….
…省略
[44:1...
ぶるタグを鳴らしてみる
Generic Access
Battery Service
Immediate Alert
Link Loss
Tx Power
Proximty Profile
Alert Level
Services
Charact...
ぶるタグを鳴らしてみる
◀ 0x02入れたら鳴りそう!
ぶるタグを鳴らしてみる
[44:13:19:02:E1:D9][LE]> primary
attr handle: 0x000b, end grp handle: 0x000d uuid: 00001802-….
[44:13:19:02:E1...
Advertizeを投げてみる
受け手を作る。(Android)
android.bluetooth.BluetoothAdapter.LeScanCallback
◀ ここにAdvertizeのデータが入ってるぽい.
Advertiseを投げてみる
拾ったデータをダンプする。
@Override
public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
// sen...
Advertizeを投げてみる
$ sudo hciconfig hci0 leadv 3
0x02 0x01 0x0a 0x02 0x0a 0x08 0x0c 0x09
0x43 0x53 0x52 0x38 0x35 0x31 0x30 0...
Advertizeパケット
Preamble
1 octet 4 octet
Access Address Protocol Data Unit
2 ∼ 39 octet
CRC
3 octet
▼先のAPIが取得できてたのはココ。
Heade...
解析してみる
Advertizeを投げてみる
0x02 0x01 0x0a
0x02 0x0a 0x08
0x0c 0x09 0x43 0x53 0x52 0x38 0x35 0x31
0x30 0x20 0x41 0x31 0x30
Leng...
Advertizeを投げてみる
AD Type?
Dataに何が入っているか定義
0x02 0x01 0x0a
0x02 0x0a 0x08
0x0c 0x09 0x43 0x53 0x52 0x38 0x35 0x31
0x30 0x20 0...
Advertizeを投げてみる
好きなデータを投げてみたい。

以下で設定できるらしい?
$ hcitool -i hci0 cmd 0x08 0x0008 48 45 4c 4c 4f 57
$ sudo hciconfig hci0 lea...
Advertizeを投げてみる
仕方無いので、Cプログラムから
bluezを叩いてみる。



(参考)bluez-ibeacon

https://github.com/carsonmcdonald/bluez-ibeacon
Advertizeを投げてみる
hci_send_req()を使うとdeviceに要求を出せる。
要求はstruct hci_requestにまとめる。
PARAM設定(Adv間隔),ENABLE設定,DATA設定の順に書
き込めば、受信データ...
!
!
Thank you !!
BlueZで遊んでみる - BLE大阪勉強会
Upcoming SlideShare
Loading in …5
×

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

20,682 views

Published on

Published in: Technology
  • Be the first to comment

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

  1. 1. BlueZ で遊んでみる @kobashinG
  2. 今日のお題 BlueZとは? コマンドラインでCentral Advertiseを投げてみる
  3. BlueZとは? OSSのBluetoothスタック Linux/Android等で利用されてい るBluetoothを制御する為のもの kernel-module/utilities/daemon
 から成る
  4. BlueZとは? 大雑把に図にすると、、 Kernel Driver Utilities bluetoothd GUI Application d-busd/D-bus経由 HCIソケット経由 BlueZ(厳密にはDriverも)
  5. この辺を使ってBLEを紐解いてみる。 BlueZとは? hciconfig
 - ifconfigに近い。
 デバイスを設定する為のコマンド。 hcitool
 - connectionを制御する為のコマンド。
 scan/cmd/leccなど。 gatttool
 - tいっぱい。
 GATTをコントロールする為のコマンド Utilities 概要
  6. 用意したもの Ubuntu環境 BeagleBoneBlack + ubuntu13.04 BLE対応のUSBドングル Peripheral対応端末 StickNFind / ぶるタグ iPhone / Android(検証用) BLExplr / 自作アプリ。
  7. 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
  8. 近くのデバイスを 検索してみる $ 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 する ◀ なんか見えた!!
  9. 接続してみる $ 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-…. ◀ なにこれ??
  10. BLEの仕様を覗く BLEのService(機能)はそれぞれ UUIDが決まってる。 Developer Portalを見てみる。
 https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx
  11. Serviceの中を覗いてみる ◀ Device Nameが取れるらしい。
  12. Serviceの中を覗いてみる ◀ 0x2A00がDevice Name。
  13. Serviceの中を覗いてみる Generic Access Battery Service Immediate Alert Link Loss Tx Power Proximty Profile Device Name Appearance Peripheral Privacy Flag Reconnection Address Peripheral Preferred Connection Parameters Services Characteristics
  14. 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」
  15. ぶるタグを鳴らしてみる Generic Access Battery Service Immediate Alert Link Loss Tx Power Proximty Profile Alert Level Services Characteristics UUID : 0x1802 UUID : 0x2A06
  16. ぶるタグを鳴らしてみる ◀ 0x02入れたら鳴りそう!
  17. ぶるタグを鳴らしてみる [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.
  18. Advertizeを投げてみる 受け手を作る。(Android) android.bluetooth.BluetoothAdapter.LeScanCallback ◀ ここにAdvertizeのデータが入ってるぽい.
  19. 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()); }
  20. 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がデバイス名として
 認識してるのはこの辺りぽいけど?
  21. 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
  22. 解析してみる Advertizeを投げてみる 0x02 0x01 0x0a 0x02 0x0a 0x08 0x0c 0x09 0x43 0x53 0x52 0x38 0x35 0x31 0x30 0x20 0x41 0x31 0x30 Length AD Type Data
  23. 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). デバイス名!
  24. Advertizeを投げてみる 好きなデータを投げてみたい。
 以下で設定できるらしい? $ hcitool -i hci0 cmd 0x08 0x0008 48 45 4c 4c 4f 57 $ sudo hciconfig hci0 leadv 3 ASCII表記「HELLOBLE」 えっ!?全然変わんない。。。
  25. Advertizeを投げてみる 仕方無いので、Cプログラムから bluezを叩いてみる。
 
 (参考)bluez-ibeacon
 https://github.com/carsonmcdonald/bluez-ibeacon
  26. 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]が取れた!
  27. ! ! Thank you !!
как копить деньги

reputation management companies

на сайте

×