発表者:トビウオ
※ロゴ作成にとある櫻花の画像生成を使用しました
Bluetoothとは?
• イヤホンやマウス・キーボードでおなじみの無線規格
• 数m〜数十m程度の距離でデータをやり取りできる
• WiFiよりは低速だが、その分消費電力が低い
• より低消費電力に特化した規格(BLE)も存在する
※画像はWikipediaから。ライセンスはPD
BLEとは?
• 速度や有効距離を妥協して、その分消費電力を節約する
ことに特化した「Bluetooth Low Energy」の略
• 性質上、IoT方面でしばしば採用される
• 計測センサーやヘルスケア機器など
• 有名所ではPokémon GO Plusにも使われている
https://www.pokemongo.jp/plus/より引用
BLEで通信しよう
• BLEでは、「セントラル」の機器と「ペリフェラル」の機
器との間で通信を行う(ブロードキャストモードもあるが説明を略す)
セントラル ペリフェラル
(通信を制御する) (情報を発信する)
BLEの接続手順
ペリフェラル
セントラル
アドバタイズパケット
↑ペリフェラルから発信される
アドバタイズパケットをスキャンし、
どういったデバイスがあるかを知る
※画像素材はいらすとやから
BLEの接続手順
セントラル ペリフェラル
ペリフェラルに対して
コネクション要求を送る
応答を返し、
コネクションを確立する
コネクション中は
アドバタイズパケットを
送信しない
BLEの接続手順
セントラル ペリフェラル
セントラルからの要求に答える
指定したキャラクタリスティックに
読み込み・書き込み・通知要求などを送る
サービス(大分類) キャラクタリスティック(小分類)
• UUID • UUID
• ハンドル
• 値
• パーミッション
• プロパティ
• デスクリプタ
UUIDについて
• BLEにおける「サービス・キャラクタリスティックの仕様
」は、Bluetooth SIGで規格化されているものが多い
• 例えば心拍計は「Heart Rate」という名前のサービス
(UUID:0x180D)として定義されており、以下のキャラク
タリスティックが定義されている
• 心拍数を返す(UUID:0x2A37)
• 装着するべき位置を返す(UUID:0x2A38)
• 機器に制御指示を送るための(UUID:0x2A39)
パターン
UUIDについて
• 前述の心拍計の規格「Heart Rate」は「Heart Rate
Profile(HRP)」とも呼ばれており、HRP対応機器なら同じ
手順でデータを読み出すことができる
• ただ、機器に独自サービスが仕込まれていることもよく
あり、機器によってはSDK経由でアクセスできたりする
• 「0x180D」のように4桁しかないのは短縮形で、「
xxxxxxxx-0000-1000-8000-00805f9b34fb」のxxxx部分に
当てはめれば本来の128bit UUIDになる
※機器の独自サービスの場合、短縮形が無いこともある
プログラムからの利用
• AndroidやiOSやLinuxでは、ライブラリを利用することで
セントラル・ペリフェラルどちらの役割も持てる
• Windows・Macの場合、組み込み機器への利用頻度の問題
なのか、セントラルの役割しか持てないライブラリが多
い
• Pythonから使用する際に使用するライブラリとしては、
pybluezやblyepyやBluefruitLEなどが有名
BLEの注意点
• アドバタイズパケットは誰からでも読めるので、所有
者以外からペリフェラルにアクセスされる可能性があ
る
• 同じ理由により、機器の仕様もある程度読み取れる。
Bluetooth SIGで規格化された方のサービスなら、サー
ドパーティ製アプリからアクセスも可能
※右記のアプリケーションの場合、
HRP対応機器からデータを読み出せる
BLEの注意点
あるスマートタグ(BLE使用)のレビュー
Androidの場合、Android 6.0以降だと
BluetoothだけでなくGPSをON
にしないとデバイスをスキャンできない
(ペアリングすればGPS権限は不要)
「APIの都合」をユーザーに説明
するのがなかなか難しい……
参考資料
• アプリケーション開発視点でのBLE通信 - Qiita
• Viewer | Bluetooth Technology Website Name: Heart Rate

とある小型の青歯規格(ブルートゥース)