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タグ の全てです。
