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

ESP32でSPIFFS領域に保存する方法【M5StickC PLUS】
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でArduinoをはじめよう! をご覧ください。

▼ 半導体不足のため入手困難な場合は、ひとつ前のモデルのM5StickCも選択に入れてみてください。

M5StickC PLUSのSPIFFSについて

M5StickC PLUSのSPIFFS(SPI Flash File System)について詳しく解説します。 M5StickC PLUSでのSPIFFSの保存容量は、デフォルトで1.5MBのようです。2MBまで拡張する設定もあるようですが今回はやりません。 こちらのESP32のサンプルプログラムを参考に、SPIFFSのテストプログラムを書いてみました。 arduino-esp32/SPIFFS_Test.inoatmaster·espressif/arduino-esp32·GitHub

SPIFFSのテストプログラム

cpp
#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も一般的なファイルの扱い同じ形で操作できるので結構簡単ですね。 ただし、書き込みが遅いようなので、高速なサンプリングのログの場合には注意が必要です。

関連記事

最後までご覧いただきありがとうございます!

▼ 記事に関するご質問やお仕事のご相談は以下よりお願いいたします。
お問い合わせフォーム

人気のArduino互換機
Arduinoで人気の周辺パーツ
あると便利な道具
Arduinoのオススメ参考書

▼ Arduino初心者向きの内容です。ほかのArduino書籍と比べて図や説明がとてもていねいで読みやすいです。Arduinoで一通りのセンサーが扱えるようになります。

▼ 外国人が書いた本を翻訳したものです。この手の書籍は、目からうろこな発見をすることが多いです。

▼ Arduinoの入門書を既に読んでいる方で、次のステップを目指したい人向きの本です。C言語のプログラミングの内容が中心です。ESP32だけでなく、ふつうのArduinoにも役立つ内容でした。