Raspberry PiでBLEビーコンのデータをNode-REDを使って受信する

はじめに

本記事では Raspberry Pi (ラズパイ)でNode-REDの機能を使い、BLEビーコンのデータを受信する方法を説明します。BLEビーコンを送信するデバイスはMicro:bit(マイクロビット)を想定していますが、eddystoneタイプのBLEビーコンであれば特にマイクロビットである必要はありません。

Node-RED プログラムの概要

こちらがBLEビーコンを受信するためのNode-REDプログラムの一例です。厳密にはBLEビーコンデータを受信するだけであれば、画面にあるBeacon Scannerのみがあれば問題はありません。

Beacon Scannerのインストール

Beacon Scannerについては node-red-contrib-beacon-scanner のノードをパレットに追加してください。追加する際、そのままパレットから追加するだけでは別のモジュールが不足しており動作しませんので、以下のサイトに従ってラズパイのシェルからモジュールのインストール、ノードのインストールを実施し、その後、パレットから追加するようにしてください。

https://flows.nodered.org/node/node-red-contrib-beacon-scanner

BLEビーコンデータのフィルター

BLEビーコンが無事受信できるようになると、無数のBLEデータが受信されます。

そのため、不要なデータを処理しなくて済むようにSwitchノードを使い、使用したいBLEビーコン以外のデータは処理しないようにフィルターをしましょう。以下はBLEデバイスの id をベースにフィルターを行う場合の設定例となります。

BLEビーコンデータの整形

BLEビーコンの単体のデータとしては以下となっています。ここから保存したい/処理したいデータ以外のフィールドは削除していきます。

私の場合は以下のようにフィールドを整理しました。

addressは BLEデバイスが持つMACアドレスになりますが、idと同じ値ですので削除します。

localName/txPowerLevelには値が入っていませんでしたので削除します。

rssi は電波強度(dbm)のことを指しています。これは残しておきます。

その他の説明については割愛しますが、私の場合以下のURLで説明した内容をベースとしたBLEビーコンデータを受信していますので、 instance のフィールドにはマイクロビットで取得可能な温度データ・照度データが含まれています。そのため、上記のような内容となっています。

受信データレートの制限

BLEビーコンのデータが意図せず、増えすぎないようにdelayノードを使って、一定時間ごとにしかBLEビーコンで受信したデータを後段のノードに渡さないようにすることがお勧めです。

その他のプログラム

その他のノードでは、以下のような機能を実装しています。

  • マイクロビットから受信した温度データ・照度データの抜き出し
  • 温度データ・照度データ、その他のデータをGoogle SpreadSheetに書き込み

Google SpreadSheetへの書き込み方法についてはこちらの記事をご参考にして頂くのが良いと思います。

最後に

本記事では、ラズベリーパイでBLEビーコンを受信するためのノード、それに関連する設定の方法について説明しました。

もし不明な点がありましたらお気軽にお問合せください。Let’s Have a Try!