【紹介動画も公開中】ムセンコネクト著書『Bluetooth無線化講座―プロが教える基礎・開発ノウハウ・よくあるトラブルと対策―』絶賛発売中

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

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

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

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

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

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

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

目次

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

ムセンコネクトでは、長年センサ機器を作っていたお客様から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初心者でもセンサ機器を簡単に作れるようにムセンコネクトが独自に規定した「オープンセンササービス」と呼ぶ通信仕様です。

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

また、この仕様ではムセンコネクトが用意した「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に0xFC、#3に0xBEが入ります。

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バイトと規定されているので、それに収まる範囲で設定する必要があります。

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

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

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

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

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

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

 

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