Wio BG770A の PSM とモジュール電源OFF:「消費電流に差はあるか?」を実測

前回の記事で、Wio BG770AをLTE-Mで10秒間隔通信させた場合の消費電流を測定したところ、電池寿命が2日程度という結果になりました。

原因はLTE-Mモジュールが常時オンだったためです。

今回は、よりリアルな測定環境を想定し、モジュールを省電力状態にする2つの方法——PSM(Power Saving Mode)とモジュール電源OFF——で実際に消費電流を比較しました。

結論

  • PSMとモジュール電源OFFで消費電流に大きな違いはない。
  • PSMかモジュール電源OFFにすることで消費電流は80μA程度まで激減。
  • PSMとモジュール電源OFFの違いはモバイルネットワークでの見え方。

コード

今回使用したサンプルコードはGitHubに置いてあります。

iotbuilds-samples/wio-bg770a-energy-saving at main · oskar-iot/iotbuilds-samples

IoT関連コード置き場 (https://www.iotbuilds.com/ で解説). Contribute to oskar-iot/iotbuilds-samples development by creating an account on GitHub.

github.com

eDRXとPSM:LTE-Mの2つの省電力モード

LTE-Mは、スマートフォンで使われるLTE通信をIoTデバイス向けに最適化した仕様です。

LTE-Mには、消費電流を下げるための仕組みが主に2つあります。

eDRX(extended Discontinuous Reception)

eDRXは、ネットワークからの受信チェック(ページング)の間隔を延ばす技術です。

IoTデバイスもスマートフォンも同様ですが、デバイスは使っていない期間はIdle状態となります。 Idle状態になることで消費電力を抑え、電池持ちを改善することができます。

Idle状態は、コアネットワークには登録があるが、無線部分つまり基地局とのコネクションは切れている状態です。

ただ、デバイスがIdle状態であってもネットワーク側からデバイスを起こし、通信可能な状態にしたいことがあります。

スマートフォンの場合は、主に電話がかかってきた時です。この処理を行うのがページングです。 ページングがないと、ユーザーがスマートフォンを触って通信している時しか電話がかからないということになり、電話としての機能を果たせなくなります。

eDRXは、デバイスがページングをチェックする間隔を伸ばすことで消費電力を削減します。

通常のLTE-Mでは、数秒ごとにデバイスはネットワークからの信号を確認します。 eDRXを使うと、このチェック間隔を最大数十分まで引き延ばせます。 チェックをしていない間は受信回路をオフにできるので、消費電力が下がります。

PSM(Power Saving Mode)

PSMは、デバイスが自発的に長時間のスリープに入る技術です。

PSM中はLTE-Mの無線部分が完全にオフになり、ネットワークからのページングも受け取りません。 デバイスは2つのタイマーで動作します。

  • T3324(Active Timer):送信後にアクティブ状態を維持する時間(今回は10秒に設定)
  • T3412(TAU Timer):次にネットワークへ位置登録更新(TAU: Tracking Area Update)を行うまでの時間(今回は30分に設定)

T3324が満了するとPSMに入り、T3412のタイミングか、デバイス自身が起動するまでスリープし続けます。

送信専用ならeDRXは気にしなくていい

今回のユースケースは「5分に1回センサーデータをHTTP POSTで送信する」という、上り通信(アップリンク)のみのシナリオです。

eDRXは「サーバーからデバイスへの下り通信をいつ受け取れるか」を最適化する仕組みです。 デバイスから一方的にデータを送るだけなら、eDRXの設定は消費電流に影響しません。

PSMを使うと、送信後すぐにスリープに入り、次の送信タイミングで自分から起きます。 T3412は「最大でこの間隔以内にはネットワークに出てくる」という約束なので、送信間隔(5分)より長く設定しておけば問題ありません。

実装:PSMとモジュール電源OFFの設定方法

PSM

送信完了後にPSMへ移行します。setPsm() でパラメータを設定すると、T3324(10秒)経過後にモデムが自動でPSMに入ります。

// 送信完了後、PSMへ移行
WioCellular.setPsm(1, 1800, 10);  // T3412=1800秒(30分)、T3324=10秒
 
// T3324(10秒)が経過するとモデムが自動でPSMに入る
// isActive() が false になるまで待機(最大1分)
const auto psmStart = millis();
while (millis() - psmStart < PSM_POWER_DOWN_TIMEOUT_MS) {
    WioCellular.doWork(10);
    if (!WioCellular.getInterface().isActive()) {
        break;  // PSMに入った
    }
}
 
// モデムがPSMに入った後、ライブラリの変数をリセット
WioNetwork.end(false);  // モデムには何も送らない

end(false) はモデムに何もコマンドを送りません。モデムはPSM状態のままです。 5分後にMCUが自発的に起動し、送信してからまたPSMに戻るサイクルです。

モジュール電源OFF

送信完了後にモジュールをシャットダウンします。

WioNetwork.end();        // AT+CFUN=0 でモデムをシャットダウン
WioCellular.powerOff();

end() は内部で AT+CFUN=0(最小機能モード)を送り、モデムをシャットダウンします。ネットワーク側のデバイス登録も削除されます。 5分後にWioCellular.powerOn() でモジュールを再起動してからLTE-M再接続・送信します。

MCU(nRF52)は両モードともFreeRTOS tickless idleで5分間のディープスリープに入ります。

計測結果

ベースライン:省電力なし(常時接続)

まず比較のベースラインとして、LTE-Mモジュールを常時接続したままにした場合の消費電流です。 前回の記事と同じ状態で、スリープ処理なしで10分間計測しました。

こちらは、メッセージ送信時は90mA、Idle時は25mA程度の消費電流が発生しています。 前回の結論と同様、Idle時の消費電流が高いので、これでは乾電池で屋外で駆動させることは現実的ではありません。

常時接続状態での消費電流(10分間)
省電力なし(常時接続)の消費電流。

モジュール電源OFFの計測結果

送信完了後にLTE-Mモジュールをシャットダウンし、5分後の送信タイミングで再起動する時の消費電流です。 こちらは、メッセージ送信時は100mA、Idle時は82μA程度の消費電流が発生しています。

メッセージ送信時とIdle時の落差が100倍を超えており、一緒にグラフにするとIdle時の消費電流が分からなくなります笑 そのため、Idleの区間だけを切り取ったグラフも取得しました。

モジュール電源OFFでの消費電流(10分間)
モジュール電源OFF:送信→シャットダウン→スリープのサイクルが繰り返されている
モジュール電源OFFでの消費電流: Idle時だけ取得
モジュール電源OFF:Idle時だけ取得

PSMの計測結果

送信完了後にPSMへ移行し、T3324(10秒)経過後にモジュールが自動でスリープに入り、5分後に再起動してメッセージを送信するサイクルの消費電流です。 こちらは、モジュール電源OFFとほとんど変わらず、メッセージ送信時は100mA、Idle時は82μA程度の消費電流が発生しています。

PSMでの消費電流(10分間)
PSM:送信→PSM移行→スリープのサイクルが繰り返されている
PSMでの消費電流: Idle時だけ取得
PSM:Idle時だけ取得

PSMとモジュール電源OFF:何が違うのか、どちらを選ぶべきか?

Idle時の消費電流がほとんど変わらないことが実測できましたが、この2つはどちらを選ぶべきでしょうか? この2つの大きな違いは、LTE-Mネットワークから見た状態が違うことです。

PSMモジュール電源OFF
ネットワーク上の状態登録済み(スリープ中)未登録(切断)
再接続速い(スリープ復帰)遅い(Attach手順から)
下り通信の受け取り送信・TAUのタイミングで受け取れる受け取れない
消費電流(スリープ中)同等同等

この違いはコードにそのまま表れています。 PSMでは WioNetwork.end(false) でモデムへのコマンドを送らず、ネットワークに「スリープ中」と見せたままにします。 モジュール電源OFFでは WioNetwork.end()AT+CFUN=0 を送ってモデムをシャットダウンし、ネットワーク側の登録も消します。

PSMはネットワークへの登録を維持するため、起きたときの再接続が速いです。 ただし、T3412ごとに位置登録更新(TAU)のために必ず起動しなければなりません。 送信間隔がT3412より短い場合は問題ありませんが、長期間送信しないケースではT3412のたびに意図せず起動し、消費電流が発生します。

モジュール電源OFFはネットワークから完全に切断するため、起動のたびにAttach手順が必要です。 ただし、TAUによる強制起動がないため、長期間スリープしたい場合に向いています。

使い分けのまとめ:

  • 定期的に送る(送信間隔 < T3412)→ PSM。毎回のAttach手順が不要で再接続が速い。
  • 長期間送らない、または不定期 → モジュール電源OFF。TAUによる意図しない起動がない。

まとめ

PSMとモジュール電源OFFでIdle時の消費電流に差はなく、どちらも省電力状態に入れることが確認できました。 差がないことが分かったので、今後はネットワーク登録を維持したまま使えるPSMを積極的に活用していこうと思います。

実測して改めて感じたのは、Idle時の消費電流を通信時の100分の1以下に抑えられる省電力モードの効果の大きさです。 電池寿命を延ばすには通信回数の削減と、できるだけIdle状態を長く維持することが重要だと実感しました。

関連記事