ATOM Matrixの消費電流を計測してみた

ATOM Matrixに流れる電流を調べてみました。
計測には、[AVHZY CT-2](https://www.avhzy.com/?products=avhzy-ct-2-usb-meter-current-tester-voltage-detector)を使ってます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/eee56ca0-6523-2057-6189-4d35faae1874.png)


ケーブル等、計測環境をあまり気にしていないので、参考程度にしてもらえればと思います。

# 何もしない
ブランクのプログラムを動かして、電流を計測します。

## プログラム
```cpp
void setup() {

}

void loop() {

}
```

## 結果
`78mA`ほど流れてます。
内蔵されている加速度センサ等のせいか、何もしなくても結構流れています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/77b017bd-04a0-4259-f7a0-3e2b0d9a6439.png)

# delay
delay関数内で何を行っているか調べていませんが、電流を計測してみます。

## プログラム
```cpp
void setup() {
  delay(15000);
}
```

## 結果
`55mA`ほど流れています。
delay中は、少し抑えられるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/b6934765-fa2d-59d9-82d5-9e2c0139f14a.png)

# DeepSleep
DeepSleep状態にして、電流を計測します。

## プログラム
```cpp
void setup() {
  esp_deep_sleep(15000);  // 引数はタイムアウト時間
}
```

## 結果
`45mA`ほど流れています。
DeepSleepでもあまり電流を抑えられていません。バッテリー駆動で長時間は難しそうですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/90272c6a-9eeb-58e8-4ecc-6cccabda751f.png)
DeepSleepがタイムアウトするとリセットがかかり、メモリも保持されないため、例えば、定期的にセンサの値を取得して、クラウドにアップロードする場合は、delayでループするよりもesp_deep_sleepをして、繰り返したほうが消費は少なくなります。
もしかしたら、esp_deep_sleepに入る前に個別に機能をOFFにすることができればもっと控えられるかもしれません。

# LED Matrix 点灯
LED Matrixを全点灯して、明るさごとに電流を計測しました。

## プログラム
```cpp
#include "M5Atom.h"

uint8_t DisBuff[2 + 5 * 5 * 3];

// LED Matrixの明るさ（0～100）
uint8_t brightness = 20;

void setBuff(uint8_t Rdata, uint8_t Gdata, uint8_t Bdata)
{
  DisBuff[0] = 0x05;
  DisBuff[1] = 0x05;
  for (int i = 0; i < 25; i++)
  {
    DisBuff[2 + i * 3 + 0] = Rdata;
    DisBuff[2 + i * 3 + 1] = Gdata;
    DisBuff[2 + i * 3 + 2] = Bdata;
  }
}

void setup() {
  M5.begin(true, false, true);
  delay(50);
  setBuff(0xff, 0xff, 0xff);
  M5.dis.displaybuff(DisBuff);
  M5.dis.setBrightness(brightness);
}
```

## 結果

### Brightness:20
`92mA`ほど流れています。
デフォルトの明るさ設定は20となっており、LEDを傷めないためにはこの設定が推奨されています。
loop関数内で、delay関数をコールすればもうちょっと控えられるかもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/8d80e4cd-00ab-e74f-8ea6-5e43de1cb9f6.png)

Brightness:50
`140mA`ほど流れています。
25個×3のLEDを点灯するため、明るさを上げるとだいぶ増えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/b2d0e140-6bd2-248f-9f1f-ab96a7516b98.png)

Brightness:100
`220mA`ほど流れています。
LEDパネルのボタンが押せないほど熱くなるため、この設定は行わないほうが良いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/27b5a046-7182-7eae-2973-f89c27d000f9.png)

# Wi-Fi接続
APにWi-Fi接続を行った際の電流を計測しました。

## プログラム
```cpp
#include "M5Atom.h"
#include <WiFi.h>
#include <HTTPClient.h>

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

void setup() {
  
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
  }
  Serial.print("WiFi connected\r\nIP address: ");
  Serial.println(WiFi.localIP());
}
```

## 結果
`80mA`ほど流れています。
何もしない状態とあまり変わりません。バッテリー駆動とかでなければ、初期化で接続したままで良さそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/cd8b2397-7dfa-d11d-16af-fda0c813259a.png)

# HTTPS通信
HTTPS通信を行った際の電流を計測しました。

## プログラム
```cpp
#include "M5Atom.h"
#include <WiFi.h>
#include <HTTPClient.h>

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

void setup() {
  
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
  }
  Serial.print("WiFi connected\r\nIP address: ");
  Serial.println(WiFi.localIP());
}


void loop() {
  HTTPClient http;
  http.begin("https://httpbin.org/get");
  Serial.printf("http response code = %d\n", http.GET());
  Serial.println(http.getString());
  delay(500);
}
```

## 結果
HTTPS通信を行った瞬間は`122mA`ほど流れています。
思ったより流れていませんでしたが、計測周期が遅いので、ピークはもっと流れているかもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/a3d98b1f-30e6-5346-d16d-a0c18a771aec.png)