ESP32でSPIFFSを使ってスケッチからファイルを読み書きしてみる
コンテンツ
SPIFFS
ESP32-WROOM-32 にて設定ファイルを保存してスケッチプログラムから読み込みたい事があった。
調べてみると SPIFFS(SPI Flash File System)が使えそうだったので試した時の備忘録。
保存したファイルは ESP32 のフラッシュメモリのユーザ領域に保存される。
環境
試した環境は以下の通り。
OS | Windows 10 Home(64 Bit) |
Arduino IDE | 1.8.13 |
モジュール | ESP32-WROOM-32 ESP32にWi-Fi、Bluetoothが一つのモジュールに収まっている |
アップローダーのインストール
Arduino IDE にアップローダーをインストールする。
ダウンロード
こちらのサイトにアクセスして下にスクロールして、Download the tool archive from releases page.の “releases page” をクリックする。
![spiffs アップローダーのダウンロード](https://i0.wp.com/www.souichi.club/wp-content/uploads/spiffs-01.png?resize=768%2C359&ssl=1)
ESP32FS-1.0.zip をダウンロードする。
![ESP32FS-1.0.zipのダウンロード](https://i0.wp.com/www.souichi.club/wp-content/uploads/spiffs-02.png?resize=768%2C374&ssl=1)
解凍
ダウンロードしたファイルを解凍すると以下のフォルダー構成となっている。
├─ESP32FS-1.0
│ │
│ ├─ESP32FS
│ │ │
│ │ ├──tool
│ │ │ esp32fs.jar
│ │ │
![zipファイルの解凍](https://i0.wp.com/www.souichi.club/wp-content/uploads/spiffs-11.png?resize=768%2C440&ssl=1)
Arduino IDE環境確認
Arduino IDEを起動してスケッチプログラムの保存場所を確認する。
ファイルー>環境設定を選択する。
![環境設定](https://i0.wp.com/www.souichi.club/wp-content/uploads/spiffs-04.png?resize=768%2C469&ssl=1)
スケッチブックの保存場所を確認する。
デフォルトだと C:¥Users¥ユーザ名¥Documents¥Arduino になっていた。
![スケッチブックの保存場所の確認](https://i0.wp.com/www.souichi.club/wp-content/uploads/spiffs-05.png?resize=601%2C402&ssl=1)
tools
上記のフォルダ配下に “tools” フォルダーを作成して、解凍した ESP32FS 配下のフォルダーとファイルをコピーする。
![toolsフォルダー配下にコピーする](https://i0.wp.com/www.souichi.club/wp-content/uploads/spiffs-06.png?resize=768%2C438&ssl=1)
確認
Arduino IDE を終了して起動するとツールメニューに ESP32 Sketch Data Upload が追加されている。
このメニューを利用してファイルを ESP32 のフラッシュメモリに書き込むことが出来る。
![ESP32 Sketch Data Upload](https://i0.wp.com/www.souichi.club/wp-content/uploads/spiffs-07.png?resize=768%2C478&ssl=1)
Partition Scheme
尚、SPIFFS が存在する Partition Scheme 選択する事。
SPIFFS が無い Partition Scheme(例えば Default 4MB with ffat(1.2MB APP/1.5MB FATTS)など)を選択して Upload を行うと、”SPIFFS Error: partition size could not be found!” で書き込めない。
![Partition Scheme](https://i0.wp.com/www.souichi.club/wp-content/uploads/spiffs-14.png?resize=768%2C491&ssl=1)
アップロード
ファイルを手動でアップロードしてスケッチから読み込んでみる。
ファイルの用意
スケッチが保存されているフォルダー配下に “data” フォルダーを作成してコピーしたいファイル(config.ini)を格納する。
どうやらこの data フォルダー名は”決め打ち”の名前のようだ。
![dataフォルダーはいかにconfig.iniファイル](https://i0.wp.com/www.souichi.club/wp-content/uploads/spiffs-08.png?resize=768%2C437&ssl=1)
config.ini の中身
client_id=SKSPI0001
flg1=1
flg2=0
flg3=0
upload
ツールー>ESP32 Sketch Data Upload を選択すると “SPIFFS image Uploaded” メッセージが表示されて data フォルダー配下の config.ini ファイルが ESP32 に書き込まれる。
![SPIFFS image Uploaded](https://i0.wp.com/www.souichi.club/wp-content/uploads/spiffs-12.png?resize=768%2C481&ssl=1)
メッセージは以下の通り。
data フォルダー配下の config.sys と desktop.ini(Windowsが自動で作成するデスクトップの表示情報を保存するファイル)と spiffs.spiffs.bin ファイルが書き込まれた事が分かる。
[SPIFFS] data : D:\GoogleDriveD\M2B\Program\ArduinoProgram\spiffs\data
[SPIFFS] start : 2686976
[SPIFFS] size : 1472
[SPIFFS] page : 256
[SPIFFS] block : 4096
/config.ini
/desktop.ini
[SPIFFS] upload : C:\Users\ユーザ名\AppData\Local\Temp\arduino_build_23315/spiffs.spiffs.bin
[SPIFFS] address: 2686976
[SPIFFS] port : COM7
[SPIFFS] speed : 921600
[SPIFFS] mode : dio
[SPIFFS] freq : 80m
esptool.py v3.0-dev
Serial port COM7
Connecting.....
Chip is ESP32-D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: f0:08:d1:d2:7b:20
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 1507328 bytes to 3025...
Writing at 0x00290000... (100 %)
Wrote 1507328 bytes (3025 compressed) at 0x00290000 in 0.0 seconds (effective 262144.0 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
スケッチ
読み込み
data フォルダー配下の config.ini ファイルを読み込んで表示するスケッチ。
spiffs.ino
/*
* SPIFFS Test Scketch
*
*/
#include "SPIFFS.h"
void setup() {
Serial.begin(115200);
SPIFFS.begin(); // SPIFFS config.iniファイルの読み込み
File fr = SPIFFS.open("/config.ini", "r");
while(fr.available()){
String readStr = fr.readStringUntil('\n'); // 改行まで1行読み出し
Serial.println(readStr);
}
fr.close();
}
void loop() {
}
実行結果
シリアルモニターの実行結果は以下の通り。
行ごとに読み込まれた。
![実行結果](https://i0.wp.com/www.souichi.club/wp-content/uploads/spiffs-10.png?resize=768%2C461&ssl=1)
削除
手動アップロード時に一緒にアップロードされてしまった不要な desktop.ini を削除するスケッチ。
/*
* SPIFFS Test Scketch
*
*/
#include "FS.h"
#include "SPIFFS.h"
void setup() {
Serial.begin(115200);
SPIFFS.begin();
fs::FS fs = SPIFFS;
fs.remove("/desktop.ini");
}
void loop() {
}
書き込み
ファイルを書き込んで読み直すスケッチ。
/*
* SPIFFS Test Scketch
*
*/
#include "SPIFFS.h"
void setup() {
Serial.begin(115200);
SPIFFS.begin();
File fr = SPIFFS.open("/config2.ini", "w"); // 書き込みモード
fr.println("confing2 test line1"); // 2行書き込む
fr.println("confing2 test line2");
fr.close();
File frr = SPIFFS.open("/config2.ini", "r"); // 読み込みモード
while(frr.available()){
String readStr = frr.readStringUntil('\n'); // 改行まで1行読み出し
Serial.println(readStr);
}
frr.close();
}
void loop() {
}
実行結果
書き込まれた2行が表示されている。
![ファイル書き込みスケッチ実行結果](https://i0.wp.com/www.souichi.club/wp-content/uploads/spiffs-13.png?resize=768%2C465&ssl=1)
以上で今回の記事は終了とする。
この記事が何処かで誰かの役に立つことを願っている。
尚、当記事中の商品へのリンクはAmazonアソシエイトへのリンクが含まれています。Amazonのアソシエイトとして、当メディアは適格販売により収入を得ていますのでご了承ください。
最近のコメント