ESP8266のフラッシュメモリをファイルシステムとして使用する

ESP8266はSPI経由でフラッシュメモリが接続されています。
容量は、国内で使用可能なWROOM-02の場合は4MBです。

フラッシュメモリの空きスペースは、ストレージとして、プログラムで使用するデータを置いておくことができます。
通常のAVRベースのArduinoでは、外部ストレージとしてSDカードを使用するのが常道ですが、ESP8266の場合は外付けハードウェアを使わなくても、モジュール単体で3MB程度のデータを保持できます。

ESP8266用のArduino環境では、SPIFFS(SPI Flash File System)を利用して、フラッシュメモリ上でファイルシステムを使うことができます。

公式の解説は以下にあります。

Arduino/reference.md at esp8266 · esp8266/Arduino

今回はこの機能を使って、フラッシュ上に置いたBMPファイルをTFT LCDに表示させてみます。

そのためには、以下の準備が必要になります。

(1)Arduino IDE for ESP8266をstable版からstaging版へ移行
SPIFFSは現時点(2015/10/4)ではstable版に組み込まれておらず、利用するにはstaging版を使う必要があります。

(2)データアップロードツールのインストール
Windows上のファイルをESP8266のフラッシュメモリへ転送するためのArduino IDE用ツールが必要です。

それでは、まず(1)のstaging版への移行です。
これは、手順は以前にも紹介した以下の記事の通りです。

技適済み格安高性能Wi-FiモジュールESP8266をArduinoIDEを使ってIoT開発する為の環境準備を10分でやる方法 – Qiita

ただし、IDEの環境設定では「Staging version」のURLを入力します。
そして、「ツール」→「ボード」→「Boards Manager…」から「esp8266 by ESP8266 Community」を選択し、Installボタンを押してインストールします。

なお、Stable版とStaging版は共存せず、上記の操作でStable版はStaging版で上書きされるようです。

インストールが終わると、ボード選択情報がリセットされてしまいますので、下図のように再度ボードの情報を指定し直します。

esp826606-02a.png

上記では「Flash Size:」で「1M(128K SPIFFS)」を選択しています。
ESP8266は4MBのフラッシュを積んでいるので最大で「4M(3M SPIFFS)」まで利用できますが、このあと説明するアップロードツールでは、実際のファイルサイズとは関係なく、ここで指定したサイズを転送することになります。
3MBをシリアルポートで送信すると数分間はかかりますので、必要最低限のサイズを指定しておくほうが待ち時間が少なくて済みます。

次に(2)データアップロードツールのインストールです。
ツールのURLは、冒頭に挙げた公式の解説ページに記載されています。現時点では

Page not found · GitHub Pages

になっています。

まず、ドキュメントフォルダ内のArduinoフォルダに、新しく「tools」というフォルダを作って下さい。

esp826606-01.png

次に、上記のURLからダウンロードしたzipファイルを解凍し、解凍してできたフォルダをtoolsフォルダの中へコピーします。

これで、Arduino IDEを再起動すると、ツールメニューの中に「ESP8266 Sketch Data Upload」という項目が新しく追加されているはずです。

esp826606-02b.png

これで準備が整いましたので、まずは動作確認してみます。

以下のようなスケッチを用意します。
プログラムの中身は、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:

}

これを通常の手順に従ってESP8266へ書き込みます。

次に、SPIFFSに書き込むファイルを用意します。

まず、上記のスケッチのフォルダ(IDEのメニューの「スケッチ」→「スケッチのフォルダを表示」で表示されるフォルダ)に「data」というフォルダを作成します。

esp826606-03.png

そして、dataフォルダの中に、SPIFFSに入れたいファイルをコピーします。
ESP8266を書き込みモードにしてから、IDEの「ツール」→「ESP8266 Sketch Data Upload」を選択すると、dataフォルダの中身がESP8266のフラッシュへ転送されます。

このとき、シリアルモニタは閉じてください。シリアルモニタが動いているとアップロードツールは動作しません。
また、アップロードツールは、ESP8266のブートローダがStaging版IDEのものになっていないと動作しませんので、Staging版IDEでコンパイルしたスケッチを少なくとも1度書き込んだ後で使用してください。

正常に転送できれば、dataフォルダに入れたファイルのファイル名とファイルサイズがシリアルポートへ出力されるはずです。

コメント

  1. arduino より:

    すいません、ちょっと教えてください.
    ubuntu(64bit)arduinoIDE(1.6.7)の場合esp8266fs.jarを入れるtoolsディレクトリは
    どこになるのか分かりません.フルパスで教えていただけると
    ありがたいです.
    お手数ですがよろしくお願い致します.

  2. arduino より:

    先ほど質問をしてしまいましたが、私がちゃんと文面を見ていなかった
    だけのことでした。大変申し訳ありませんでした.
    やっとESP8266 Sketch Data Uploadが見えました.
    お騒がせして申し訳ありませんでした.
    また、よろしくお願い致します.

  3. kyosaiclub より:

    esp8266はストレージSPIFFSを持っていて3MBほどが使えます。これを有効に使いたいと思ってバイナリファイルの読み書きを試みたのですがコンパイルが通りません。テキストファイルは作れますが,やはりサイズが大きいのでバイナリでやりたいのです。いい方法があれば教えて下さい。

  4. boochow より:

    3MB使おうとするとうまく使えないということでしょうか。
    私は試したことはありませんが、mgo-techさんの以下の記事が参考になりそうです。
    4M ( 3M SPIFFS ) をシリアルポートでアップロードできない場合のトラブルシューティング( ESP-WROOM-02 ESP8266 ) | mgo-tec電子工作 <https://www.mgo-tec.com/blog-entry-4m3m-spiffs-serial-trouble-01.html>