現時点の情報です。最新情報は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秒間隔 | 41 | 158% |
| ESP-NOW(画面12, CPU240) 1秒間隔 | 37 | 142% |
| ESP-NOW(画面7, CPU80) 1秒間隔 | 52 | 200% |
| BluetoothSerial(画面12, CPU240) 0.1秒間隔 | 25 | 96% |
| ESP-NOW(画面12, CPU240) 0.1秒間隔 | 34 | 131% |
BluetoothSerialに比べると、ESP-NOWの方が省電力で使えそうです。30分までであれば、現実的な明るさの画面で使うことも視野に入ると思います。
まとめ
一時間超えるかなと思ったら、超えませんでした。BluetoothSerialよりESP-NOWが一部グラフが下回っているところがあるので、バッテリーの状況によって継続時間も変わってくると思います。
0.1秒間隔でも画面を少し暗くすれば30分は使えそうですね。




コメント