[micro:bit] 温度データと照度データをBLEビーコンを使って送信する

はじめに

本記事ではmicro:bit(マイクロビット)からBLEビーコンにて温度データと照度データを送信する方法について説明します。

GATT(Generic Attribute Profile)という技術で温度データを送信する方法は非常に簡単ですが、こちらではマイクロビットが持つGATTの機能を使わずに、マイクロビットが持つ任意のデータを送信する方法について解説します。

実現方法

サンプルプログラム

最初にサンプルのプログラム例を以下に示します。

なんとマイクロビットのBLEビーコンのデータの中でもネームスペース、インスタンスのフィールドが任意の値を書き込むことが出来るのです。マイクロビットプログラムの無限の可能性!

こちらのプログラムでは4byteあるネームスペースのフィールドに"ambi"をアスキーに変換した値(0x616D6269)を代入しています。(マイクロビットのプログラム中では16進数が扱えませんので、16進数の0616D6269を10進数にした1634558569を書き込んでいます。)

インスタンスのフィールドもネームスペースと同様に、4byteありますのでこちらには温度データと照度データを代入しています。そのまま入れてしまっては受信側でどれが温度データで、どれが照度データかがわからなくなってしまいますので、以下のような計算式としています。

温度データ x 1000 + 照度データ

こうすることで、BLEビーコンを受信したラズベリーパイ側で温度データと照度データの分離が可能となります。例えばラズベリーパイで受信したデータが 26,050 であったとすると、

温度:26℃、照度:50

という風に判別が可能になります。

BLEの受信データ

実際にこれを動かして、ラズベリーパイで受信したBLEデータを確認してみると以下のようになっています。

id/addressについてはマイクロビット毎に固有の識別IDが振られていると考えてください。

rssi はBLEの電波の受信強度(dbm)となり、値が大きいほど十分な電波の強度と考えられます。

beaconType はBLEビーコンの種別となります。マイクロビットはeddystoneと呼ばれるタイプのBLEビーコンを送信することが可能です。

eddystonUid の中には namespace(ネームスペース)やinstance(インスタンス)のフィールドがあり、先ほど設定したマイクロビットのBLE送信データが格納されていることがわかるかと思います。

lastSeen のフィールドはBLEビーコンを受信した際の時刻です。Unix Timeの表現になっているので、Unix Timeを変換するサイトなどで実際の日時に変換してあげることが可能です。

最後に

市販のBLEデバイスではここまで自由にBLEで送信するデータをカスタマイズすることは困難かと思います。今回は温度データ、照度データのみを送信する方法をご紹介致しましたが、マイクロビット自体には他に加速度センサやボタンが付いていますので、そういったデータをBLEビーコンに乗せてラズベリーパイに送信するといったことも可能になります。

皆さんもぜひ、トライしてみてください。