注目キーワード

【Arduino】切手サイズのコンピュータ「M5Stamp Pico」Deep Sleepでさらに省電力に!

すけろく
うーむ。
何とかならんか~
げんろく
どうした?
電池を見つめて。
すけろく
電池を電源にしてM5Stampを使っているのだが、
一定間隔で動かしているのだが、電池の持ちが悪くてな。
げんろく
うーむ。どれどれ。
Sleepさせていないのか?これだとずっとCPUが電力を消費するぞ。
よし、今回はDeepSleepの方法を使う方法を紹介しよう。

この記事では、「M5Stamp Pico」を使って、「電力消費を抑えて一定間隔で動かす方法」をご紹介します。

M5Stamp Pico」は、切手サイズのマイコンです。

さまざまなものに組み込むことができるので、センサーを使って、一定間隔でデータ取得したいということも多いのではないでしょうか。

M5Stamp Pico」は、切手サイズとはいえ、起動した状態で何も処理を行わなくても、電力はどんどん消費していきますよね。

しかも、電源コードによる電源供給ができないこともあり、電池でのロングライフ稼働が必要なことも。

そこで、今回は、「M5Stamp Pico」を、DeepSleepという最小消費電力の状態に落とし、一定間隔ごとに起動するプログラムを作ります。

ぜひ、皆さんも挑戦してみてくださいね!

この記事の前提となるM5Stamp Picoのはじめ方は、次の記事で紹介しています。

関連記事

すけろく 切手サイズのコンピューター。 なかなかいい響きだの~。 げんろく 何だそれは? すけろく 「M5Stamp Pico」だ。 ESP32系のマイコンを搭載した切手サイ[…]

今回使用したマイコンはこちら!

M5Stamp Picoを一定間隔で動作させるためには

M5Stamp Pico」を使って、一定間隔で動作するプログラムを作成します。

M5Stamp Pico」などのマイコンは、何も処理を行わなくても搭載されているICのクロックに合わせて動作するため常に電力を消費しています。

常にケーブルから給電できない、屋外や、バッテリー稼働するものを製作する場合、必要なときのみ動作させることが重要です。

必要なときのみ動作させる仕組みとは?

M5Stamp Pico」などのマイコンには、消費電力を抑えた状態で動く、「Light Sleep」モードや「Deep Sleep」モードがあります。

Light Sleep」とは?

Light Sleepモードはクロックを止めて省電力モードに入ります。
スリープ解除後は開始した行の次から再開されます。また、メモリも保持されています。

Deep Sleep」とは?

Deep Sleepモードでは、ほとんどの機能の電源をオフして省電力モードに入ります。
Light Sleepモードと異なり、復帰後はsetup()から始まります。
RTC fast memory以外のメモリの内容も消えてしまいます。

今回は、前述の省電力モードから「Deep Sleep」モードを使います。

Deep Sleepモードの復帰トリガーについて

Deep Sleep」モードでは、ほとんどの機能を停止するため、次に復帰する際のトリガーとなる条件が必要です。

使用できるトリガ―は次のものがあります。複数のトリガーを組み合わせることも可能です。

  • タイマー
    タイマーは指定時間後に復帰するものです。
  • タッチセンサー
    タッチセンサーなどを触った場合に復帰するものです。
  • EXT0(RTC_IO)
    1つのGPIOのHIGHかLOWのトリガーを指定して復帰できます。
    プルアップなどが可能です。注意点としては、プルアップなどで電力を消費してしまいます。
  • EXT1(RTC_CNTL)
    複数のGPIOをどれかがHIGHになった、すべてLOWになったかのトリガーを指定して復帰できます。
  • ULP
    コプロセッサーのプログラム内部から復帰します。ULPからは一部のGPIOやI2Cなどにアクセスが可能です。

今回は、タイマーをトリガーにして復帰するようなプログラムにします。

動作を確認する回路を構成する

M5Stamp Pico」とLEDを次のように接続する回路を構成します。

回路を作るのに準備したものは次の通りです。
ジャンパケーブル メス-メス オス-オス メス-オス 100pcs (ケーブル長15cm)
created by Rinker
¥702 (2024/04/27 05:40:41時点 楽天市場調べ-詳細)
実際にブレッドボード上で回路を組んだ際のイメージは次のようになりました。

Deep Sleepを実行するプログラム

Arduino IDEを起動して、「ファイル」メニューから「新規ファイル」を選択し、表示されるスケッチに以下のように記述します。

 プログラム内容

今回のプログラムは、次のような動きをするように記述してみます。

  • 電源投入時は、GPIO(26)に接続されているLEDを点灯させる
    (点灯は5秒間)
  • 5秒後にタイマーで復帰するようDeep Sleepを開始する
  • Deep Sleepから復帰した際に、GPIO(18)に接続されているLEDを点灯させる
    (点灯は5秒間)

 Arduino IDE スケッチ例

<プログラム本体>

 Deep Sleepさせるプログラムの説明

Deep Sleepを実装するために、プログラム内で次のように記載しています。

Deep Sleep中でも消去されないメモリ上に、DeepSleepからの復帰カウンタを保存するために、次のように記載しています。

RTC_DATA_ATTR int bootCount = 0; 

Deep Sleepをタイマーで復帰させるように設定します。

esp_sleep_enable_timer_wakeup(NS_FACTOR * TIME_TO_SLEEP);

ここで、設定値として使っている定数は、次の通りです。

#define NS_FACTOR 1000000ULL      // nsへの変換用 unsigned long long データ形式で定義
#define TIME_TO_SLEEP 5                 // Sleep時間(秒)

3

Deep Sleepを開始します。

esp_deep_sleep_start(); 

 M5Stamp Picoへの書き込み

  1. 「ファイル」メニューから「名前を付けて保存」で任意の名前を付けて保存します。
  2. 「ツール」メニューから「ボード」情報を確認し、M5Stamp Picoであるか確認します。
    「Partition Scheme」を「No OTA(Large APP)」に設定します。
    この際、「シリアルポート」にマイコンを接続したCOMポートが指定されているかも確認します。
  3. 「ツール」メニューから「シリアルモニタ」を選択してシリアルモニタを起動します。
  4. 「スケッチ」メニューから「マイコンボードに書き込む」を選択します。

 プログラム実行結果

M5Stamp Pico」を起動すると、起動時には白いLEDが点灯(5秒間)します。

その後、Deep Seepに入り、5秒後にタイマーで復帰します。

復帰後は、赤色のLEDが点灯(5秒間)します。

編集後記

いかがだったでしょうか。

Deep Seepを使うと、センサーなどで定期的にデータを取得するという処理も、電池やバッテリーで長期間、稼働させることができます。

M5Stamp Pico」は、特にDeep Seep時の消費電力が低いため利用価値は高いです。

今回の記事は以上になります。

最後まで、ご覧いただきありがとうございました。

 

今回使用したマイコンと部品はこちら!

ジャンパケーブル メス-メス オス-オス メス-オス 100pcs (ケーブル長15cm)
created by Rinker
¥702 (2024/04/27 05:40:41時点 楽天市場調べ-詳細)

M5Stamp Pico の他の記事はこちらからどうぞ!

すけろく メダカもだいぶ増えたの~。 げんろく そうだな。 毎日の餌やりと、水替え、結構がんばっとるからな。 すけろく 水温は、第一弾で水温センサーを仕込んだから、 管理は楽になった。 げんろく そうだな。 よし、今回は、餌やりを自動化してみるか! 皆さん、お家で何か動植物を飼っていますか? 我が家のメダカもよく育っています。 前回の第一弾で、水槽内の水温を計測・記録するものを作りました。 おかげ […]

すけろく うーむ。 モーターを毎回同じくらい回転させることはできんのかな。 げんろく DCモーターや、サーボモーターだと、 回転量を正確に制御することは難しいぞ。 すけろく では、何か解決策はあるのかぇ? げんろく ステッピングモーターというものがある。 モーターの回転をステップとして制御できる。 今回はこのあたりを動かしてみるか。 この記事では、「M5Stamp Pico」を使って、「ステッピン […]

すけろく うーむ。 何とかならんか~ げんろく どうした? 電池を見つめて。 すけろく 電池を電源にしてM5Stampを使っているのだが、 一定間隔で動かしているのだが、電池の持ちが悪くてな。 げんろく うーむ。どれどれ。 Sleepさせていないのか?これだとずっとCPUが電力を消費するぞ。 よし、今回はDeepSleepの方法を使う方法を紹介しよう。 この記事では、「M5Stamp Pico」を […]

すけろく そういえば、LCDパネルがあるのだが、 使ってなかったな。 げんろく んー。 どれどれ、このコントローラICなら Arduinoで使えるな。 すけろく それなら、M5Stamp Picoで時計を表示したいな。 時刻同期は以前の記事でやっているし。 げんろく よし、やってみよう! この記事では、「M5Stamp Pico」を使って、「LCDモジュール」に時計を表示させてみます。 「M5St […]

すけろく んーどうしたものか。 げんろく どうした? 深刻な顔をして。 すけろく M5Stackにプログラムを書き込んだら 起動しなくなってな。 電源ON/OFFでも無理なのだ。 げんろく 書き込んだプログラムか、バッテリーの 過放電か。工場出荷時に戻してみてはどうだ? この記事では、M5Stackにプログラムを書き込んだ結果、うまく動作しなくなった場合の対処方法を記載します。 ご紹介するのは「工 […]

すけろく 最近、透明で先の見えるディスプレイが あるらしいな。 げんろく ああ、薄暗いサングラスくらいの透過率で 先が見えるものがある TOLED(Transparent OLED)と言うんだ。 すけろく M5Stampからでも表示制御できるのかな。 げんろく Arduinoでプログラムできるものがあるから、 M5Stamp Pico用に改造してみるか。 この記事では、M5Stamp Picoを使 […]

すけろく ちょっと!! e-Paper(電子ペーパー)ってディスプレイ制御は 独特なの? げんろく まあ、そりゃ違うわな。 ものが違うからの。 すけろく Raspberry Pi Pico向けのe-Paperを入手したが、 Arduino+M5Stamp Picoで使いたいのだ。 げんろく よし。 ではM5Stamp Picoで使ってみるか! この記事では、M5Stamp Picoを使って、e-P […]

すけろく M5Stamp Picoのことはじめに、 LEDを一つだけ光らせたが、やはりもっと派手にやりたいな。 げんろく 左様、わしも考えていたのだ。 LEDストラップを使って派手に光らせようではないか。 この記事では、M5Stamp PicoのGroveコネクタを使って、LEDが複数実装されたLEDストラップをいろいろな色やアニメーションで光らせてみます。 M5Stamp Picoはディスプレイ […]

すけろく WiFi接続は前回行ったが、次は時刻同期だな。 げんろく そうだな。IoTに正確な時刻は大切だ。 NTPサーバと時刻同期してみよう。 この記事では、M5Stamp PicoをアクセスWi-Fiアクセスポイントに接続し、インターネットの時刻サービスを使って時刻を同期する方法について紹介します。 M5Stamp Picoはディスプレイを持っていないため、主に処理時間やセンサーなどからデータを […]

すけろく 切手サイズのコンピュータに書き込むことはできな。 げんろく 次は、WiFi接続まわりを試してみよう。 基本はM5Stick Cと同じはずだ。 この記事では、M5Stamp Picoに実装されているWiFi機能を使って、Wi-Fiルータに接続する方法について紹介します。 この記事の前提となるM5Stamp Picoのはじめかたについては、次の記事で紹介しています。 Wi-Fi接続する際には […]