M5StickCバッテリーライフ検証 その5

現時点の情報です。最新情報はM5StickC非公式日本語リファレンスを確認してみてください。

概要

前回に引き続き、 ESP-NOWを利用して、1秒間隔でデータ送信した場合の送信時間を計測してみました。

受信側スケッチ

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

esp_now_peer_info_t slave;

// 受信コールバック
void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len) {
  float *bat = (float*)data;
  Serial.println(*bat);
}

void setup() {
  M5.begin();
  M5.Lcd.fillScreen(BLACK);

  // ESP-NOW初期化
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  esp_now_init();

  // ESP-NOWコールバック登録
  esp_now_register_recv_cb(OnDataRecv);
}

void loop() {
  delay(1);
}

最低限のスケッチで検証しています。

送信側スケッチ

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

esp_now_peer_info_t slave;

void setup() {
  setCpuFrequencyMhz(80);
  M5.begin();
  M5.Axp.ScreenBreath(7);
  M5.Lcd.fillScreen(BLACK);
  
  // ESP-NOW初期化
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  esp_now_init();

  // マルチキャスト用Slave登録
  memset(&slave, 0, sizeof(slave));
  for (int i = 0; i < 6; ++i) {
    slave.peer_addr[i] = (uint8_t)0xff;
  }
  esp_now_add_peer(&slave);
}

void loop() {
  float bat = M5.Axp.GetBatVoltage();
  esp_now_send(slave.peer_addr, (uint8_t*)&bat, sizeof(bat));
  delay(1000);
}

前回までの検証は白画面でしたが、今回間違って黒画面です。こちらも最低限のコードです。最初はCPU周波数と明るさの行が無いもので検証し、その後に追加しています。

結果

条件動作分数
BluetoothSerial(画面12, CPU240) 1秒間隔26
BluetoothSerial(画面7, CPU80) 1秒間隔41158%
ESP-NOW(画面12, CPU240) 1秒間隔37142%
ESP-NOW(画面7, CPU80) 1秒間隔52200%
BluetoothSerial(画面12, CPU240) 0.1秒間隔2596%
ESP-NOW(画面12, CPU240) 0.1秒間隔34131%

BluetoothSerialに比べると、ESP-NOWの方が省電力で使えそうです。30分までであれば、現実的な明るさの画面で使うことも視野に入ると思います。

まとめ

一時間超えるかなと思ったら、超えませんでした。BluetoothSerialよりESP-NOWが一部グラフが下回っているところがあるので、バッテリーの状況によって継続時間も変わってくると思います。

0.1秒間隔でも画面を少し暗くすれば30分は使えそうですね。

コメントする

メールアドレスが公開されることはありません。

管理者承認後にページに追加されます。公開されたくない相談はその旨本文に記載するかTwitterなどでDM投げてください。またスパム対策として、日本語が含まれない投稿は無視されますのでご注意ください。