M5StickCでできること 〜M5StickCの消費電流値

スポンサーリンク
お役立ち情報

先日、M5StickC内蔵の加速度センサでM5StickC本体の傾きを測定し、一定時間毎にWebサーバに送信するスケッチをつくりました(記事は こちら)。

その際、スケッチを書き込んだM5StickCは、内蔵バッテリーで駆動させていたのですが、スケッチにはディープスリープを入れており、大部分の時間はスリープしているにも関わらず、2〜3時間で電池がなくなってしまうという問題が生じました。

そこで、バッテリーでの駆動時間をのばすことができるかどうか見極めるため、簡単なスケッチでM5StickCの消費電流値を調査してみることにしました。

M5StickC Plus(Yahoo!ショッピング)

調査方法

以下のとおり、M5StickCを電池で駆動し、その際の消費電流値をテスターで測定します。


なお、M5StickCの電源をOFFにしても、内蔵バッテリーへの充電等のために電流消費するため、電源ON時、OFF時の電流値の差を測定しています。
手持ちの2個のM5StickCについて調査しました。

初期状態

初期状態は以下のとおりです。

#include <M5StickC.h>
  
void setup() {
  M5.begin();
}

void loop() {
}

CPUの動作周波数を変更

CPUの動作周波数を240MHzから80MHzに変更しました。
80MHzは、M5StickCで無線通信ができる最低限の速度とのことです。

#include <M5StickC.h>
  
void setup() {
  M5.begin();
  setCpuFrequencyMhz(80);
}

void loop() {
}

LCD画面の明るさを変更

LCD画面の明るさを、文字が読めるギリギリまで暗くしました。

#include <M5StickC.h>
  
void setup() {
  M5.begin();
  setCpuFrequencyMhz(80);
  M5.Axp.ScreenBreath(8);
}

void loop() {
}

ディープスリープ

一定期間毎にディープスリープに入ります。

#include <M5StickC.h>
  
void setup() {
  M5.begin();
  setCpuFrequencyMhz(80);
  M5.Axp.ScreenBreath(8);
}

void loop() {
  delay(5000);

  M5.Axp.ScreenBreath(0);
  esp_sleep_enable_timer_wakeup(10000000);
  esp_deep_sleep_start();
}

Wi-Fi接続

Wi-Fi接続を追加しました。

#include <M5StickC.h>
#include <WiFi.h>

WiFiClient client;

const char* ssid       = "XXXXXXXX";
const char* password   = "XXXXXXXX";

void setup() {
  M5.begin();
  setCpuFrequencyMhz(80);
  M5.Axp.ScreenBreath(8);

  M5.Lcd.setRotation(3);
  WiFi.begin(ssid, password);
  while(WiFi.status()!=WL_CONNECTED) {
    delay(500);
    M5.Lcd.print(".");
  }
  M5.Lcd.print("\r\nWiFi connected\r\nIP address: ");
  M5.Lcd.println(WiFi.localIP());
}

void loop() {
  delay(5000);

  WiFi.disconnect();
  M5.Axp.ScreenBreath(0);
  esp_sleep_enable_timer_wakeup(10000000);
  esp_deep_sleep_start();
}

加速度センサを動作

加速度センサを動作させました。

#include <M5StickC.h>
#include <WiFi.h>

WiFiClient client;

const char* ssid       = "XXXXXXXX";
const char* password   = "XXXXXXXX";

float accX = 0.0f;
float accY = 0.0f;
float accZ = 0.0f;

void setup() {
  M5.begin();
  setCpuFrequencyMhz(80);
  M5.Axp.ScreenBreath(8);
  M5.Imu.Init();

  M5.Lcd.setRotation(3);
  WiFi.begin(ssid, password);
  while(WiFi.status()!=WL_CONNECTED) {
    delay(500);
    M5.Lcd.print(".");
  }
  M5.Lcd.print("\r\nWiFi connected\r\nIP address: ");
  M5.Lcd.println(WiFi.localIP());
}

void loop() {
  M5.IMU.getAccelData(&accX, &accY, &accZ);
  delay(5000);

  WiFi.disconnect();
  M5.Axp.ScreenBreath(0);
  esp_sleep_enable_timer_wakeup(10000000);
  esp_deep_sleep_start();
}

調査結果

調査結果は以下のとおりです。

動作デバイスA(mA)デバイスB(mA)
初期状態77.781.3
CPUの動作周波数を変更50.951.7
LCD画面の明るさを変更28.629.4
ディープスリープ(動作時)22.922.3
ディープスリープ(スリープ時)3.22.9
Wi-Fi接続(動作時)27.629.2
Wi-Fi接続(スリープ時)3.12.9
加速度センサを動作(動作時)39.538.4
加速度センサを動作(スリープ時)14.513.4

上記のとおり、 CPUの動作周波数を落とし、LCD画面を暗くすることで、動作時消費電流値を半分以下の30mA程度に低減できています。
また、ディープスリープ時の消費電流値は数mAに収まっています。

一方、加速度センサを動作させることにより、動作時、ディープスリープ時ともに、消費電流値が10mA程度増大しています。
先日作成したスケッチは、これが原因で、ディープスリープさせていても2〜3時間で電池がなくなってしまったと想定されます。

なお、上記の調査においては、M5StickCの電源をOFFにし、M5StickC内蔵バッテリーが満充電されていると思われる時でも、デバイスAで1.8mA、デバイスBで0.5mA程度の電流消費がありました。
実際の消費電流値は、この値も加算する必要があります。

M5StickC Plus(Yahoo!ショッピング)

 

なお、私がM5Stack、M5StickCの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。


ごく基本的なところから、かなり複雑なスケッチや、ネットワーク接続など、比較的高度なものまで、つまづかずに読み進めていけるような構成になっており、大変わかりやすい本です。