TRIAL-ESP8266-LEAFキットでWi-Fi接続 」で使用したESP-WROOM-02は、4MBのフラッシュメモリを持っています。フラッシュメモリの空きスペースは、ストレージとして、プログラムで使用でき、モジュール単体で3MB程度のデータを保持できます。ESP8266用のArduino環境では、SPIFFS(SPI Flash File System)を利用して、フラッシュメモリ上でファイルシステムを使うことができます。

Arduino IDE 1.6.12のインストール

Arduino IDEを再インストールして、バージョンを1.6.7から1.6.12にアップグレードします。ESP8266 core for Arduino を使う場合は、Arduino.cc ページの最新版 Arduino IDE 1.6.12 をインストールします(Arduino は現在分裂していて、Arduino.cc のページと Arduino.org のページがあります)。取得したzipファイルを解凍し、任意の場所にフォルダごと移動して、その中の Arduino.exe ファイルをクリックするとArduino IDEが起動します。画面のキャプションに「Arduino 1.6.12」と表示されれば正常に起動されています。

古いIDEがインストールされている場合、フォルダを削除するなどの操作が必要になることが記述されていましたが、私の場合、うまくコンパイルできなかったり、SPIFFSファイルアップローダーが動作しないなどのトラブルはありませんでした(Arduino IDE 1.6.12ではそのあたりのことを処理しているのかもしれません)。

esp8266 by ESP8266 Community 2.3.0のインストール

Arduino IDE(バージョン:1.6.12)にESP8266用Arduino開発環境を次の手順でインストールします。

  1. Arduino IDE のメニューバーから、[ファイル] → [環境設定] を選択し、ダイアログの下方の[追加のボードマネージャのURLs] の入力枠にURL「http://arduino.esp8266.com/stable/package_esp8266com_index.json」を設定します。
  2. Arduino IDE のメニューバーから、[ツール]→ [ボード:] → [ボードマネージャー…]を選択します。表示されたダイアログのリストの中から、[esp8266 by ESP8266 Community] を選択して、ESP8266用Coreをインストールします。

ボードマネージャーから次のESP8266用Core をインストールします。

ESP8266用Core

Stable版とStaging版があります。一部の記述ではStaging版でないとSPIFFSが動作しないことが記述されていますが、バージョン2.3.0ではStable版を使用し、特に問題なくSPIFFSは動作しました(バージョン2.3.0ではSPIFFSの動作環境がStable版に含まれたのかもしれません)。

SPIFFSファイルシステムアップローダー0.2.0のインストール

Arduino ESP8266 filesystem uploader」の「releases page」から最新版をダウンロードし、解凍した「esp8266fs.jar」を「/Arduino/tools/ESP8266FS/tool/esp8266fs.jar」のように設定します。

次のように、Arduino IDEのツールメニューに「ESP8266 Sketch Data Upload」が表示されます。

SPIFFSファイルシステムアップローダー

SPIFFSの動作確認

必要なものはインストールしたので、SPIFFSの動作確認を行います。

最初に、SPIFFSに書き込むファイルを用意します。まず、Arduino IDEのスケッチメニューの「スケッチのフォルダを表示」で表示されるフォルダに、「data」というフォルダを作成します。そして、dataフォルダの中に、SPIFFSに入れたいファイル「spiffs.tst」をコピーします。ESP-WROOM-02を書き込みモードにし、Arduino IDEのツールメニューの「ESP8266 Sketch Data Upload」を選択すると、dataフォルダの中身がESP8266のフラッシュへ転送されます。

このとき、シリアルモニタが動いているとアップロードツールは動作しないので、シリアルモニタは閉じます。

次に、SPIFFSのルートディレクトリにあるファイルのファイル名とファイルサイズを出力するプログラムを示します。

#include <FS.h>

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println("");
  
  SPIFFS.begin();
  Dir dir = SPIFFS.openDir("/");
  while (dir.next()) {
    Serial.print(dir.fileName());
    File f = dir.openFile("r");
    Serial.println(String(" ") + f.size());
  }
}

void loop() {
  // put your main code here, to run repeatedly:
  SPIFFS.begin();
  Dir dir = SPIFFS.openDir("/");
  while (dir.next()) {
    Serial.print(dir.fileName());
    File f = dir.openFile("r");
    Serial.println(String(" ") + f.size());
  }
}

このプログラムをESP-WROOM-02に書き込んで実行すると、シリアルモニタ「teraterm」に次のようにファイル名とファイルサイズが表示されます。

SPIFFSの動作確認