BLEタグは単なる位置特定デバイスではありません。センサを取り付ければ、配線なしで温度・湿度・動き・光を報告するワイヤレスセンサノードになります。本記事では、コイン電池を drain せずにタグからセンサデータをサンプリング・保存・報告する方法を解説します。

タグで検知できるもの

  • 温度/湿度(SHTxx 相当、読取り時 ~1〜5 µA、他はスリープ)
  • 気圧(高度計)
  • 3 軸加速度(動き/落下/衝撃)
  • 環境光、磁気、ガス

各センサは*読取りエネルギー*に加え、値を送る*無線エネルギー*を追加します。

サンプリング周期

1 秒ごとのセンサ読取りは安全に見えますが電池を食います。周期は目的に合わせます。

  • コールドチェーン温度:5〜15 分ごと記録、閾値超えでアラート
  • 動き/ドア事象:イベント駆動、他はスリープ
  • 環境トレンド:1〜10 分で十分

ローカル保存

タグは常時アップリンクできないためローカルにバッファします。直近 N サンプルのリングバッファ(FIFO)が接続失敗に耐え、次回接触時にゲートウェイがバックログを取得します。32〜256 サンプルが典型的です。

報告戦略

  • 定期:関係なく T ごとに送信。単純で予測可能、変化がなくても無駄。
  • イベント駆動:閾値超えや動きのみ送信。電池に最適。
  • デルタ報告:デルタを保存し、完全サンプルは時折のみ再同期送信。

データ圧縮

32 サンプルバッファで float32 × N は無駄です。次を使います。

  • デルタ符号化:`d_i = sample_i − sample_{i-1}`(小整数)
  • int8/int16 へオフセット/ゲインでスケーリング
  • 複数チャネルをビットパック

16 サンプル float32 温度ログ(64 B)は ~16〜20 B に。

電力の数学

1 報告サイクル:センサ読取り ~5 µA·2 ms + 無線 TX ~8 mA·20 ms + MCU ~3 mA·50 ms。

温度を 10 分ごと読み、BLE で 1 時間ごと報告するタグの場合:

  • 読取り:5 µA × 2 ms × 6 = 60 nAh/サイクル
  • TX:8 mA × 20 ms = 44 nAh
  • 合計 ≈ 100 nAh/サイクル × 24 = 2.4 µAh/日 → CR2032(225 mAh)で紙上 20 年以上(実際は自己放電とディープスリープ漏れが支配、~2〜5 年)

BLE での報告

2 通り:

1. 接続 GATT notify:タグが接続し Sensor Notify を送り切断。最も柔軟、最も高エネルギー。

2. 応答付き周期広告(PAwR):タグが周期スロットでセンサデータを放送、ゲートウェイが応答。多数タグで最低エネルギー。

ゲートウェイ取り込み

Beacon と同じパイプライン:ゲートウェイが広告/notify を聞き、重複排除+タイムスタンプ+集約し MQTT で転送。タグはほとんどの報告で*聞かれる*だけで接続不要です。

用途

  • コールドチェーン(医薬/食品):温度+ドア開イベント
  • 資産状態:故障前の振動
  • 環境:倉庫の湿度、オフィスの光

チェックリスト

  • [ ] 周期は用途に合わせる(「毎秒」ではない)
  • [ ] 接続失敗用リングバッファ
  • [ ] 可能ならイベント駆動
  • [ ] デルタ+int スケーリング圧縮
  • [ ] PAwR または短い接続ウィンドウ
  • [ ] ゲートウェイ側重複排除+タイムスタンプ
  • [ ] 電池モデルに自己放電を含める

このバランスこそが BLEタグ の全てです。