ESP32でSPIFFS領域に保存する方法【M5StickC PLUS】
この記事では、M5StickC
PLUSでSPIFFS領域にデータを保存する方法を解説します。SPIFFSとは「SPI
Flash File System」の略で、ESP32のFlashメモリです。
ですので、本記事で紹介する内容はESP32でも同じく使えます。SPIFFSの容量はあまり多くありませんが、軽いログファイルなら十分でしょう。M5StickC
PLUSには、M5StackのようなSDカードスロットがありませんのでSPIFFSを有効活用していきましょう。
ところで、M5StickCはArduino互換機であるESP32をベースとしたM5Stackシリーズ製品のひとつです。バッテリーやLCD、ボタンなどがパッケージングされており、プロトタイピングだけでなく実用的なモバイル端末としておすすめなArduinoです。M5StickC
PLUSの使い方は
をご覧ください。
M5StickC PLUSのSPIFFSについて
M5StickC PLUSのSPIFFS(SPI Flash File System)について詳しく解説します。 M5StickC PLUSでのSPIFFSの保存容量は、デフォルトで1.5MBのようです。2MBまで拡張する設定もあるようですが今回はやりません。 こちらのESP32のサンプルプログラムを参考に、SPIFFSのテストプログラムを書いてみました。 https://github.com/espressif/arduino-esp32/blob/master/libraries/SPIFFS/examples/SPIFFS_Test/SPIFFS_Test.ino
SPIFFSのテストプログラム
#include <M5StickCPlus.h>
#include "FS.h"
#include "SPIFFS.h"
void readFile(fs::FS &fs, const char * path){
.printf("Reading file: %s\r\n", path);
Serial
= fs.open(path);
File file if(!file || file.isDirectory()){
.println("- failed to open file for reading");
Serialreturn;
}
.println("- read from file:");
Serialwhile(file.available()){
.write(file.read());
Serial}
.close();
file}
void resetFile(const char * path) {
.remove(path);
SPIFFS
= SPIFFS.open(path, "w");
File file if(!file){
.println("- failed to open file for appending");
Serialreturn;
}
if(file.print("")){
.println("- file initialised");
Serial} else {
.println("- write failed");
Serial}
.close();
file}
const char * FILE_PATH = "/log.txt";
void setup() {
.begin();
M5.Axp.ScreenBreath(10);
M5.Lcd.setRotation(3);
M5
if(!SPIFFS.begin(true)){
.println("SPIFFS Mount Failed");
Serialreturn;
}
(FILE_PATH);
resetFile}
int count = 0;
void loop() {
.Lcd.fillScreen(BLACK);
M5
= SPIFFS.open(FILE_PATH, "a");
File file if(!file){
.println("- failed to open file for appending");
Serialreturn;
}
if(!file.println(count)){
.println("- append failed");
Serial}
++;
count.print("File size: ");
Serial.println(file.size());
Serial
.close();
file(SPIFFS, FILE_PATH);
readFile(1000);
delay}
カウントアップされた数字がファイルに追加されましたでしょうか?SPIFFSも一般的なファイルの扱い同じ形で操作できるので結構簡単ですね。 ただし、書き込みが遅いようなので、高速なサンプリングのログの場合には注意が必要です。
関連記事
- diff(colordiff)|シェル
- M5StickC PLUSで画像を表示してみた
- Electronを動かしてHello world!表示するまで(macOS)
- macOSで特定のサイトへのアクセスをDNSレベルで禁止させる方法
- ESP32でESP-NOWを使って通信してみよう