micro:bit の BLE ビーコンで温度・照度データを送信する — Eddystone UID のカスタムフィールド活用

2026年6月5日

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 に温度と照度を多重化して書き込んでいます。

MakeCode で BLE ビーコンの namespace と 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 構造になっています。

Raspberry Pi で受信した 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 側で受信・分解する手順を解説します。