見出し画像

Wio BG770Aの研究10:サンプルコードで実現する省電力化による長期駆動

Wio BG770Aの研究シリーズでは、Seeed社のLTE-M対応IoT開発ボードWio BG770Aについて、調査・検証した内容を共有しています。今回は、新たに追加された、待機時の省電力化を実現するサンプルコードを試しました。サンプルコードのポイントや、消費電力試験結果をまとめます。


■ 背景:Wio BG770Aのライブラリv0.3.4がリリース

背景として、Wio BG770Aのサンプルコード(soracom-uptime-lp.ino)を実行すると、WioCellular.powerOn()でコードが止まる問題が発生し、2024/12に、GitHubのIssue起票していました。この問題に対し、開発者とやり取りしながら、リリース前のサンプルコードを試験したりなど、少しお手伝いさせていただきました。

そして、2025/2/7にv0.3.4がリリースされました!

本記事では、このアップデートで特に変更があったサンプルコードである、

  • PSM機能を使って電力消費を抑止しながら、SORACOMにデータを送るサンプルコード:soracom-uptime-psm.ino

  • モジュール電源をオフして電力消費を抑止しながら、SORACOMにデータを送るサンプルコード:soracom-uptime-off.ino

の2つを深堀りします。なお、ArduinoIDEのライブラリマネージャーからライブラリをアップデートすれば、これらのライブラリやサンプルコードを使うことができます。
https://seeedjp.github.io/Wiki/Wio_BG770A/user-manual

■ サンプルコード1. PSM機能で省電力化を実現(soracom-uptime-psm.ino)

PSM(Power Saving Mode)機能で省電力を実現するサンプルコード全文は、下記で公開されています。https://github.com/SeeedJP/wio_cellular/blob/main/examples/soracom/soracom-uptime-psm/soracom-uptime-psm.ino

以前は、soracom-uptime-lp.inoだったのですが、soracom-uptime-psm.inoに移行されました。以前のコードであるsoracom-uptime-lp.inoは、FreeRTOSが使用されており、コードの難易度は非常に高いと感じていました。

一方、新しいコードであるsoracom-uptime-psm.inoは、FreeRTOS無しで記述されており、非常にシンプルなコードです。サンプルコード内のコメントを読むと、ざっくりした流れがつかめると思います。セルラーの電源をオフはせず、PSMで省電力状態を維持しています。

長期駆動で特に気になる待機時電流を、最近入手したPOWER PROFILER KIT II(PPK2)で測ってみました。PPK2の電圧出力端子をWio BG770AのPH端子に接続し、5Vを給電した結果、待機時の平均電流は66μA@5Vでした。

ざっくり計算してみると、1日あたりの消費電力量 = 5V x 0.066mA x 24h = 7.92mWh/日。仮に単3ニッケル水素電池2000mAh x 4 本で駆動させた場合、電池容量は、2000mAh/本 x 1.2V x 4本 = 9600mWh。9600mWh / 7.92mWh/日 = 1212日もつ計算です(自己放電等は無視)。この程度の待機電流であれば、電池による長期駆動が実現できます。

なお、PPK2は長らく在庫切れでしたが、記事執筆時点で在庫ありです。

待機時電流は、66μA@5V

■ サンプルコード2. モジュール電源オフで省電力化を実現(soracom-uptime-off.ino)

次は、モジュール電源オフで省電力を実現するサンプルコードです。このコードは新たに追加となりました。下記で公開されています。https://github.com/SeeedJP/wio_cellular/blob/main/examples/soracom/soracom-uptime-off/soracom-uptime-off.ino

PSMモードを用いず、セルラーの電源をオフにし、省電力状態を維持しています。セルラーへの負荷を低減させるため、前述したsoracom-uptime-psm.inoのインターバルは5分間でしたが、soracom-uptime-off.inoでは15分間となっています。

このコードでも、長期駆動で特に気になる待機時電流を測ってみました。5Vを給電した結果、待機時の平均電流は68μA@5Vでした。これも電池による長期駆動が実現できそうです。

68μA@5V

なお、PSM機能を使うか、セルラー電源オフを使うかですが、セルラーの側の負荷の観点では、PSMを使うことが推奨されているようです。下記記事の「◎ 省電力機能であるeDRXやPSM に対応しているか?」に簡単にまとめていますので、ご興味があれば参考ください。

■ 開発時の学び

冒頭に述べた通り、リリース前のサンプルコードを試験したりなど、開発者のお手伝いをさせていただきました。開発者とやり取りする中で、

  • GitHubを活用することで、コード管理や共同開発が非常に効率化されること(ほとんど使ったことがないので勉強したい)

  • コードの修正時に、関数ごとの役割分担が明確に整理されており、全体が見やすくなっていること。具体的には、コード内のloop()関数内に書くか、コード内の別関数内に書くか、ライブラリ内に書くかが整理されており、コードが見やすい。

などを感じました。いつも一人で開発しているので、共同開発は今回が初めての経験で、大変勉強になりました。また、GitやGitHubを覚えたくなりました。今この『Git&GitHubをはじめる本』を読み進めているのですが、大変わかりやすいです。

■ まとめ

今回の記事では、Wio BG770Aにおいて、待機時の省電力化を実現するサンプルコードを試しました。以下がポイントです。

  • PSM機能で省電力を実現するサンプルコード(soracom-uptime-psm.ino)と、モジュール電源オフで省電力を実現するサンプルコード(soracom-uptime-off.ino)がリリースされた

  • PSMのサンプルコードは、コメントを追いかければ内容がわかるレベルまで大幅に簡略化されており、流用しやすくなっている

  • Git&GitHub便利

ここまでお読みいただき、ありがとうございます!この記事が参考になった方は、スキ、コメント、フォローいただけると励みになります。


《 参考》

・Wio 770Aの研究シリーズの各記事を、下記マガジンにまとめています。

・自作IoTシステムの構築 基礎編の各記事を、下記マガジンにまとめています。


いいなと思ったら応援しよう!