M5StickC PLUSでSPIFFS領域に保存する方法

M5StickC PLUSのSPIFFSイメージ
M5StickC PLUSのSPIFFSイメージ

この記事では、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でArduinoをはじめよう!をご参考になさってみてください。

M5StickC PLUSのSPIFFSについて

M5StickC PLUSのSPIFFSについて詳しく解説します。

保存容量はデフォルトでは1.5MBのようです。2MBまで拡張する設定もあるようですが今回はやりません。

こちらのESP32のサンプルプログラムを参考に、SPIFFSのテストプログラムを書いてみました。

SPIFFSのテストプログラム

#include <M5StickCPlus.h>
#include "FS.h"
#include "SPIFFS.h"


void readFile(fs::FS &fs, const char * path){
    Serial.printf("Reading file: %s\r\n", path);

    File file = fs.open(path);
    if(!file || file.isDirectory()){
        Serial.println("- failed to open file for reading");
        return;
    }

    Serial.println("- read from file:");
    while(file.available()){
        Serial.write(file.read());
    }
    file.close();
}


void resetFile(const char * path) {
  SPIFFS.remove(path);

  File file = SPIFFS.open(path, "w");
  if(!file){
      Serial.println("- failed to open file for appending");
      return;
  }
  if(file.print("")){
    Serial.println("- file initialised");
  } else {
    Serial.println("- write failed");
  }
  file.close();
}


const char * FILE_PATH = "/log.txt";

void setup() {
  M5.begin();
  M5.Axp.ScreenBreath(10);
  M5.Lcd.setRotation(3);
  
  if(!SPIFFS.begin(true)){
    Serial.println("SPIFFS Mount Failed");
    return;
  }
  resetFile(FILE_PATH);
}


int count = 0;

void loop() {
  M5.Lcd.fillScreen(BLACK);
  
  File file = SPIFFS.open(FILE_PATH, "a");
  if(!file){
      Serial.println("- failed to open file for appending");
      return;
  }
  
  if(!file.println(count)){
      Serial.println("- append failed");
  }
  count++;
  Serial.print("File size: ");
  Serial.println(file.size());

  file.close();
  readFile(SPIFFS, FILE_PATH);
  delay(1000);
}

カウントアップされた数字がファイルに追加されましたでしょうか?SPIFFSも一般的なファイルの扱い同じ形で操作できるので結構かんたんですね。

ただし、書き込みが遅いようなので、高速なサンプリングのログの場合には注意が必要です。

記事に関するご質問などがあればTwitterへお返事ください。
この記事で紹介した商品
M5Stackのオススメ参考書
M5Stack製品
M5StickCで使えるHat
関連記事