【PowerMeter2020】M5StackのSD遅い<20msec周期でも遅延発生>

M5StackのSDカードでデータログの予備実験をしてみました。

①M5StackのμSDカードで連続ログする(使えない)
休みなくデータを送り続けるのは厳しい使い方で、今までも
  mbedでトライしてきたのですが、4msecは無理で、6~10msec周期でないとタイムスタンプが周期的にログできないことが判ってます。そこで、ESP32でのSD書き込みのライブラリを使って連続書き込み実験をしてみました。
 ログデータ:dataNo,msec 6~10byte程度です。
周期:2msec,4msec、6msec,8msec,12msec,20msecの5水準
リファレンス:2msecでUSBシリアル(115200bps)でPCでTeratermログ
これらの条件で8000データ~32000データまで時系列グラフにプロット

結果1:2msecでもUSBシリアルだとタイムスタンプデータ遅延は発生しない。

結果2:SDカード書き込みでは、20msecでもタイムスタンプ遅延が発生していて
等周期での計測をSDカードへログすることはできないことが判った。

SD書き込みテスト用のプログラムを下記に備忘録しておきます。
シンプルで要領を得たよいサンプルプログラムを公開していだだいた方に感謝です。

IoT何をいまさら(42) M5Stack、マイクロSDカードにロギング

上記サンプルプログラムはIMUの値をSD書き込みするようになっていますが、IMU部分をはずして、タイムスタンプを記録するプログラムに改造して実験しました。
このサンプルプログラムは、M5Stackの3個のボタンを上手に使ってあります。Aボタンで記録スタート、Bボタンで、記録ストップ。Cボタンで電源オフとなってます。SDカード記録で最後にf.closeしないといけないのですが、Bボタンでf.closeになるので、任意の長さでファイルを作れるのが便利です。

 

/ test Logger
// 2019/12/22
#include <M5Stack.h>

File f;
bool fOK = false;
int i = 0;

void setup() {
M5.begin();

// Start SD card
if (!SD.begin()) {
M5.Lcd.println(“ERROR: SD CARD.”);
while (1) ;
}

// Open log file
f = SD.open(“/testLog.txt”, FILE_WRITE);
if (!f) {
M5.Lcd.println(“ERROR: OPEN FILE.”);
while (1) ;
}

// Greeting Message
M5.Lcd.println(“testLogger”);

}

void loop() {
String dataString = “”;

M5.update();

if (fOK) {
dataString += String(i++);
dataString += String(“,”);
dataString += String(millis());

f.println(dataString);
//Serial.println(dataString);
}

if (M5.BtnA.wasPressed()) {
M5.Lcd.println(“Start>”);
fOK = true;
}
if (M5.BtnB.wasPressed()) {
M5.Lcd.println(“End”);
fOK = false;
}
if (M5.BtnC.wasPressed()) {
f.close();
M5.powerOFF();
}
delay(20);
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です