SlideShare ist ein Scribd-Unternehmen logo
1 von 94
Downloaden Sie, um offline zu lesen
食関連産業IT化(機械化)講座 応用編 
Bluetooth Low Energy入門講座 
モノとアプリをつなげる基本技術 
第一部 基礎 
北海道ソフトウェア技術開発機構 
2013年11月12日~13日
講習のゴール 
• IoTのための無線技術としてBLEを捉え、 
LinuxからBLEデバイスを制御しインター 
ネット連携まで経験してみる 
• BLE仕様の概略を知る 
• LinuxからBLEデバイスを扱う 
• センサーデータを取得する 
• クラウドにアップロードする
アイスブレイク 
• 自己紹介 
• 経験の確認 
– Liunx 
– エディタ 
– 言語 
• グループ分け
一日目の内容 
• 午前 
– BLE概要 
– 事例紹介 
– デモ(iPhone/SensorTag/Konashi) 
• 午後 
– BLEの仕組み 
– SensorTag 
– Linuxからの操作
BLE概要
BLEとは 
• BLE = Bluetooth Low Energy 
– 超低消費電力な通信規格 
– コイン電池(CR2032)で一年間稼動可能 
• その名前のとおりBluetooth規格の一部 
– Bluetooth 4.0で統合されて 
– しかし既存の仕様(Classic)とはかなり違う
仕様の進化 
WiFi 
• 802.11 2Mbps 
• 802.11b 11Mbps 
• 802.11g 54Mbps 
• 802.11n 135Mbps 
Bluetooth 
• v1.1 1Mbps 
• v2 3Mbps 
• v3 54Mbps 
• v4 0.3Mbps
BLEのターゲット 
• 特徴:低速、近接通信 
– ヘルスケア 
– フィットネス 
– センサー 
– ビーコン 
– 近接検知 
– 室内測位 
• スマートフォンの周辺機器 
↑最重要
Bluetooth Smartロゴ
Bluetooth Smart 
• Bluetooth Smart 
– GATT, Single Mode 
• Bluetooth Smart Ready 
– GATT, Dual Mode
アプリケーション
Fitbit 
• 活動量計:加速度センサ 
• スマートフォンと接続 
• サーバにアップロードして管理
Adidas: Smart Ball 
• シュートの速度・回転・距離のデータをモ 
バイルアプリに送るサッカーボール
iGrill 
• グリル調理用温度計
iBeacon 
• iOS 7で登場 
• BLEを使用した領域と近接検出 
• iOSに組み込まれており、電波でビーコン 
を検知すると登録したアプリを起動する
MLBスタジアムでの実例 
• NY Mets本拠地のMLBでの実験 
– http://japan.cnet.com/news/commentary/35037818/
PayPal Beacon
スマートフォン 
• iphoneがBLEに対応 
– iphone 4s以後の機種 
– iOS6以後で対応 
• Androidも一部の機種で対応 
– 新Nexus 7 
– Android 4.3以後のバージョンで対応
スマートフォンとサービス 
• スマートフォンのアプリと連携したサービス 
が多数登場している 
• サービスを前提としてデバイスが販売され 
ている 
– アプリの販売、有料サービス等 
– 例: SoftbankのFitBit
開発環境の紹介
TI SensorTag 
• TI社のBLEデモボード 
– CC2541チップ+各種センサー 
• 8bit MCU 8051 
– デバイスは安価 
– ファーム開発 
• JTAGで書き換え可能 
• IAR Embedded Workbench 
• 開発環境は高価(試用は可)
BLE112A 
• BlueGiga社のBLEモジュール 
– チップはTI CC2540 
• BG-Script言語で開発可能 
– 無償で利用可能 
• シリアルとして利用可能
Laird BL600 
• smartBASICで開発が可能 
– 中はNordic Semiconductor社のSoC 
– 高性能(ARM-CortexM0) 
• 開発キットは安価(1.6万)
Konashi 
• ユカイ工学 
– iphone/iosのためのフィジカルコンピューティン 
グツールという位置づけ 
– 中身はミツミのWML-C69 
• ios用SDK 
– Objective-C/JavaScriptで開発可能 
• 各種拡張シールドも提供
CC2540DK-Mini 
• TI社CC2540 Mini Development Kit 
– FOBデバイス 
– CC2540 USBドングル 
– CC Debugger
Packet Sniffer 
• TI社
iphoneアプリ 
• TI SensorTag 
– TI社デバイス向け 
– 無料
iphoneアプリ 
• LightBlue 
– 汎用アプリ 
– 任意の参照&書込可能 
– Peripheral(デバイス)もな 
れる
BLEの仕組み
参考文献 
• Bluetooth Low Energy - Robin Heydon 
• Bluetooth Core Specification v4.0
特徴 
• 消費電力を低減するための工夫 
– パケット長短い 
– アドバータイズの制約 
– クロック精度の要求が緩い
Low Power 
• コイン電池で一年稼動可能 
• 設計の工夫 
– パケットを短く 
– ビットレートは高めに 
– オーバーヘッドを小さく 
– ACK送出タイミングを融通 
– コネクション確立は同一チャネルで 
– スレーブの接続動作頻度を下げる 
– 静的に実行可能な暗号化
Advertising 
• ペリフェラルがセントラルと通信を確立する 
ためにパケットを送信する 
• 広告の名の通り、特定のあて先無しに送 
信する 
• セントラルはペリフェラルからの広告を受 
信して動作する 
• 消費電力低減の工夫
物理層 
• 2.4GHz帯ISMバンド 
– 他の目的にも利用されている 
– 2400-2480MHz 2MHz毎 40ch 
• Classicは1MHz毎に79ch 
• 周波数ホッピング(FH) 
– 周波数拡散(SS)の一種 
• 変調方式 
– GFSK = Gaussian Frequency Shift Keying 
– シンボルレート1M、1bit/1シンボル
BLEの通信トポロジー 
• スター型構成 
– Central 
– Peripheral 
• Classicと違い非対称 
C 
P 
P 
P 
C
デバイスの種類 
• Bluetooth Classic 
– 従来(v3以前)のBluetooth仕様による通信 
• Single Mode 
– BLEのみ動作する 
• Dual Mode 
– BLEとClassicどちらも対応可能
通信の可否 
Single-Mode Dual-Mode Classic 
Single-Mode LE LE Not Available 
Dual-Mode LE Classic Classic 
Classic Not Available Classic Classic
App 
Host 
Controller 
アーキテクチャ 
Application 
Generic Access Profile 
Generic Attribute Profile 
Attribute Protocol Security Mgr 
Logical Link Control and Adaptation Protocol 
Host Controller Interface 
Link Layer 
Physical Layer 
GAP 
GATT 
ATT 
L2CAP 
HCI
Single Chip Solution 
Chip 
Application 
Host 
Controller
Two-Chip Solution 
Chip 
Chip 
Application 
Host 
Chip 
Application 
Host 
Controller Controller 
Chip
Three-Chip Solution 
Chip 
Chip 
Chip 
Application 
Host 
Controller
チャネル 
• 3ch: Advertising(37-39) 
– 広告のみに使用するチャネル 
– Classicと異なり固定 
– WiFi等の周波数を避けて設定されている 
• 37ch: Data (0-36) 
– 広告以外のすべての通信を行なう 
– 周波数ホッピング:一定のルールでチャネルを 
切り替える。妨害を防ぐ工夫。
周波数ホッピング 
• 一定時間毎にチャネル切替 
– 衝突が起きても大丈夫なように 
– Classicでは625us毎、BLEはもっと緩やかに 
• Fn+1 = (Fn + hop) mod 37 
– 5<= hop <= 16 
– 37は素数 
• AFH (Adaptive Frequency Hopping) 
– 利用されているチャネルを検知して避ける
リンクレイヤステート 
Scanning 
Advertising Standby Initiating 
Connected 
Slave Master
パケットの種類 
• Advertising Packet 
– Adverting Channelで送られるパケット 
– 他のデバイスを見つける、または接続するた 
めに使用 
• Data Packet 
– その他のチャネルで送られるパケット 
– 接続されたデバイスがデータの送受信に使用
Packetの構造 
Preamble 
Access 
Address 
Header 
Length 
Data CRC
Advertising Packet 
Scanner Advertiser 
Advertising Packet 
Advertising Packet 
Advertising Packet 
Advertising Packet 
Advertising Packet 
Advertising Packet
Advertising 
• General Advertising 
– コネクション可能デバイス 
• Direct Advertising 
– 即座に接続する場合に使用 
• Nonconnectable Adertising 
– データをブロードキャストする、接続しない 
• Discoverable Advertising 
– 接続を受けるのみの場合に使用
AdvertiseとConnection 
Initiator 
Master 
Advertiser 
Slave 
ADV_IND 
CONNECT_REQ 
Data Packet 
Data Packet 
Data Packet 
Data Packet
スキャニング 
• Passive Scanning 
• Active Scanning
Attributeの概念 
• BLEでやりとりするデータは「属性」 
Battery Level 
Tx Power 
Alert Level 
37% 
0dBm 
Low 
Device Name “Proximity Tag” 
Temperature 37℃
Attribute:ClientとServer 
• クライアントは、サーバの保持するアトリ 
ビュートを読み書きする 
Client Server 
Battery Level 
Tx Power 
Alert Level 
37% 
0dBm 
Low 
Device Name “Proximity Tag”
Attributeの操作 
• 読み出し(C→S) 
– ID(UUID)を指定して値を読み出し 
• 書き込み(C→S) 
– ID(UUID)を指定して値を書き込み 
• 通知(S→C) 
– 値の変更があったことを通知
Attribute詳細 
Attribute Handle Attribute Type Attribute Value 
2 octet 2 / 16 octet 0-512 octet
Attribute詳細 
• Attribute Handle 
– 2 octet: 0x0001 ~ 0xffff 
• Attribute Type 
– UUID: short(2 octet) or full(16 octet)
UUID 
• 16bitまたは128bitの識別子 
• Base UUID 
– 00000000-0000-1000-8000-00805F9B34FB 
• Short UUID (16bit) 
– 2A01 
• Full UUID (128bit) 
– 00002A01-0000-1000-8000-00805F9B34FB
UUIDグループ 
• 0x1800 - 0x26ff Service UUIDs 
• 0x2700 - 0x27ff Units 
• 0x2800 - 0x28ff Attribute Types 
• 0x2900 - 0x29ff Characteristic Descriptors 
• 0x2a00 - 0x7fff Characteristic Types
Attribute Database 
Attribute Handle Attribute Type Attribute Value 
0x0001 Primary Service GAP Service 
0x0002 Characteristic Device Name 
0x0003 Device Name “device name” 
0x0004 Characteristic Appearance 
0x0005 Appearance “DEVICE” 
0x0006 Primary Service GATT Service
Attribute Permissions 
• Readable 
• Writable 
• Readable and Writable 
• Authentication required 
• No authentication required 
• No authorization 
• Authorization
Attributeへのアクセス 
• Find Requests 
• Read Request 
• Write Request 
• Write Command 
• Notification 
• Indication
Attribute Protocol(1) 
Client Server 
ATT Request 
ATT Response 
Request 
Client Server 
ATT Command 
Command
Attribute Protocol(2) 
Client Server 
ATT Indication 
ATT Confirmation 
Indication 
Client Server 
ATT Notification 
Notification
Attribute Protocol Opcode 
Exchange MTU Request 0x02 
Find Information Request 0x04 
Find By Type Value Request 0x06 
Read By Type Request 0x08 
Read Request 0x0a 
Read Brob Request 0x0c 
Read Multiple Request 0x0e 
Read By Group Type Request 0x10 
Write Request 0x12 
Write Command 0x52 
Error Response 0x01 
Exchange MTU Response 0x03 
Find Information Response 0x05 
Find By Type Value Response 0x07 
Read By Type Response 0x09 
Read Response 0x0b 
Read Brob Response 0x0d 
Read Multiple Response 0x0f 
Read By Group Type Response 0x11 
Write Response 0x13 
- - 
Handle Value Notification 0x1b 
Handle Value Indication 0x1d Handle Value Confirmation 0x1e
GATT 
• Generic ATTribute Profile
実習環境
デバイス 
• Texas Instruments社 BLE Sensor Tag 
• コイン電池 
• ボタン(2+1) 
• センサ 
– 放射温度計 
– 気圧計 
– 加速度 
– 地磁気 
– ジャイロ
SensorTag 
• 各種センサーを搭載 
http://makezine.com/2013/04/18/teardown-of-the-ti-sensortag/
OSとハードウェア 
• OS: Linuxを使用します 
– ディストリビューション: Ubuntu 13.04 
– 仮想環境内で使用します 
• ハードウェア 
– PC: Windows 8.0 
– Bluetooth USBアダプタ
仮想PCの利用 
• 仮想PCに関する固有の操作があります 
– 電源操作: ON/OFF/SUSPEND/RESUME 
– キーボード/マウスの解放 
– ネットワーク 
– USBデバイスの接続
電源操作 
• ツールボタンから操作
キーボード/マウス 
• 起動やシャットダウン中など、キーボードや 
マウスが自動的に解放されない場合があ 
ります 
• Ctrl-Shiftを押すと解放されます
Terminal 
• 左上アイコンをクリックしてTerminalと入力
ネットワーク 
• NATを使用します 
• ブラウザでインターネット接続を確認
USB Bluetoothの接続 
• 場合によりWindows側でUSBデバイスを無 
効に設定しておく必要があります 
• ツールボタンから接続を確認します
USB Bluetoothの確認 
• lsusbコマンドで確認
Bluez 
• Linux向けBluetoothプロトコルスタック 
• Bluez-X.Xを使用します 
• パッケージは予めインストール済み 
• ドキュメントは不足している 
– まとまった資料もあまり公開されていない 
– コマンドラインヘルプが頼り
http://www.silex.jp/blog/wireless/assets_c/2012/12/bluez-large-164.html
Bluezのコマンド 
• hciconfig 
– アダプタ設定、広告等 
• hcitool 
– デバイスの発見、接続等 
• gatttool 
– デバイス接続、アトリビュートの取得、書込
hciconfig 
• インターフェースの動作確認 
– hci0として見えていること 
– エラーが出ないこと 
$ hc iconfig 
hci0: Type: BR/EDR Bus: USB 
BD Address: 00:1B:DC:06:6E:E6 ACL MTU: 310:10 
SCO MTU: 64:8 
UP RUNNING PSCAN 
RX bytes:1712 acl:44 sco:0 events:106 errors:0 
TX bytes:2393 acl:44 sco:0 commands:48 errors:0
hcitool 
• アクティブスキャン 
$ sudo hcitool lescan 
LE Scan ... 
90:59:AF:0A:A8:A4 (unknown) 
90:59:AF:0A:A8:A4 SensorTag 
• パッシブスキャン 
$ sudo hcitool lescan --passive 
LE Scan ... 
90:59:AF:0A:A8:A4 (unknown)
hcitool 
• 接続 
$ sudo hcitool lecc 90:59:AF:0A:A8:A4 
Connection handle 64 
• 切断 
$ sudo hcitool ledc 64
hcitool 
• ホワイトリスト 
$ sudo hcitool lewlsz 
White list size: 32 
$ sudo hcitool lewlclr 
$ sudo hcitool lewladd 90:59:AF:0A:A8:A4 
$ sudo hcitool lewlrm 90:59:AF:0A:A8:A4 
•接続 
$ sudo hcitool lecc --white 
Connection handle 64
gatttool 
• インタラクティブにコマンド操作 
$ gatttool -I -b 90:59:AF:0A:A8:A4 
[ ][90:59:AF:0A:A8:A4][LE]> 
• 接続 
[ ][90:59:AF:0A:A8:A4][LE]> connect 
[CON][90:59:AF:0A:A8:A4][LE]>
gatttool 
• primary service 
[CON][90:59:AF:0A:A8:A4][LE]> primary 
attr handle: 0x0001, end grp handle: 0x000b uuid: 00001800-0000-1000-8000-00805f9b34fb 
attr handle: 0x000c, end grp handle: 0x000f uuid: 00001801-0000-1000-8000-00805f9b34fb 
attr handle: 0x0010, end grp handle: 0x0022 uuid: 0000180a-0000-1000-8000-00805f9b34fb 
attr handle: 0x0023, end grp handle: 0x002a uuid: f000aa00-0451-4000-b000-000000000000 
attr handle: 0x002b, end grp handle: 0x0035 uuid: f000aa10-0451-4000-b000-000000000000 
attr handle: 0x0036, end grp handle: 0x003d uuid: f000aa20-0451-4000-b000-000000000000 
attr handle: 0x003e, end grp handle: 0x0048 uuid: f000aa30-0451-4000-b000-000000000000 
attr handle: 0x0049, end grp handle: 0x0054 uuid: f000aa40-0451-4000-b000-000000000000 
attr handle: 0x0055, end grp handle: 0x005c uuid: f000aa50-0451-4000-b000-000000000000 
attr handle: 0x005d, end grp handle: 0x0061 uuid: 0000ffe0-0000-1000-8000-00805f9b34fb 
attr handle: 0x0062, end grp handle: 0x0068 uuid: f000aa60-0451-4000-b000-000000000000 
attr handle: 0x0069, end grp handle: 0x0073 uuid: f000ccc0-0451-4000-b000-000000000000 
attr handle: 0x0074, end grp handle: 0xffff uuid: f000ffc0-0451-4000-b000-000000000000 
[CON][90:59:AF:0A:A8:A4][LE]>
primary service 
• attr handle: 0x0001, end grp handle: 0x000b 
uuid: 00001800-0000-1000-8000-00805f9b34fb 
– 0x0001 開始ハンドル 
– 0x000b 終了ハンドル 
– 0x1800 Generic Access 
• 割り当てられたService番号は下記に掲載 
• https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx 
• 0x1800 Generic Access 
• 0x1801 Generic Attribute 
• 0x180a Device Information
gatttool 
• characteristics 
[CON][90:59:AF:0A:A8:A4][LE]> characteristics 
handle: 0x0002, char properties: 0x02, char value handle: 0x0003, uuid: 
00002a00-0000-1000-8000-00805f9b34fb 
handle: 0x0004, char properties: 0x02, char value handle: 0x0005, uuid: 
00002a01-0000-1000-8000-00805f9b34fb 
handle: 0x0006, char properties: 0x0a, char value handle: 0x0007, uuid: 
00002a02-0000-1000-8000-00805f9b34fb 
handle: 0x0008, char properties: 0x08, char value handle: 0x0009, uuid: 
00002a03-0000-1000-8000-00805f9b34fb 
handle: 0x000a, char properties: 0x02, char value handle: 0x000b, uuid: 
00002a04-0000-1000-8000-00805f9b34fb 
handle: 0x000d, char properties: 0x20, char value handle: 0x000e, uuid: 
00002a05-0000-1000-8000-00805f9b34fb
characteristics 
handle: 0x0002, char properties: 0x02, char value handle: 
0x0003, uuid: 00002a00-0000-1000-8000-00805f9b34fb 
•value handle: 0x00030x2a00=DEVICE NAME 
•0x2a00は、DEVICE NAME CHARACTERISTICSを意味している 
•割り当てられた番号はBluetooth Core Specification v4.0 もしくは、下記ページに記載 
•https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicsHome.aspx
ベンダー固有のUUID 
• 標準のCharacteristicsのBase 128bit UUID 
– 00000000-0000-1000-8000-00805f9b34fb 
• ベンダー独自のCharacteristicsは異なるBase UUID 
– TI : F0000000-0451-4000-B000-000000000000 
• TI Sensor Tagについては下記に記載されている 
– http://processors.wiki.ti.com/index.php/SensorTag_User_Guide
アトリビュートの読み出し 
• char-read-hnd 
[CON][90:59:AF:0A:A8:A4][LE]> char-read-hnd 0x0003 
[CON][90:59:AF:0A:A8:A4][LE]> 
Characteristic value/descriptor: 54 49 20 42 4c 45 20 53 65 6e 
73 6f 72 20 54 61 67 
[CON][90:59:AF:0A:A8:A4][LE]> 
= TI BLE Sensor Tag
アトリビュートの書き込み 
• char-write-req (応答有り) 
[CON][90:59:AF:0A:A8:A4][LE]> char-write-req 0x0026 0100 
[CON][90:59:AF:0A:A8:A4][LE]> Characteristic value was written 
successfully 
[CON][90:59:AF:0A:A8:A4][LE]> 
• char-write-cmd (応答無し) 
[CON][90:59:AF:0A:A8:A4][LE]> char-write-cmd 0x0026 0100 
[CON][90:59:AF:0A:A8:A4][LE]> 
• 注意: 16進数指定で<handle>は0xが必要 <new value>には不要(付けるとエラー)
Notification 
• デバイスからの通知を受ける 
– SensorTagの場合、0x0026に0100, 0x0029に01を書き込むとIR 
TemperatureのNotificationが毎秒出る 
[CON][90:59:AF:0A:A8:A4][LE]> char-write-req 0x0026 0100 
[CON][90:59:AF:0A:A8:A4][LE]> char-write-req 0x0029 01 
Notification handle = 0x0025 value: 70 fe c0 0c 
[CON][90:59:AF:0A:A8:A4][LE]> 
Notification handle = 0x0025 value: 6c fe c0 0c 
[CON][90:59:AF:0A:A8:A4][LE]> 
Notification handle = 0x0025 value: 69 fe c0 0c 
[CON][90:59:AF:0A:A8:A4][LE]> 
Notification handle = 0x0025 value: 6a fe c0 0c
Exercise 
• 各センサーの値を読み出してみる 
– 加速度 
– ジャイロ 
– 地磁気 
– ボタン 
• Notificationとして受け取ってみる

Weitere ähnliche Inhalte

Was ist angesagt?

ia-cloudとNodeREDで作る工場IoT–センサ接続やダッシュボードのカスタムNode開発秘話
ia-cloudとNodeREDで作る工場IoT–センサ接続やダッシュボードのカスタムNode開発秘話ia-cloudとNodeREDで作る工場IoT–センサ接続やダッシュボードのカスタムNode開発秘話
ia-cloudとNodeREDで作る工場IoT–センサ接続やダッシュボードのカスタムNode開発秘話Ryoichi Obara
 
大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌LINE Corporation
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021Preferred Networks
 
NVIDIA GPUで作るHeadless X11 Linux
NVIDIA GPUで作るHeadless X11 LinuxNVIDIA GPUで作るHeadless X11 Linux
NVIDIA GPUで作るHeadless X11 LinuxTomoki SHISHIKURA
 
イッパン的なゴカテイ作ってみた #histudy 2017/08
イッパン的なゴカテイ作ってみた #histudy 2017/08イッパン的なゴカテイ作ってみた #histudy 2017/08
イッパン的なゴカテイ作ってみた #histudy 2017/08sperkbird
 
OPC UAをオープンソースやフリーのソフトで遊んでみた
OPC UAをオープンソースやフリーのソフトで遊んでみたOPC UAをオープンソースやフリーのソフトで遊んでみた
OPC UAをオープンソースやフリーのソフトで遊んでみたミソジ
 
3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。
3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。
3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。ROBOTIS Japan
 
Rclex: ElixirでROS!!
Rclex: ElixirでROS!!Rclex: ElixirでROS!!
Rclex: ElixirでROS!!Hideki Takase
 
SLAM入門 第2章 SLAMの基礎
SLAM入門 第2章 SLAMの基礎SLAM入門 第2章 SLAMの基礎
SLAM入門 第2章 SLAMの基礎yohei okawa
 
「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!Hirotaka Sato
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
第 1 回 Jetson ユーザー勉強会
第 1 回 Jetson ユーザー勉強会第 1 回 Jetson ユーザー勉強会
第 1 回 Jetson ユーザー勉強会NVIDIA Japan
 
ロボティクスにおける SLAM 手法と実用化例
ロボティクスにおける SLAM 手法と実用化例ロボティクスにおける SLAM 手法と実用化例
ロボティクスにおける SLAM 手法と実用化例Yoshitaka HARA
 
FlutterでBLEを
いい感じにする
FlutterでBLEを
いい感じにするFlutterでBLEを
いい感じにする
FlutterでBLEを
いい感じにするchigichan24
 
wakamonoによるISP的実験PROJECT AS59105のご紹介
wakamonoによるISP的実験PROJECT AS59105のご紹介wakamonoによるISP的実験PROJECT AS59105のご紹介
wakamonoによるISP的実験PROJECT AS59105のご紹介Yamaguchi Katsushi
 
FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎ken_kitahara
 
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法kazkiti
 

Was ist angesagt? (20)

ia-cloudとNodeREDで作る工場IoT–センサ接続やダッシュボードのカスタムNode開発秘話
ia-cloudとNodeREDで作る工場IoT–センサ接続やダッシュボードのカスタムNode開発秘話ia-cloudとNodeREDで作る工場IoT–センサ接続やダッシュボードのカスタムNode開発秘話
ia-cloudとNodeREDで作る工場IoT–センサ接続やダッシュボードのカスタムNode開発秘話
 
大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 
DPDKを拡張してみた話し
DPDKを拡張してみた話しDPDKを拡張してみた話し
DPDKを拡張してみた話し
 
NVIDIA GPUで作るHeadless X11 Linux
NVIDIA GPUで作るHeadless X11 LinuxNVIDIA GPUで作るHeadless X11 Linux
NVIDIA GPUで作るHeadless X11 Linux
 
イッパン的なゴカテイ作ってみた #histudy 2017/08
イッパン的なゴカテイ作ってみた #histudy 2017/08イッパン的なゴカテイ作ってみた #histudy 2017/08
イッパン的なゴカテイ作ってみた #histudy 2017/08
 
OPC UAをオープンソースやフリーのソフトで遊んでみた
OPC UAをオープンソースやフリーのソフトで遊んでみたOPC UAをオープンソースやフリーのソフトで遊んでみた
OPC UAをオープンソースやフリーのソフトで遊んでみた
 
Wireguard 実践入門
Wireguard 実践入門Wireguard 実践入門
Wireguard 実践入門
 
Visual slam
Visual slamVisual slam
Visual slam
 
3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。
3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。
3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。
 
Rclex: ElixirでROS!!
Rclex: ElixirでROS!!Rclex: ElixirでROS!!
Rclex: ElixirでROS!!
 
SLAM入門 第2章 SLAMの基礎
SLAM入門 第2章 SLAMの基礎SLAM入門 第2章 SLAMの基礎
SLAM入門 第2章 SLAMの基礎
 
「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
第 1 回 Jetson ユーザー勉強会
第 1 回 Jetson ユーザー勉強会第 1 回 Jetson ユーザー勉強会
第 1 回 Jetson ユーザー勉強会
 
ロボティクスにおける SLAM 手法と実用化例
ロボティクスにおける SLAM 手法と実用化例ロボティクスにおける SLAM 手法と実用化例
ロボティクスにおける SLAM 手法と実用化例
 
FlutterでBLEを
いい感じにする
FlutterでBLEを
いい感じにするFlutterでBLEを
いい感じにする
FlutterでBLEを
いい感じにする
 
wakamonoによるISP的実験PROJECT AS59105のご紹介
wakamonoによるISP的実験PROJECT AS59105のご紹介wakamonoによるISP的実験PROJECT AS59105のご紹介
wakamonoによるISP的実験PROJECT AS59105のご紹介
 
FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎
 
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
 

Ähnlich wie Bluetoothl-Low-Energy入門講座-part1

Bluetooth Low Energy入門講座 -part2
Bluetooth Low Energy入門講座 -part2Bluetooth Low Energy入門講座 -part2
Bluetooth Low Energy入門講座 -part2edy555
 
ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例fumoto kazuhiro
 
【Interop tokyo 2014】 Internet of Everything / SDN と シスコ技術者認定
【Interop tokyo 2014】 Internet of Everything / SDN と シスコ技術者認定【Interop tokyo 2014】 Internet of Everything / SDN と シスコ技術者認定
【Interop tokyo 2014】 Internet of Everything / SDN と シスコ技術者認定シスコシステムズ合同会社
 
基礎教養としてのUbuntuサーバ_前編.pptx
基礎教養としてのUbuntuサーバ_前編.pptx基礎教養としてのUbuntuサーバ_前編.pptx
基礎教養としてのUbuntuサーバ_前編.pptxYuji Naito
 
Node-redでプロトタイピング
Node-redでプロトタイピングNode-redでプロトタイピング
Node-redでプロトタイピングMakoto SAKAI
 
YAPC::Asia2014 - O2O/IoT/Wearable時代におけるWeb以外のネットワーク技術入門
YAPC::Asia2014 - O2O/IoT/Wearable時代におけるWeb以外のネットワーク技術入門YAPC::Asia2014 - O2O/IoT/Wearable時代におけるWeb以外のネットワーク技術入門
YAPC::Asia2014 - O2O/IoT/Wearable時代におけるWeb以外のネットワーク技術入門Recruit Technologies
 
ディペンダブルなクラウドコンピューティング基盤を目指して
ディペンダブルなクラウドコンピューティング基盤を目指してディペンダブルなクラウドコンピューティング基盤を目指して
ディペンダブルなクラウドコンピューティング基盤を目指してKazuhiko Kato
 
Software for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 TokyoSoftware for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 TokyoShohei Hido
 
Tremaで試すFirewall
Tremaで試すFirewallTremaで試すFirewall
Tremaで試すFirewallM Hagiwara
 
Lチカで終わらせないArduino シリアル通信 Part2(移行済)
Lチカで終わらせないArduino シリアル通信 Part2(移行済)Lチカで終わらせないArduino シリアル通信 Part2(移行済)
Lチカで終わらせないArduino シリアル通信 Part2(移行済)tomitomi3 tomitomi3
 
Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Sho Shimizu
 
AIスピーカーとオープンネットワーク機器LonWorks・EnOcean・DALI 接続実証実験
AIスピーカーとオープンネットワーク機器LonWorks・EnOcean・DALI 接続実証実験AIスピーカーとオープンネットワーク機器LonWorks・EnOcean・DALI 接続実証実験
AIスピーカーとオープンネットワーク機器LonWorks・EnOcean・DALI 接続実証実験TomohisaYamazoe
 
Lagopus workshop@Internet weekのそば
Lagopus workshop@Internet weekのそばLagopus workshop@Internet weekのそば
Lagopus workshop@Internet weekのそばYoshihiro Nakajima
 
20160320 BLE4.2勉強会 MakerLab Nagoya
20160320 BLE4.2勉強会 MakerLab Nagoya20160320 BLE4.2勉強会 MakerLab Nagoya
20160320 BLE4.2勉強会 MakerLab Nagoyaakihiro uehara
 
Webアプリケーションによる電源管理システムのご紹介
Webアプリケーションによる電源管理システムのご紹介Webアプリケーションによる電源管理システムのご紹介
Webアプリケーションによる電源管理システムのご紹介npsg
 
Kavya racharla ndh-naropanth_fin_jp-final
Kavya racharla ndh-naropanth_fin_jp-finalKavya racharla ndh-naropanth_fin_jp-final
Kavya racharla ndh-naropanth_fin_jp-finalPacSecJP
 
近頃のDockerネットワーク
近頃のDockerネットワーク近頃のDockerネットワーク
近頃のDockerネットワークYuji Oshima
 
20150715 xflow kikuta_final
20150715 xflow kikuta_final20150715 xflow kikuta_final
20150715 xflow kikuta_finalKazumasa Ikuta
 

Ähnlich wie Bluetoothl-Low-Energy入門講座-part1 (20)

Bluetooth Low Energy入門講座 -part2
Bluetooth Low Energy入門講座 -part2Bluetooth Low Energy入門講座 -part2
Bluetooth Low Energy入門講座 -part2
 
ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例
 
【Interop tokyo 2014】 Internet of Everything / SDN と シスコ技術者認定
【Interop tokyo 2014】 Internet of Everything / SDN と シスコ技術者認定【Interop tokyo 2014】 Internet of Everything / SDN と シスコ技術者認定
【Interop tokyo 2014】 Internet of Everything / SDN と シスコ技術者認定
 
基礎教養としてのUbuntuサーバ_前編.pptx
基礎教養としてのUbuntuサーバ_前編.pptx基礎教養としてのUbuntuサーバ_前編.pptx
基礎教養としてのUbuntuサーバ_前編.pptx
 
Node-redでプロトタイピング
Node-redでプロトタイピングNode-redでプロトタイピング
Node-redでプロトタイピング
 
YAPC::Asia2014 - O2O/IoT/Wearable時代におけるWeb以外のネットワーク技術入門
YAPC::Asia2014 - O2O/IoT/Wearable時代におけるWeb以外のネットワーク技術入門YAPC::Asia2014 - O2O/IoT/Wearable時代におけるWeb以外のネットワーク技術入門
YAPC::Asia2014 - O2O/IoT/Wearable時代におけるWeb以外のネットワーク技術入門
 
ディペンダブルなクラウドコンピューティング基盤を目指して
ディペンダブルなクラウドコンピューティング基盤を目指してディペンダブルなクラウドコンピューティング基盤を目指して
ディペンダブルなクラウドコンピューティング基盤を目指して
 
Software for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 TokyoSoftware for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 Tokyo
 
Tremaで試すFirewall
Tremaで試すFirewallTremaで試すFirewall
Tremaで試すFirewall
 
Lチカで終わらせないArduino シリアル通信 Part2(移行済)
Lチカで終わらせないArduino シリアル通信 Part2(移行済)Lチカで終わらせないArduino シリアル通信 Part2(移行済)
Lチカで終わらせないArduino シリアル通信 Part2(移行済)
 
Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像
 
計算機理論入門08
計算機理論入門08計算機理論入門08
計算機理論入門08
 
AIスピーカーとオープンネットワーク機器LonWorks・EnOcean・DALI 接続実証実験
AIスピーカーとオープンネットワーク機器LonWorks・EnOcean・DALI 接続実証実験AIスピーカーとオープンネットワーク機器LonWorks・EnOcean・DALI 接続実証実験
AIスピーカーとオープンネットワーク機器LonWorks・EnOcean・DALI 接続実証実験
 
Lagopus workshop@Internet weekのそば
Lagopus workshop@Internet weekのそばLagopus workshop@Internet weekのそば
Lagopus workshop@Internet weekのそば
 
Ppt fukui g
Ppt fukui gPpt fukui g
Ppt fukui g
 
20160320 BLE4.2勉強会 MakerLab Nagoya
20160320 BLE4.2勉強会 MakerLab Nagoya20160320 BLE4.2勉強会 MakerLab Nagoya
20160320 BLE4.2勉強会 MakerLab Nagoya
 
Webアプリケーションによる電源管理システムのご紹介
Webアプリケーションによる電源管理システムのご紹介Webアプリケーションによる電源管理システムのご紹介
Webアプリケーションによる電源管理システムのご紹介
 
Kavya racharla ndh-naropanth_fin_jp-final
Kavya racharla ndh-naropanth_fin_jp-finalKavya racharla ndh-naropanth_fin_jp-final
Kavya racharla ndh-naropanth_fin_jp-final
 
近頃のDockerネットワーク
近頃のDockerネットワーク近頃のDockerネットワーク
近頃のDockerネットワーク
 
20150715 xflow kikuta_final
20150715 xflow kikuta_final20150715 xflow kikuta_final
20150715 xflow kikuta_final
 

Bluetoothl-Low-Energy入門講座-part1

  • 1. 食関連産業IT化(機械化)講座 応用編 Bluetooth Low Energy入門講座 モノとアプリをつなげる基本技術 第一部 基礎 北海道ソフトウェア技術開発機構 2013年11月12日~13日
  • 2. 講習のゴール • IoTのための無線技術としてBLEを捉え、 LinuxからBLEデバイスを制御しインター ネット連携まで経験してみる • BLE仕様の概略を知る • LinuxからBLEデバイスを扱う • センサーデータを取得する • クラウドにアップロードする
  • 3. アイスブレイク • 自己紹介 • 経験の確認 – Liunx – エディタ – 言語 • グループ分け
  • 4. 一日目の内容 • 午前 – BLE概要 – 事例紹介 – デモ(iPhone/SensorTag/Konashi) • 午後 – BLEの仕組み – SensorTag – Linuxからの操作
  • 6. BLEとは • BLE = Bluetooth Low Energy – 超低消費電力な通信規格 – コイン電池(CR2032)で一年間稼動可能 • その名前のとおりBluetooth規格の一部 – Bluetooth 4.0で統合されて – しかし既存の仕様(Classic)とはかなり違う
  • 7. 仕様の進化 WiFi • 802.11 2Mbps • 802.11b 11Mbps • 802.11g 54Mbps • 802.11n 135Mbps Bluetooth • v1.1 1Mbps • v2 3Mbps • v3 54Mbps • v4 0.3Mbps
  • 8. BLEのターゲット • 特徴:低速、近接通信 – ヘルスケア – フィットネス – センサー – ビーコン – 近接検知 – 室内測位 • スマートフォンの周辺機器 ↑最重要
  • 10. Bluetooth Smart • Bluetooth Smart – GATT, Single Mode • Bluetooth Smart Ready – GATT, Dual Mode
  • 12. Fitbit • 活動量計:加速度センサ • スマートフォンと接続 • サーバにアップロードして管理
  • 13. Adidas: Smart Ball • シュートの速度・回転・距離のデータをモ バイルアプリに送るサッカーボール
  • 15. iBeacon • iOS 7で登場 • BLEを使用した領域と近接検出 • iOSに組み込まれており、電波でビーコン を検知すると登録したアプリを起動する
  • 16.
  • 17. MLBスタジアムでの実例 • NY Mets本拠地のMLBでの実験 – http://japan.cnet.com/news/commentary/35037818/
  • 19. スマートフォン • iphoneがBLEに対応 – iphone 4s以後の機種 – iOS6以後で対応 • Androidも一部の機種で対応 – 新Nexus 7 – Android 4.3以後のバージョンで対応
  • 20. スマートフォンとサービス • スマートフォンのアプリと連携したサービス が多数登場している • サービスを前提としてデバイスが販売され ている – アプリの販売、有料サービス等 – 例: SoftbankのFitBit
  • 22. TI SensorTag • TI社のBLEデモボード – CC2541チップ+各種センサー • 8bit MCU 8051 – デバイスは安価 – ファーム開発 • JTAGで書き換え可能 • IAR Embedded Workbench • 開発環境は高価(試用は可)
  • 23. BLE112A • BlueGiga社のBLEモジュール – チップはTI CC2540 • BG-Script言語で開発可能 – 無償で利用可能 • シリアルとして利用可能
  • 24. Laird BL600 • smartBASICで開発が可能 – 中はNordic Semiconductor社のSoC – 高性能(ARM-CortexM0) • 開発キットは安価(1.6万)
  • 25. Konashi • ユカイ工学 – iphone/iosのためのフィジカルコンピューティン グツールという位置づけ – 中身はミツミのWML-C69 • ios用SDK – Objective-C/JavaScriptで開発可能 • 各種拡張シールドも提供
  • 26. CC2540DK-Mini • TI社CC2540 Mini Development Kit – FOBデバイス – CC2540 USBドングル – CC Debugger
  • 28. iphoneアプリ • TI SensorTag – TI社デバイス向け – 無料
  • 29. iphoneアプリ • LightBlue – 汎用アプリ – 任意の参照&書込可能 – Peripheral(デバイス)もな れる
  • 31. 参考文献 • Bluetooth Low Energy - Robin Heydon • Bluetooth Core Specification v4.0
  • 32.
  • 33. 特徴 • 消費電力を低減するための工夫 – パケット長短い – アドバータイズの制約 – クロック精度の要求が緩い
  • 34. Low Power • コイン電池で一年稼動可能 • 設計の工夫 – パケットを短く – ビットレートは高めに – オーバーヘッドを小さく – ACK送出タイミングを融通 – コネクション確立は同一チャネルで – スレーブの接続動作頻度を下げる – 静的に実行可能な暗号化
  • 35. Advertising • ペリフェラルがセントラルと通信を確立する ためにパケットを送信する • 広告の名の通り、特定のあて先無しに送 信する • セントラルはペリフェラルからの広告を受 信して動作する • 消費電力低減の工夫
  • 36. 物理層 • 2.4GHz帯ISMバンド – 他の目的にも利用されている – 2400-2480MHz 2MHz毎 40ch • Classicは1MHz毎に79ch • 周波数ホッピング(FH) – 周波数拡散(SS)の一種 • 変調方式 – GFSK = Gaussian Frequency Shift Keying – シンボルレート1M、1bit/1シンボル
  • 37. BLEの通信トポロジー • スター型構成 – Central – Peripheral • Classicと違い非対称 C P P P C
  • 38. デバイスの種類 • Bluetooth Classic – 従来(v3以前)のBluetooth仕様による通信 • Single Mode – BLEのみ動作する • Dual Mode – BLEとClassicどちらも対応可能
  • 39. 通信の可否 Single-Mode Dual-Mode Classic Single-Mode LE LE Not Available Dual-Mode LE Classic Classic Classic Not Available Classic Classic
  • 40. App Host Controller アーキテクチャ Application Generic Access Profile Generic Attribute Profile Attribute Protocol Security Mgr Logical Link Control and Adaptation Protocol Host Controller Interface Link Layer Physical Layer GAP GATT ATT L2CAP HCI
  • 41. Single Chip Solution Chip Application Host Controller
  • 42. Two-Chip Solution Chip Chip Application Host Chip Application Host Controller Controller Chip
  • 43. Three-Chip Solution Chip Chip Chip Application Host Controller
  • 44. チャネル • 3ch: Advertising(37-39) – 広告のみに使用するチャネル – Classicと異なり固定 – WiFi等の周波数を避けて設定されている • 37ch: Data (0-36) – 広告以外のすべての通信を行なう – 周波数ホッピング:一定のルールでチャネルを 切り替える。妨害を防ぐ工夫。
  • 45. 周波数ホッピング • 一定時間毎にチャネル切替 – 衝突が起きても大丈夫なように – Classicでは625us毎、BLEはもっと緩やかに • Fn+1 = (Fn + hop) mod 37 – 5<= hop <= 16 – 37は素数 • AFH (Adaptive Frequency Hopping) – 利用されているチャネルを検知して避ける
  • 46. リンクレイヤステート Scanning Advertising Standby Initiating Connected Slave Master
  • 47. パケットの種類 • Advertising Packet – Adverting Channelで送られるパケット – 他のデバイスを見つける、または接続するた めに使用 • Data Packet – その他のチャネルで送られるパケット – 接続されたデバイスがデータの送受信に使用
  • 48. Packetの構造 Preamble Access Address Header Length Data CRC
  • 49. Advertising Packet Scanner Advertiser Advertising Packet Advertising Packet Advertising Packet Advertising Packet Advertising Packet Advertising Packet
  • 50. Advertising • General Advertising – コネクション可能デバイス • Direct Advertising – 即座に接続する場合に使用 • Nonconnectable Adertising – データをブロードキャストする、接続しない • Discoverable Advertising – 接続を受けるのみの場合に使用
  • 51. AdvertiseとConnection Initiator Master Advertiser Slave ADV_IND CONNECT_REQ Data Packet Data Packet Data Packet Data Packet
  • 52. スキャニング • Passive Scanning • Active Scanning
  • 53. Attributeの概念 • BLEでやりとりするデータは「属性」 Battery Level Tx Power Alert Level 37% 0dBm Low Device Name “Proximity Tag” Temperature 37℃
  • 54. Attribute:ClientとServer • クライアントは、サーバの保持するアトリ ビュートを読み書きする Client Server Battery Level Tx Power Alert Level 37% 0dBm Low Device Name “Proximity Tag”
  • 55. Attributeの操作 • 読み出し(C→S) – ID(UUID)を指定して値を読み出し • 書き込み(C→S) – ID(UUID)を指定して値を書き込み • 通知(S→C) – 値の変更があったことを通知
  • 56. Attribute詳細 Attribute Handle Attribute Type Attribute Value 2 octet 2 / 16 octet 0-512 octet
  • 57. Attribute詳細 • Attribute Handle – 2 octet: 0x0001 ~ 0xffff • Attribute Type – UUID: short(2 octet) or full(16 octet)
  • 58. UUID • 16bitまたは128bitの識別子 • Base UUID – 00000000-0000-1000-8000-00805F9B34FB • Short UUID (16bit) – 2A01 • Full UUID (128bit) – 00002A01-0000-1000-8000-00805F9B34FB
  • 59. UUIDグループ • 0x1800 - 0x26ff Service UUIDs • 0x2700 - 0x27ff Units • 0x2800 - 0x28ff Attribute Types • 0x2900 - 0x29ff Characteristic Descriptors • 0x2a00 - 0x7fff Characteristic Types
  • 60. Attribute Database Attribute Handle Attribute Type Attribute Value 0x0001 Primary Service GAP Service 0x0002 Characteristic Device Name 0x0003 Device Name “device name” 0x0004 Characteristic Appearance 0x0005 Appearance “DEVICE” 0x0006 Primary Service GATT Service
  • 61. Attribute Permissions • Readable • Writable • Readable and Writable • Authentication required • No authentication required • No authorization • Authorization
  • 62. Attributeへのアクセス • Find Requests • Read Request • Write Request • Write Command • Notification • Indication
  • 63. Attribute Protocol(1) Client Server ATT Request ATT Response Request Client Server ATT Command Command
  • 64. Attribute Protocol(2) Client Server ATT Indication ATT Confirmation Indication Client Server ATT Notification Notification
  • 65. Attribute Protocol Opcode Exchange MTU Request 0x02 Find Information Request 0x04 Find By Type Value Request 0x06 Read By Type Request 0x08 Read Request 0x0a Read Brob Request 0x0c Read Multiple Request 0x0e Read By Group Type Request 0x10 Write Request 0x12 Write Command 0x52 Error Response 0x01 Exchange MTU Response 0x03 Find Information Response 0x05 Find By Type Value Response 0x07 Read By Type Response 0x09 Read Response 0x0b Read Brob Response 0x0d Read Multiple Response 0x0f Read By Group Type Response 0x11 Write Response 0x13 - - Handle Value Notification 0x1b Handle Value Indication 0x1d Handle Value Confirmation 0x1e
  • 66. GATT • Generic ATTribute Profile
  • 68. デバイス • Texas Instruments社 BLE Sensor Tag • コイン電池 • ボタン(2+1) • センサ – 放射温度計 – 気圧計 – 加速度 – 地磁気 – ジャイロ
  • 69. SensorTag • 各種センサーを搭載 http://makezine.com/2013/04/18/teardown-of-the-ti-sensortag/
  • 70. OSとハードウェア • OS: Linuxを使用します – ディストリビューション: Ubuntu 13.04 – 仮想環境内で使用します • ハードウェア – PC: Windows 8.0 – Bluetooth USBアダプタ
  • 71. 仮想PCの利用 • 仮想PCに関する固有の操作があります – 電源操作: ON/OFF/SUSPEND/RESUME – キーボード/マウスの解放 – ネットワーク – USBデバイスの接続
  • 73. キーボード/マウス • 起動やシャットダウン中など、キーボードや マウスが自動的に解放されない場合があ ります • Ctrl-Shiftを押すと解放されます
  • 75. ネットワーク • NATを使用します • ブラウザでインターネット接続を確認
  • 76. USB Bluetoothの接続 • 場合によりWindows側でUSBデバイスを無 効に設定しておく必要があります • ツールボタンから接続を確認します
  • 77. USB Bluetoothの確認 • lsusbコマンドで確認
  • 78. Bluez • Linux向けBluetoothプロトコルスタック • Bluez-X.Xを使用します • パッケージは予めインストール済み • ドキュメントは不足している – まとまった資料もあまり公開されていない – コマンドラインヘルプが頼り
  • 80. Bluezのコマンド • hciconfig – アダプタ設定、広告等 • hcitool – デバイスの発見、接続等 • gatttool – デバイス接続、アトリビュートの取得、書込
  • 81. hciconfig • インターフェースの動作確認 – hci0として見えていること – エラーが出ないこと $ hc iconfig hci0: Type: BR/EDR Bus: USB BD Address: 00:1B:DC:06:6E:E6 ACL MTU: 310:10 SCO MTU: 64:8 UP RUNNING PSCAN RX bytes:1712 acl:44 sco:0 events:106 errors:0 TX bytes:2393 acl:44 sco:0 commands:48 errors:0
  • 82. hcitool • アクティブスキャン $ sudo hcitool lescan LE Scan ... 90:59:AF:0A:A8:A4 (unknown) 90:59:AF:0A:A8:A4 SensorTag • パッシブスキャン $ sudo hcitool lescan --passive LE Scan ... 90:59:AF:0A:A8:A4 (unknown)
  • 83. hcitool • 接続 $ sudo hcitool lecc 90:59:AF:0A:A8:A4 Connection handle 64 • 切断 $ sudo hcitool ledc 64
  • 84. hcitool • ホワイトリスト $ sudo hcitool lewlsz White list size: 32 $ sudo hcitool lewlclr $ sudo hcitool lewladd 90:59:AF:0A:A8:A4 $ sudo hcitool lewlrm 90:59:AF:0A:A8:A4 •接続 $ sudo hcitool lecc --white Connection handle 64
  • 85. gatttool • インタラクティブにコマンド操作 $ gatttool -I -b 90:59:AF:0A:A8:A4 [ ][90:59:AF:0A:A8:A4][LE]> • 接続 [ ][90:59:AF:0A:A8:A4][LE]> connect [CON][90:59:AF:0A:A8:A4][LE]>
  • 86. gatttool • primary service [CON][90:59:AF:0A:A8:A4][LE]> primary attr handle: 0x0001, end grp handle: 0x000b uuid: 00001800-0000-1000-8000-00805f9b34fb attr handle: 0x000c, end grp handle: 0x000f uuid: 00001801-0000-1000-8000-00805f9b34fb attr handle: 0x0010, end grp handle: 0x0022 uuid: 0000180a-0000-1000-8000-00805f9b34fb attr handle: 0x0023, end grp handle: 0x002a uuid: f000aa00-0451-4000-b000-000000000000 attr handle: 0x002b, end grp handle: 0x0035 uuid: f000aa10-0451-4000-b000-000000000000 attr handle: 0x0036, end grp handle: 0x003d uuid: f000aa20-0451-4000-b000-000000000000 attr handle: 0x003e, end grp handle: 0x0048 uuid: f000aa30-0451-4000-b000-000000000000 attr handle: 0x0049, end grp handle: 0x0054 uuid: f000aa40-0451-4000-b000-000000000000 attr handle: 0x0055, end grp handle: 0x005c uuid: f000aa50-0451-4000-b000-000000000000 attr handle: 0x005d, end grp handle: 0x0061 uuid: 0000ffe0-0000-1000-8000-00805f9b34fb attr handle: 0x0062, end grp handle: 0x0068 uuid: f000aa60-0451-4000-b000-000000000000 attr handle: 0x0069, end grp handle: 0x0073 uuid: f000ccc0-0451-4000-b000-000000000000 attr handle: 0x0074, end grp handle: 0xffff uuid: f000ffc0-0451-4000-b000-000000000000 [CON][90:59:AF:0A:A8:A4][LE]>
  • 87. primary service • attr handle: 0x0001, end grp handle: 0x000b uuid: 00001800-0000-1000-8000-00805f9b34fb – 0x0001 開始ハンドル – 0x000b 終了ハンドル – 0x1800 Generic Access • 割り当てられたService番号は下記に掲載 • https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx • 0x1800 Generic Access • 0x1801 Generic Attribute • 0x180a Device Information
  • 88. gatttool • characteristics [CON][90:59:AF:0A:A8:A4][LE]> characteristics handle: 0x0002, char properties: 0x02, char value handle: 0x0003, uuid: 00002a00-0000-1000-8000-00805f9b34fb handle: 0x0004, char properties: 0x02, char value handle: 0x0005, uuid: 00002a01-0000-1000-8000-00805f9b34fb handle: 0x0006, char properties: 0x0a, char value handle: 0x0007, uuid: 00002a02-0000-1000-8000-00805f9b34fb handle: 0x0008, char properties: 0x08, char value handle: 0x0009, uuid: 00002a03-0000-1000-8000-00805f9b34fb handle: 0x000a, char properties: 0x02, char value handle: 0x000b, uuid: 00002a04-0000-1000-8000-00805f9b34fb handle: 0x000d, char properties: 0x20, char value handle: 0x000e, uuid: 00002a05-0000-1000-8000-00805f9b34fb
  • 89. characteristics handle: 0x0002, char properties: 0x02, char value handle: 0x0003, uuid: 00002a00-0000-1000-8000-00805f9b34fb •value handle: 0x00030x2a00=DEVICE NAME •0x2a00は、DEVICE NAME CHARACTERISTICSを意味している •割り当てられた番号はBluetooth Core Specification v4.0 もしくは、下記ページに記載 •https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicsHome.aspx
  • 90. ベンダー固有のUUID • 標準のCharacteristicsのBase 128bit UUID – 00000000-0000-1000-8000-00805f9b34fb • ベンダー独自のCharacteristicsは異なるBase UUID – TI : F0000000-0451-4000-B000-000000000000 • TI Sensor Tagについては下記に記載されている – http://processors.wiki.ti.com/index.php/SensorTag_User_Guide
  • 91. アトリビュートの読み出し • char-read-hnd [CON][90:59:AF:0A:A8:A4][LE]> char-read-hnd 0x0003 [CON][90:59:AF:0A:A8:A4][LE]> Characteristic value/descriptor: 54 49 20 42 4c 45 20 53 65 6e 73 6f 72 20 54 61 67 [CON][90:59:AF:0A:A8:A4][LE]> = TI BLE Sensor Tag
  • 92. アトリビュートの書き込み • char-write-req (応答有り) [CON][90:59:AF:0A:A8:A4][LE]> char-write-req 0x0026 0100 [CON][90:59:AF:0A:A8:A4][LE]> Characteristic value was written successfully [CON][90:59:AF:0A:A8:A4][LE]> • char-write-cmd (応答無し) [CON][90:59:AF:0A:A8:A4][LE]> char-write-cmd 0x0026 0100 [CON][90:59:AF:0A:A8:A4][LE]> • 注意: 16進数指定で<handle>は0xが必要 <new value>には不要(付けるとエラー)
  • 93. Notification • デバイスからの通知を受ける – SensorTagの場合、0x0026に0100, 0x0029に01を書き込むとIR TemperatureのNotificationが毎秒出る [CON][90:59:AF:0A:A8:A4][LE]> char-write-req 0x0026 0100 [CON][90:59:AF:0A:A8:A4][LE]> char-write-req 0x0029 01 Notification handle = 0x0025 value: 70 fe c0 0c [CON][90:59:AF:0A:A8:A4][LE]> Notification handle = 0x0025 value: 6c fe c0 0c [CON][90:59:AF:0A:A8:A4][LE]> Notification handle = 0x0025 value: 69 fe c0 0c [CON][90:59:AF:0A:A8:A4][LE]> Notification handle = 0x0025 value: 6a fe c0 0c
  • 94. Exercise • 各センサーの値を読み出してみる – 加速度 – ジャイロ – 地磁気 – ボタン • Notificationとして受け取ってみる