Bluetooth LowEnergy(以下BLE)を使い、1対1の通信を実装するための備忘録です。
(スマートフォン同士での通信を想定しています。)

ただ、検索してみると詳しい解説やサンプルコードも出てきますし、
ソースコードを載せて1つずつ解説していては、かなりの長文になってしまいます。
そうなってしまうと読むのも大変ですし、何より書くのが大変です。
なのでこの記事では具体的な実装方法などは省き、全体の流れを書き記す程度にしておきます。

BLE通信の流れ

  1. 通信する相手と接続
  2. データのやり取り

……アバウトすぎました。もう少し詳しく見てみましょう。

  1. ペリフェラルから、アドバタイジングパケットの発信を開始する
  2. セントラルから、アドバタイジングパケットを発信しているペリフェラルを探す
  3. セントラルから、見つけたペリフェラルへ接続する
  4. データのやり取り
    • セントラルから、ペリフェラルの持つデータを読み込む
    • セントラルから、ペリフェラルの持つデータに書き込む
    • ペリフェラルの持つデータに変更があった時、それをセントラルへ通知する

以上がBLE通信の流れです。

この記事で書きたかったことはこれで終わりなのですが、大変なことに知らない横文字が3つも出てきています。
これでは何がなんだかわかりません。

ペリフェラルセントラル、そしてアドバタイジングパケットとは一体何者でしょうか。
この3つについての簡単な説明と、
ついでに、「キャラクタリスティック」と「サービス」というものについての説明も書いておきます。

ペリフェラルとセントラル

「ペリフェラル」と「セントラル」とは、BLEで通信する機器が担う役割の名前です。
BLEで通信する機器は「ペリフェラル」と「セントラル」の2つの役割に別れる必要があります。
それぞれ以下のような役割です。
ペリフェラル :データを持つサーバーのような役割
セントラル   :そのデータを読み込んだり、書き込んだりするクライアントのような役割
大体このようなイメージです。正確には違うのかもしれませんがとりあえずそう思っておきましょう。

 

 アドバタイジングパケット

アドバタイジング、直訳すると広告という意味になります。
セントラルに見つけてもらうために、ペリフェラルが発信し続ける小さなデータのことです。
ペリフェラルの名前や、持っているデータの情報などが入っています。

 

キャラクタリスティックとサービス

先ほどの“BLE通信の流れ”の中で言うところの、“ペリフェラルの持つデータ”というのが「キャラクタリスティック」です。
BLEでは、このキャラクタリスティックをセントラルから読み込んだり書き込んだり、
あるいはペリフェラルからセントラルへ通知することでデータのやり取りを行います。

そしていくつかのキャラクタリスティックを一纏めにしたものが「サービス」です。

例えば、位置情報サービスがあるとした時、その中には
・緯度情報
・経度情報
・向いている方角
などのキャラクタリスティックがあり、

傾きセンサーのサービスがあれば、
・センサーのON OFF情報
・傾き具合の情報
・センサーの種類
などのキャラクタリスティックがあるといった具合です。
つまり、サービス→キャラクタリスティックという階層構造になっていることになります。

キャラクタリスティックとサービスは、それぞれ一意な番号(UUID)で識別されます。