micro:bit の BLE ビーコンで温度・照度データを送信する — Eddystone UID のカスタムフィールド活用
micro:bit で温度・照度データを Raspberry Pi に送りたい——GATT を使う方法は簡単ですが、ここでは GATT を使わずに Eddystone UID の namespace・instance フィールドにカスタムデータを格納して BLE ビーコンとして送信する方法を解説します。この方法を使うと、受信側で任意のデータを識別できるため、温度・照度以外の複数センサーデータにも応用できます。
目次
Eddystone UID のカスタムフィールドにデータを格納する仕組み
micro:bit が送信できる BLE ビーコンの種別は Eddystone です。Eddystone UID フォーマットには以下の 2 つのカスタマイズ可能なフィールドがあります。
- namespace(ネームスペース):4 バイト。デバイスの識別やデータの種別を示すマーカーとして使います
- instance(インスタンス):4 バイト。実際のセンサー値など任意のデータを格納します
サンプルプログラム:温度と照度を 1 つのフィールドに多重化
以下は MakeCode で作成したサンプルプログラムです。namespace に “ambi" の ASCII 値を格納し、instance に温度と照度を多重化して書き込んでいます。

namespace のフィールドには “ambi" を ASCII に変換した値(0x616D6269 = 10 進数 1634558569)を格納しています。MakeCode では 16 進数を直接扱えないため、10 進数に変換した値を使います。
instance フィールドには、温度と照度を 1 つの整数に多重化して格納します。
instance = 温度データ × 1000 + 照度データ
例えば Raspberry Pi で受信した instance の値が 26050 の場合:
- 温度:26050 ÷ 1000 の整数部分 = 26 ℃
- 照度:26050 mod 1000 = 50
受信データの構造:Raspberry Pi 側で確認できるフィールド
Raspberry Pi(Node-RED)で受信した BLE ビーコンデータは以下のような JSON 構造になっています。

- id / address:micro:bit 固有の識別 ID(デバイスごとに異なる)
- rssi:BLE の受信信号強度(dBm)。値が大きいほど受信状態が良好
- beaconType:BLE ビーコンの種別。micro:bit は
eddystone - eddystoneUid.namespace:送信側で設定した namespace 値(今回は “ambi" の ASCII 値)
- eddystoneUid.instance:温度・照度を多重化した値
- lastSeen:受信時刻(Unix タイムスタンプ)
まとめ:Eddystone UID のカスタムフィールドを使うメリット
- GATT サービスを使わずに任意のデータを BLE で送信できる
- namespace でデバイス識別、instance でセンサー値を格納する構造が明確
- 整数値の多重化(
温度 × 1000 + 照度)で複数センサーを 1 フィールドに収められる - 加速度センサーやボタンの入力値も同様の方法で送信できる
次のステップとして、送信したデータを Raspberry Pi 側で受信・分解する手順を解説します。






ディスカッション
コメント一覧
まだ、コメントがありません