SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Webアプリケーション開発技術の新潮流スタディーズ

IoT技術の代表「BLE:Bluetooth Low Energy」の動作原理を理解してみよう【前編】

Webアプリケーション開発技術の新潮流スタディーズ 第6回


  • X ポスト
  • このエントリーをはてなブックマークに追加

Controller層

周波数チャンネル

BLEは2.4GHz周波数帯を利用します。この周波数帯はISM(Industry Science Medical)バンドと呼ばれ、産業・科学・医療などあらゆる用途で利用されているために、電波干渉が非常に起きやすくなっています。Wi-Fiもこの周波数帯です。

BLEは2.4GHz~2.4835GHzの80MHzにわたる周波数帯を2MHz幅の40チャンネルに分け、毎秒1600回のチャンネル切り替えを行いながら通信します。これを周波数ホッピング方式といいます。 これにより、特定のチャンネルで通信しにくい状況でも、一定時間後にチャンネルが切り替わればデータ通信が継続できます。この特徴により、BLEは他の規格よりも比較的干渉に強いとされています。

40チャンネルのうち37、38、39チャンネルはAdvertising Channel と呼ばれ、デバイスの発見および接続開始のために用いられます。それ以外はData Channnel と呼ばれ、接続後のデータ通信に用いられます。Advertising Channelはいち早くデバイスを発見できるように、Wi-Fiでよく用いられる周波数(1、6、11チャンネル)を避けるように配置されています。

Advertising Channel。Wi-Fiでよく用いられる周波数(1、6、11チャンネル)を避けるように配置されている
Advertising Channel。Wi-Fiでよく用いられる周波数(1、6、11チャンネル)を避けるように配置されている

ネットワークの形成

BLEでは、デバイス同士はスター型のネットワークを形成します。中心ノードはCentral、端末ノードはPeripheralと呼ばれます。例えば、スマートフォンが複数の周辺機器に接続する場合、スマートフォンがCentralで周辺機器がPeripheralです。

Bluetoothの仕様上では、Centralが同時に接続できるPeripheralの数は規格上231(約21億)となっています。[1]

一般的に、Centralはスマートフォンやタブレットなどのデバイスに実装されることが多いため、充電する機会は頻繁にあると考えられます。一方、Peripheralはセンサを搭載した機器を固定された位置に取り付けることがほとんどなので、あまり頻繁に電池交換することができません。電力消費はPeripheralがシビアだと考えるのが良いでしょう。

BluetoothのCentral(中心ノード)とPeripheral(端末ノード)
BluetoothのCentral(中心ノード)とPeripheral(端末ノード)

スマートフォンが周辺機器に接続する場合、周辺機器(Peripheral)はスマートフォン(Central)に存在を認知させる必要があります。このプロセスをAdvertisingと呼び、ここでのスマートフォンと周辺機器の役割をそれぞれScannerAdvertiserといいます。

[1]: 実際にはBLEを実装するOSなどの制約を受けます。例えば、iOSでは最大10ノードまでです。

デバイス発見から接続までのプロセス

デバイス発見から接続までの状態遷移を次図に示します。CentralはStandbyからScanningとInitiatingを経てConnection(Master)に、PeripheralはStandbyからAdvertisingを経てConnection(Slave) になります。

デバイス発見から接続までの状態遷移
デバイス発見から接続までの状態遷移

AdvertisingとScanning

Advertiserは、Advertising Channelを使ってAdvertisingパケットを定期的に周囲に送信します。 Advertisingには37、38、39のチャンネルが全て使われます。 一方、Scannerは、Advertising Channelへのパケット受信を一定周期で調べ、両者のタイミングが合うとScannerはAdvertiserを発見することができます。

AdvertisingとScanning
AdvertisingとScanning

AdvertisingとScanningの頻度が高いほど早く発見できますが、その分だけ電力消費は大きくなります。Peripheralにとって電波の送受信は電力消費の中で大きなウェイトを占めるため、実質的にこの頻度が電池の寿命を決めることになります。開発者はアプリケーションの要求に応じて適切にこの値を設定する必要があります。

主要なパラメータは以下のとおりです。

AdvertisingとScanningの主要なパラメータ
パラメータ 説明 設定範囲
advInterval AdvertiserがAdvertisingパケットを送信する周期 20ミリ秒 ~ 10.24秒
scanInterval ScannerがAdvertisingパケットを受信する周期 20ミリ秒 ~ 10.24秒
scanWindow Scannerが1回のパケット受信にかける時間 20ミリ秒 ~ 10.24秒

Advertisingパケットの種類と通信フロー

スキャンには「Active Scan」と「Passive Scan」があります。Active Scanの場合はAdvertisingパケットを受け取った後、追加情報を取得するためにAdvertiserにリクエストを送ることができます。

次図はAdvertising開始から終了までの通信フローです。

Advertising開始から終了までの通信フロー
Advertising開始から終了までの通信フロー

図中の赤文字はAdvertisingパケットの種類です。 Advertising中にやり取りされるパケットにはいくつかの種類があります。例えば、以前接続したことのあるデバイスにはADV_INDの代わりにADV_DIRECT_INDが用いられ、スキャンを省略します。また、位置ビーコンのように接続を確立しなくてもAdvertisingのみで情報発信できる場合には、ADV_NONCONN_INDやADV_SCAN_INDが使われます。

Advertising中にやり取りされるパケットの種類
種類 スキャン可能 接続可能
ADV_IND
ADV_DIRECT_IND ×
ADV_NONCONN_IND × ×
ADV_SCAN_IND ×

Advertisingパケットの中身

Advertisingパケットの中でやり取りされるデータには「Advertiserのアドレス(AdvA)」と「Advertising Data」があります。

AdvAはPublic Device AddressとRandom Device Addressのどちらかです。 Public Device Addressは、Bluetooth SIGが企業ごとに発行したIDと、企業が製品ごとに割り振るIDを組み合わせた一意の値です。Random Device Addressはプライバシーを守るためにランダムで生成される値です。

Advertising Dataには次表のようなものがあります。

Advertising Data
種類 説明
Flags Bluetoothの規格(LE/BR/EDR)に関する情報
Service UUIDs デバイスが提供する機能(Service)のID。詳しくは後述
Local Name デバイス名
Tx Power Level 送信電力。値の範囲は-127 ~ +127dBm。この値と受信信号強度(RSSI)の差から伝播損失を求め、距離の推定に使うことができる

次のページ
Controller層(続き)

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Webアプリケーション開発技術の新潮流スタディーズ連載記事一覧

もっと読む

この記事の著者

鳥居 陽介(株式会社ワークスアプリケーションズ)(トリイ ヨウスケ)

株式会社ワークスアプリケーションズ所属。イケてるアプリケーションを死ぬほど楽に作るために研究を続ける日々。社内での立ち位置は「フロントエンドのナウい人」。最近エバンジェリストという肩書きが付いた。趣味は作曲とスノーボード。 Blog: http://jinjor-labo.hatenablog.com/ ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9287 2016/06/14 15:17

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング