ESP32-WROOM-32 SPIFFS アップローダープラグインの使い方

ESP32 ( ESP-WROOM-32 )
※Arduino core for the ESP32 stable ver 1.0.2 の場合、SPIFFSアップローダープラグインは ver1.0 を使って下さい。
SPIFFSのメモリサイズを大きくする方法は、Arduino IDE のボード設定で可能になりました。
以下の記事を参照してください。
ESP32-WROOM-32 SPIFFS メモリサイズを大きくする方法
(2019/05/06)

 

こんばんは。

いきなり、別話題ですが、ついこの間発売された、トランジスタ技術 2017年11月号を買ってみました。

トランジスタ技術 2017年 11 月号 [雑誌]
CQ出版
¥405(2024/03/19 10:45時点)

これ、ESP32-WROOM-32 の使い方や応用例がいつになく詳細に書かれていますので、お勧めですよ!!
初歩の初歩、Arduino IDE の使い方から突発電流値、高度なセンサー測定など、かなり突っ込んで書かれているので、ESP32好きの方にはたまらないものがあります。
当ブログでリンクを貼らせていただいている ht-deko さんも執筆されているので、ぜひ一読してみてください。

しかし、私もブログを書いていて思うんですが、こういう記事を書くのってホント大変だったろうなぁ・・・、と察してしまいます。
表とか絵とか、独自にかなり詳しく書いていて、校正も念入りにしなきゃいけないし・・・。
ホント、お疲れ様と言いたいです。

さてさて、本題に戻りまして、やっとやっと Arduino core for ESP32 で SPIFFS ( SPI Flash File System ) アップローダープラグインが動作するようになりました。

以前の記事では、アップローダーがまだリリースされていなかったので、micro SDHC カードからアップロードしていました。
でも、今回からはついに micro SD カード要らずで、Arduino IDE プラグインでパソコンから直に ESP32-WROOM-32 の Flash に書き込むことができるようになりました!!

しかも、書き込みが早い!!

最近の Espressif Systems 社の Arduino core for ESP32 開発が加速している感があります。
Bluetooth ( BLE ) もようやく UART 通信でスマホとできるようになりましたしね。
いろいろ出来過ぎて困ってしまう、嬉しい悩みですね。
ホントに開発チームの苦労はたいそうなものだったろうとお察しします。
お疲れ様でした!!!

因みに、このアップローダーはまだ version 0.1 です。
ということはまだまだ正式版とは程遠いものかと想像できますが、十分満足いく動作でした。

ということで、ESP32-WROOM-32 用 SPIFFS アップローダーの使い方を説明します。
(Windows 10 の場合で説明します)

ht-deko さんの以下の記事では、SPIFFS というものの説明も写真付きで紹介されていて、分かりやすいです。
是非、合わせてご欄ください。
http://ht-deko.com/arduino/esp-wroom-32.html#23

スポンサーリンク

準備するもの

ESPr Developer 32 ( ESP32-WROOM-32 開発ボード )

スイッチサイエンスさん販売のもので、ESP32 や USB接続機器の各種保護機能が充実した、超お勧めのボードです。
(※ピンヘッダやピンソケットは別売りです)

ESPr Developer 32
スイッチサイエンス(Switch Science)

もちろん、スイッチサイエンスさんのサイトでも販売されています。

ESPr® Developer 32

また、Espressif Systems 純正の ESP32-DevKitC でもOKです。

その他、パソコン、USBケーブル、ブレッドボード、ジャンパーワイヤー等

Arduino core for ESP32 の最新版をインストールしておく

Arduino IDE は1.8.5 で動作確認しております。

Arduino core for ESP32 は必ず最新版 ( 2017/10/14以降 )のものをインストールしてください。
それ以前のものは動作しませんのでご注意ください。
Arduino core for ESP32 のインストール方法は以下の記事を参照してください。

Arduino core for the ESP32 のインストール方法

Arduino ESP32 filesystem uploader のダウンロード

Arduino ESP32 filesystem uploader ( arduino-esp32fs-plugin ) は、公式というよりか、Arduino core for ESP32 開発チームの me-no-dev さんのGitHub エントリにあります。
これは公式なのかどうかは分かりません。
将来的に Espressif Systems社さんのページに統合されるかもしれませんのでご了承ください。

現在のところ、GitHub の以下のページにソースコードがあります。

https://github.com/me-no-dev/arduino-esp32fs-plugin

このページを開くと下図の様なところに releases page というリンクがあるので、それをクリックしてください。

次に、releases page が開いたら、下図の様なところのZIPファイルをクリックしてダウンロードします。

ダウンロードが終わったら、Windows 10 の場合、PC の ダウンロードフォルダに保存されます。
そこにある、ESP32FS-v0.1.zip ( version 0.1 の場合 )
それを下図の様に右クリックして、解凍します。

解凍すると、ESP32FS-v0.1というフォルダができます。

ESP32FS フォルダごと、toolsフォルダにコピーする

次に、Arduino スケッチを保存しているフォルダを開きます。

Arduino IDE をデフォルト状態で使っていれば、スケッチフォルダは以下のパスになると思います。

C:\Users\UserName\Documents\Arduino

ここに下図の様に tools というフォルダを作成しておきます。

次に、前項でZIP解凍した、ESP32FS-v0.1 フォルダの中の ESP32FS というフォルダをコピーし、
tools フォルダの中に貼り付けします。
これは、ESP8266 SPIFFS アップローダーと同じですね。

Arduino IDE の起動

ESP32FS フォルダごとtools フォルダへコピーできたら、Arduino IDE を起動します。
すると、下図の様に「ツール」メニューに ESP32 Sketch Data Upload という項目が作られているはずです。
そうしたら、無事アップローダープラグインのインストール完了です。

アップロードするデータの前準備

まず、スケッチは何でも良いのですが、ここでは空のスケッチを一旦「名前をつけて保存」します。

その後、その保存されたスケッチフォルダを開いて、下図の様に data フォルダを作成します。

その data フォルダの中にアップロードしたいファイルをコピーして貼り付けます。
例えば、以前の記事で紹介した美咲フォントファイル群を保存するとこんな感じになります。

ファイルのトータルサイズは、ESP32-WROOM-32 の場合、1MB 程度しかアップロードできませんので、その範囲に収めてください。
この件は後ほど述べます。

Arduino IDE の ESP32 設定

Arduino IDE を起動し、下図を参考に ESP32 設定をしておきます。
Flash Size は必ず 4MB にしておいてください。

また、2018/04/07以降の最新版 Arduino-ESP32 では、下図の様に Partition Scheme 項目が追加されました。

これは、フォントが文字化けしたりして不具合が出た場合、「初期値」にしたり、「No OTA」にしたりして、いろいろと試してみて下さい。
不具合が解消される場合があります。
その他、各自の環境に合わせて設定してみたください。
以下は私の設定例です。

ボード: "ESP32 Dev Module"
Flash Mode: "QIO"
Flash Size: "4MB (32Mb)"
Partition Scheme: "初期値"
Flash Frequency: "80MHz"
Upload Speed: "921600"
Core Debug Level: なし
シリアルポート: ご自分のUSB(COM)ポート
書込み装置: USBasp

データをSPIFFS フラッシュへアップロードしてみる

では、ESP32-WROOM-32 を接続して、Arduino IDE 画面の ESP32 Sketch Data Upload をクリックしてください。
するとアップロード開始します。

※ここで注意
シリアルモニターは必ず閉じておいてください。
起動しているとアップロードエラーになります。

シリアルモニターを起動したままアップロード開始してしまうとこんな画面になり、アップロードできません。

serial.serialutil.SerialException: could not open port 'COM4': WindowsError(5, '\x83A\x83N\x83Z\x83X\x82\xaa\x8b\x91\x94\xdb\x82\xb3\x82\xea\x82\xdc\x82\xb5\x82\xbd\x81B')
Failed to execute script esptool
SPIFFS Upload failed!

ということで、シリアルモニターを閉じてアップロード開始が正常に終了するとこんな感じになります。

アップロードされたファイルの確認

確実にアップロードされたかどうかを確かめるには、次のスケッチをコンパイルして確かめてください。
SPIFFS サンプルスケッチのコードをそのまま流用しています。

【ソースコード】 (※無保証 ※PCの場合、ダブルクリックすればコード全体を選択できます)

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

//********************************************************************
void setup() {  
  Serial.begin(115200);
  Serial.println("----------------------");

  if (!SPIFFS.begin()) {
    Serial.println("SPIFFS Mount Failed");
    return;
  }

  Serial.printf("Flash Chip Size = %d byte\r\n", ESP.getFlashChipSize());

  delay(100);

  //deleteFile(SPIFFS, "/xxx.txt");

  listDir(SPIFFS, "/", 0); //SPIFFSフラッシュ ルートのファイルリスト表示

  SPIFFS.end();
}
//********************************************************************
void loop() {

}
//********************************************************************
void listDir(fs::FS &fs, const char * dirname, uint8_t levels){
    Serial.printf("Listing directory: %s\n", dirname);

    File root = fs.open(dirname);
    if(!root){
        Serial.println("Failed to open directory");
        return;
    }
    if(!root.isDirectory()){
        Serial.println("Not a directory");
        return;
    }

    File file = root.openNextFile();
    while(file){
        if(file.isDirectory()){
            Serial.print("  DIR : ");
            Serial.println(file.name());
            if(levels){
                listDir(fs, file.name(), levels -1);
            }
        } else {
            Serial.print("  FILE: ");
            Serial.print(file.name());
            Serial.print("  SIZE: ");
            Serial.println(file.size());
        }
        file = root.openNextFile();
    }
}
//********************************************************************
void deleteFile(fs::FS &fs, const char * path) {
  Serial.printf("Deleting file: %s\n", path);
  if (fs.remove(path)) {
    Serial.println("File deleted");
  } else {
    Serial.println("Delete failed");
  }
}

14行目では、Arduino IDE で設定した SPI Flash のトータルサイズを表示します。
Arduino IDE で 2MB に設定したら 2MB で表示されます。

また、既にあるファイルを削除したい場合は、18行目のコメントを解除して、ファイル名を書き換えてください。

コンパイル書き込み実行すると、シリアルモニターには下図の様に表示されます。

以上、ESP32 の Arduino SPIFFS アップローダープラグインの使い方でした。

これができれば、美咲フォントをフルカラー OLED に表示させた以下の記事を参照して実行させてみてください。
もちろん、micro SDHC カード不要なので、その部分は読み飛ばしてください。

ESP32-WROOM-32 の SPIFFS を使って、日本語漢字 美咲フォント を読み込む

※アップロードできる最大サイズについて

1.1MB以上アップロードができるようになりました。
Arduino - ESP32 の Partition Table を変更する必要があります。
以下の記事を参照してください。
ESP32-WROOM-32 SPIFFS メモリサイズを大きくする方法
(2017/10/24)

2017年10月14日現在流通している、ESP32-WROOM-32 内蔵の SPIフラッシュのトータルサイズは 4MB ですが、SPIFFS ファイルシステムでアップロードできるサイズはわずか 1.1MB少々です。
ESP-WROOM-02 ( ESP8266 )のような 3MB 設定は、Arduino core for ESP32 では今のところできません。
今後、パーテーションテーブルの検討によっては容量が増えるかも知れません。

因みに、トータル 1.1MB を超えるサイズでアップロードを行おうとすると、こんな感じでエラーになります。

SPIFFS_write error(-10001): File system is full.
error adding file!
SPIFFS Create Failed!

と表示されます。
16×16ドットの日本語東雲フォントはアップロードできませんでした。
もうちょっと容量が欲しいですね。

まとめ

いかがでしたでしょうか。

これができれば、ESP8266 のように簡単かつシンプルに ESP32-WROOM-32を扱うことができますね。

ただ、やはりまだ1MBちょっとしかアップロードでないのが不満ですね。
せめて2MB あれば、東雲フォントがアップロードできるんですが・・・。

1.1MB以上アップロードができるようになりました。
Arduino - ESP32 の Partition Table を変更する必要があります。
以下の記事を参照してください。
ESP32-WROOM-32 SPIFFS メモリサイズを大きくする方法
(2017/10/24)

今後の Arduino core for ESP32 開発チームの皆さまに期待するしかないですね。

ということで、今回はここまでです。

ではまた・・・。

ESP32-WROOM-32 の SPIFFS について、以下の記事も合わせてご参照ください。
●ESP32-WROOM-32 の SPIFFS を使って、日本語漢字 美咲フォント を読み込む
●ESP32-WROOM-32 SPIFFS メモリサイズを大きくする方法

Amazon.co.jp 当ブログのおすすめ

スイッチサイエンス ESPr Developer 32 Type-C SSCI-063647
スイッチサイエンス
¥2,420(2024/03/19 08:55時点)
ZEROPLUS ロジックアナライザ LAP-C(16032)
ZEROPLUS
¥22,504(2024/03/19 15:23時点)
Excelでわかるディープラーニング超入門
技術評論社
¥2,068(2024/03/19 03:23時点)

コメント

  1. Tom より:

    Hi,

    Sorry that I’m not able to write in Japanese.

    I have found that you can edit the partition table to allow you to download larger files.

    Just edit the “default.csv” located in “YOUR_SKETCH_LOCATION/hardware/espressif/esp32/tools/partitions”.

    I shaved off x40000 of both app0 and app1 partition and added x80000 to spiffs partition. Don’t forget to change the offset values as well to reflect the change.

    I have successfully uploaded the shinonome font files!

    I hope you can understand my instructions.

    Cheers,
    Tom

    • mgo-tec mgo-tec より:

      Great! !
      As you said, after changing the partition table, I could upload the fancy font.
      Thank you very much for the very useful information.

      I introducing this procedure in the following article.

      I am very grateful to you.

タイトルとURLをコピーしました