何とかならんか~
電池を見つめて。
一定間隔で動かしているのだが、電池の持ちが悪くてな。
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を次のように接続する回路を構成します。
Deep Sleepを実行するプログラム
Arduino IDEを起動して、「ファイル」メニューから「新規ファイル」を選択し、表示されるスケッチに以下のように記述します。
プログラム内容
今回のプログラムは、次のような動きをするように記述してみます。
- 電源投入時は、GPIO(26)に接続されているLEDを点灯させる
(点灯は5秒間) - 5秒後にタイマーで復帰するようDeep Sleepを開始する
- Deep Sleepから復帰した際に、GPIO(18)に接続されているLEDを点灯させる
(点灯は5秒間)
Arduino IDE スケッチ例
<プログラム本体>
Deep Sleepさせるプログラムの説明
Deep Sleepを実装するために、プログラム内で次のように記載しています。
1
Deep Sleep中でも消去されないメモリ上に、DeepSleepからの復帰カウンタを保存するために、次のように記載しています。
RTC_DATA_ATTR int bootCount = 0;
2
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への書き込み
- 「ファイル」メニューから「名前を付けて保存」で任意の名前を付けて保存します。
- 「ツール」メニューから「ボード」情報を確認し、M5Stamp Picoであるか確認します。
「Partition Scheme」を「No OTA(Large APP)」に設定します。
この際、「シリアルポート」にマイコンを接続したCOMポートが指定されているかも確認します。 - 「ツール」メニューから「シリアルモニタ」を選択してシリアルモニタを起動します。
- 「スケッチ」メニューから「マイコンボードに書き込む」を選択します。
プログラム実行結果
「M5Stamp Pico」を起動すると、起動時には白いLEDが点灯(5秒間)します。
その後、Deep Seepに入り、5秒後にタイマーで復帰します。
復帰後は、赤色のLEDが点灯(5秒間)します。
編集後記
いかがだったでしょうか。
Deep Seepを使うと、センサーなどで定期的にデータを取得するという処理も、電池やバッテリーで長期間、稼働させることができます。
「M5Stamp Pico」は、特にDeep Seep時の消費電力が低いため利用価値は高いです。
今回の記事は以上になります。
最後まで、ご覧いただきありがとうございました。
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接続する際には […]