M5StickCPlusには標準でSDカードなし
センシングしたデータなどを電源が切れても保存しておくためのデータ保存について。M5StackにはSDカードが使えるようですが、M5StickCPlusには残念ながら標準では付いていません。
調べるとSPIFFSというフラッシュメモリの一部を使える事が分かりました。上記のサイトなどを参考にさせて頂きつつ、分かりにくかったところにコメントやSerial.print入れまくって自分なりに整理したものを置いておきます。
サンプルコード SPIFFS_Sample.ino
#include <M5StickCPlus.h>
#include "FS.h"
#include "SPIFFS.h"
const char *FILE_PATH = "/log.txt"; //テキスト保存するファイル名
const char *INIT_STR = ""; //初期化するテキスト;
void readFile() {
File file = SPIFFS.open(FILE_PATH, "r");
if (!file || file.isDirectory()) {
Serial.printf("Failed to open file for reading: %s\r\n", FILE_PATH);
return;
} else {
Serial.printf("Success to open file for reading: %s\r\n", FILE_PATH);
}
Serial.println("/////////////////////READ START/////////////////////");
while (file.available()) {
Serial.write(file.read());
}
Serial.println("/////////////////////READ END/////////////////////");
file.close();
}
void removeFile() {
//ファイルが存在すればリムーブできる
if (SPIFFS.remove(FILE_PATH)) {
//Serial.println("Remove success.");
Serial.printf("Remove success: %s\r\n", FILE_PATH);
} else {
Serial.printf("Remove failed. Not available.: %s\r\n", FILE_PATH);
};
}
void writeFile(const char *str) {
File file = SPIFFS.open(FILE_PATH, FILE_APPEND);
if (!file) {
Serial.printf("Failed to open file for appending.: %s\r\n", FILE_PATH);
return;
} else {
Serial.printf("Success to open file for appending.: %s\r\n", FILE_PATH);
if (file.print(str)) {
Serial.printf("File writen: %s\r\n", str);
} else {
Serial.printf("File write failed: %s\r\n", str);
}
}
Serial.print("File size:");
Serial.println(file.size());
file.close();
}
void resetFile() {
removeFile();
writeFile(INIT_STR);
}
void setup() {
M5.begin();
if (!SPIFFS.begin(true)) {
Serial.println("SPIFFS Mount Failed");
return;
} else {
Serial.println("SPIFFS Mount Success");
}
resetFile();
writeFile("Test\r\n");
writeFile("Test2\r\n");
writeFile("139.85289,135.7654\r\n");
readFile();
readFile();
}
void loop() {
}