【重要】LINBLE-Z2量産販売開始およびLINBLE-Z1使用部品変更予定のお知らせ

BLEによるセンサデータ送信の仕組みとビーコンフォーマット「オープンセンササービス」の仕様解説【第2回】

こんにちは。ムセンコネクト三浦です。

今回は「【連載企画】センサ搭載BLEビーコンと受信アプリの作り方」の第2回目、BLEによるセンサデータ送信の仕組みとビーコンフォーマット「オープンセンササービス」について解説したいと思います。

BLEセンサ機器を作ろうと思った時、センシングしたデータをどのようにスマートフォンに伝えるのが良いか悩んでしまいますよね。

BLEの仕様をちゃんと理解していないと、Bluetoothの仕様に違反したデータフォーマットになってしまったり、相手機器との通信がうまくいかなくなってしまうことがあります。

とはいえ、BLEの仕様をちゃんと理解して、通信仕様を決めるのはかなり大変です。BluetoothのCoreSpecは難解で、知りたいことがどこに書いてあるのか見つけるだけでも大変な作業になります。

そこでまずはBLEによるセンサデータの送信方法を2種類紹介し、その後ムセンコネクトが規定・公開した「オープンセンササービス」の通信仕様について詳しく解説します。

【この記事の要点】

オープンセンササービスは、センサ値をBLEの「アドバタイズ(ビーコン)」に載せて発信するための共通フォーマットで、ムセンコネクトが仕様を無償公開しています。受信データのフォーマット(BDアドレス/UUID/データ種別)を理解すれば、温度・湿度などのセンサ値を読み取れます。本記事は受信の仕組みと仕様を解説します。受信を自作せず手早く確認したい場合は、USBに挿すだけで受信データを1行ずつ出力する『ビーコンドングル』が近道です。

目次

BLEによるセンサデータの送信方法

BLEでセンサ値を送る方法は大きく2つ。接続せず一斉配信する「ビーコン(アドバタイズ)型」と、機器同士を接続する「通信接続型」です。

ムセンコネクトでは、長年センサ機器を作っていたお客様からBLE対応したいというご相談を沢山いただきます。

元々、機器のLCD画面にセンサ値を表示していたものや、有線を使ってセンサ値を送信していたもの、BLEではない別の無線通信でセンサ値を送信していたものがあり、これをスマートフォンやタブレットでデータを確認できるようにしたいのでBLE通信に対応したい、というお話です。

お客様の利用しているセンサの種類は、温度センサや湿度センサ、圧力センサ、CO2センサなど様々です。

BLEを使ってセンサ値を送信する方法には大きく2つの方式があります。

  1. ビーコンセンサ型
  2. 通信接続型

ビーコンセンサ型

ビーコンセンサ型は、通信接続をせずにブロードキャストでセンサデータを送信する方法です。シンプルにリアルタイムにセンサ値を送信するのに向いています。

メリット

・構成がシンプルで考慮すべき点が少なくて済む。
・リアルタイムにセンサ値を送信できる。
・発信頻度を減らすことで簡単に省電力化できる。
・エネルギーハーベストのような不安定な電源状況でも利用しやすい。
・受信機が複数あっても同じようにデータを受信することができる。

デメリット

・沢山のデータを送信するには向かない。
・受信側は常に受信待ちをしておく必要があり、省電力にしづらい。
・受信側がすべてのデータを受信できる訳では無いので、データが抜けて届く可能性がある。
・第3者がデータを盗み見しやすい。

通信接続型

通信接続型は、1対1のBLE通信接続をしてから、接続した相手機器にセンサ値を送信する方法です。センサ機器側で予めロギングした情報を後から送信する用途に向いています。

メリット

・高速に通信できる為、センサ機器側でロギングした情報を後から送信する用途にも利用できる。
・(BLE接続中は)リアルタイムにセンサ値を送信できる。
・BLE通信におけるデータの抜けが発生しにくい。
・ペアリングを利用すれば第3者がデータを盗み見しづらい。
・受信機から送信機にもデータを送信できるので、送信機の動作パラメータの変更の仕組みを取り入れやすい。

デメリット

・ビーコン型と比べて、BLE接続通信に関連して考慮すべき点が増えて複雑になる。
・送信機は複数の受信機を同時に相手にすることができない。
・受信機もBLE接続台数に制限があり、複数の送信機を同時に相手にするには限界がある。

どちらもメリット、デメリットがあるのですが、システム全体の仕様が固まっていないようでしたら、まずは簡単な方法としてビーコンセンサ型を試作してみて、必要に応じて通信接続型を検討してみることをおすすめします。

今回の企画ではビーコンセンサ型でのデータ送信について解説します。

ビーコンセンサ型の課題

ビーコン型は手軽な反面、受信側の実装やフォーマットの共通化が課題でした。受信を自作せず、既製の受信アダプタで確認する方法もあります。

ビーコンセンサ型はシンプルな方法なのですが、いざ作ろうとした時にBLE初心者に立ちはだかる壁があります。

それは、ビーコンのデータフォーマットの仕様についてです。

BLEビーコンの代表的なフォーマットとしてAppleが提唱している「iBeacon」がありますが、「iBeacon」は固定のIDデータを発信する内容になっており、常に変化するセンサデータを送信する用途には適していません。

センサ機器が発信するビーコンのデータフォーマットを自ら規定するには、Bluetoothのアドバタイズ仕様を理解しないと規定することができません。BLE初心者が自信を持ってデータフォーマットを規定するにはハードルが高いようです。

また、ベンダーが自由に情報を設定できるデータフォーマットには、「Company ID」を利用する方法と「16bit UUID」を利用する方法があります。どちらもBluetooth SIGへ申請して、特別な番号を割り当ててもらう必要があります。この申請もBLE初心者にはハードルが高いものです。

「Company ID」と「16bit UUID」については、それぞれ以下の記事を参考にしてください。

オープンセンササービスの解説

オープンセンササービスは、センサ値をBLEアドバタイズで発信するための共通フォーマットで、ムセンコネクトが仕様を無償公開しています。

そこでご紹介したいのが、BLE初心者でもセンサ機器を簡単に作れるようにムセンコネクトが独自に規定した「オープンセンササービス」と呼ぶ通信仕様です。

オープンセンササービスは多様なセンサ種別に対応し、リアルタイムに変化するセンサ値を送信するビーコン機器に最適なデータフォーマットです

また、この仕様ではムセンコネクトが用意した「16bit UUID」を利用できるため、苦労して「Company ID」や「16bit UUID」を取得申請する必要もありません。

オープンセンササービスの仕様書は下記ボタンリンクからダウンロード可能です。

仕様書の補足説明

受信側は、決められたフィールド構成(種別・データ)に沿ってアドバタイズを解析し、温度・湿度などのセンサ値を取り出します。

オープンセンササービスの仕様書にはセンサデータをビーコン発信する際のデータフォーマットが記載されています。ここでは仕様書の内容を補足して説明していきたいと思います。

アドバタイズ(ビーコン)発信する場合、BLEでは下記のようなデータ構造になります。開発者が通常意識するのは色がついたAdvDataの内容になります。

AdvDataは、AD Structureという独立した構造に分けることができます。
AD Structureは1つでも良いですし、複数個でも良いことになっています。
オープンセンササービスの仕様書では、1つのAD Structureについて規定しています。

2章のアドバタイズデータフォーマットに規定しているデータフォーマットがAdvDataに相当し、1つのAD Structureで構成されています。

Offset #0には、Lengthが規定されています。AD TypeとAD Dataを合わせたデータサイズが入ります。(この例では、AD TypeとAD Dataを合わせた13バイトがLengthとなります。)

Offset #1にはAD Typeとして「Service Data 16-bit UUID」を表す0x16固定値が入ります。

Offset #2~3には、ムセンコネクトが取得した「Open Sensor Service」を表す16bit UUIDが入ります。(0xFCBE固定値)
Bluetoothの公式規格で規定されている部分なのでリトルエンディアンになります。#2に0xBE、#3に0xFCが入ります。

Offset #4は、将来拡張用の1バイトです。今は気にせず0x01固定値を入れます。

Offset #5~8には、個体識別番号が入ります。シリアル番号や、製造番号と呼んだ方がわかりやすい方もいるかと思います。
センサ個体を区別するために利用するので、できるだけ重複しないようにする必要があります。センサ機器に同じ番号を記載したシールを貼り付けるとわかりやすくなります。
オープンセンササービスでは個体識別番号の付与の仕方については特に規定しません。

一応例示すると以下のような付与の仕方があります。

  • センサ個体毎に1番から順番に番号を付与する。
  • 先頭1バイトを機種番号として固定値を付与し、後ろ3バイトを1番から順番に付与する。
  • 4バイトのランダム値を付与する。
  • Bluetoothデバイスアドレスの下4桁を代入する。

個体識別番号はビッグエンディアンで記載します。個体識別番号が0x12345678の場合は、#5に0x12、#6に0x34、#7に0x56、#8に0x78が入ります。
※注意:個体識別番号は、自由に設定できることにしていますので、世の中に重複する番号が存在するかもしれません。A社が作った温度センサに00000001番を付与したとして、B社も気圧センサに00000001番を付与するかもしれません。

Offset #9~#11、Offset #12~#13はそれぞれ独立したデータ構造となっています。

例では、Offset #9は「温度(2byte)」を意味するデータ種別となっています。続くOffset #10~#11に、2byteの温度データが入ります。

Offset #12は「電池電圧(1byte)」を意味するデータ種別となっています。続くOffset #13に、1byteの電池電圧データが入ります。

データ構造は「4章 データ構造定義」に規定したデータ種別を選択して自由にデータ構造を設定することができます。

データ構造は1つでも構いませんし、複数個設定しても構いません。
※注意:AdvDataが最大31バイトと規定されているので、それに収まる範囲で設定する必要があります。

よくある質問(FAQ)

BLEアドバタイズのフォーマットは?

BLEアドバタイズパケットは、長さ・AD種別・データの組(AD構造)を複数連ねた構造です。ビーコンはこの中にUUIDやセンサ値を載せます。受信側はこのフォーマットに沿って解析し、必要なデータを取り出します。1パケットの有効データは基本31バイトです。

BLEでセンサ値を送信(発信)するには?

センサ値をアドバタイズパケットのデータ領域(Manufacturer Specific Data等)に載せて発信します。接続不要で周囲へ一斉配信でき、複数の受信機で同時に受け取れます。

BLEセンサ/ビーコンのデータを受信して読み取るには?

受信機でアドバタイズを取得し、フォーマットに従って解析します。自作せずに確認するなら、USB受信アダプタが便利です。ムセンコネクトの『ビーコンドングル』は受信データ(BDアドレス・UUID・RSSI等)を仮想COMポートに1行ずつ出力するため、そのままパースできます。

オープンセンササービス(オープンセンサビーコン)とは?

センサ値をBLEアドバタイズで公開する、ムセンコネクトが仕様を無償公開しているセンサビーコンのフォーマットです。決まった形式に沿って値を載せるため、受信側は仕様に従って温度・湿度などを取り出せます。『ビーコンドングル』でそのまま受信・確認できます。

iBeaconのフォーマットとは?

iBeaconはAppleのBLEビーコン規格で、アドバタイズ内にUUID・Major・Minor・送信電力を載せる決まった形式です。受信側はこの並びを読み取って、どのビーコンがどの強度で届いたかを判定します。

受信データの出力例を知りたいです。

『ビーコンドングル』では、受信した各ビーコンのBDアドレス・UUID・RSSI等が1行のテキストで仮想COMポート(230kbps)に出力されます。Windows/Raspberry Piで、ターミナルや簡単なスクリプトからそのまま取り込めます。(※厳密な出力書式は製品資料/実機でご確認ください)

オープンセンサビーコンの展望

ムセンコネクトではより多くの方にBLEを利用していただきたいと考え、「オープンセンササービス」の仕様を公開し、誰でも無償でご利用いただけるようにしました。

現在規定していないセンサ種別についても、随時追加していくつもりです。「こんなセンサ種別も追加して欲しい」というご意見もお待ちしております。

本連載では「オープンセンササービスを利用したビーコンを受信して、センサ値を表示するWindowsアプリ」について解説しますが、今後はスマートフォンアプリも準備する予定です。

「オープンセンササービス」の仕様についてのご意見や不明点はムセンコネクトまでお気軽にお問い合わせください。

次回は「センサ搭載BLEビーコンの作り方(ハードウェア編)」をお届けします。

受信を手早く確かめるなら『ビーコンドングル』

受信アプリを一から開発しなくても、パソコンやRaspberry PiのUSBに挿すだけで、受信データ(BDアドレス・UUID・RSSI)が1行ずつ出力されます。オープンセンササービスやiBeacon、各種BLEビーコンに対応。Bluetooth認証はムセンコネクト取得済みで、お客様の認証取得は不要。まずは評価機の貸出でお試しいただけます。

▶ 評価機の貸出・技術相談はこちら

製品の詳細を見る:iBeacon・各種BLEビーコン受信アダプタ『ビーコンドングル』

よろしければシェアをお願いします
目次