ESP32に関するよくある質問

ESP32 のファームウェアとデータ:フラッシュパーティション・ファイル・読み出し

// ファームウェア · データ · FAQ

カテゴリ: ESP32 · ファームウェア · フラッシュストレージ · 更新: 2026年8月

ファームウェア、パーティション、フラッシュの中に隠れているファイル——何を書き込むのか、どこに置かれるのか、どうやって読み出すのか。ブラウザのシミュレーターも同じレイアウトを再現しています。

C 言語で ESP32 のフラッシュパーティションを読むには?

esp_partition API を使います。esp_partition_find_first() でタイプとラベルからパーティションを探し、esp_partition_read() でバイト列を読み出します。これで esptool なしでも C からフラッシュを読めます。アドレスはフラッシュ全体ではなく、パーティション先頭からの相対値です。「ESP32 のパーティションテーブルの読み方」という質問は、たいてい esptool.py read_flash 0x8000 0x1000 pt.bin を gen_esp32part.py でデコードすることを指します。

ESP32 にファームウェアを書き込むには?

厳密な意味でのファームウェアはアプリイメージです。esptool.py write_flash 0x10000 firmware.bin。ポイントは 0x10000 であって 0x0 ではないこと。0x0 にアプリを書き込むのは定番の「黙ってブートループ」の原因で、私もやらかしました。

BIN ファイルを ESP32 に書き込むには?

.bin はファイルに収めたファームウェアにすぎないので、コマンドは同じ write_flash で、ファイルの種類に合ったオフセットを指定します。ブートローダーは 0x1000、パーティションテーブルは 0x8000、アプリは 0x10000 です。例外は Espressif のインストーラーが生成するマージ済みファクトリーイメージで、0x0 から始まります。オフセットを間違えると、アップロードは成功と報告するのにブートループします。

ESP32(Arduino)でサーバーからファイルをダウンロードするには?

HTTPClient を使います。http.begin(url) → http.GET() → ボディを読み取るだけ。これで「ESP32 Arduino でサーバーからファイルをダウンロードする」が 10 行で書けます。同じクライアントで POST もできるので、逆方向(ESP32 からサーバーへのデータ送信)も安心です。ファームウェアなら Update クラスがおすすめで、Update.begin(size) のあと Update.writeStream(stream) で .bin を安全にインストールできます。定番の落とし穴は TLS です。HTTPS にはルート証明書が必要で、証明書がないとネットワーク障害に見えます。LAN 内なら平文 HTTP でほぼ動きます。

ESP32 からコードを取り出すには?

ソースコードは無理、マシンコードなら可能です。esptool.py read_flash 0x0 0x400000 dump.bin でフラッシュ全体を取り出せます。「ESP32 からコードを読む方法」も同じ答えです。バイト列はありますが、読めるソースコードはありません。基板なしでファームウェアイメージを特定したいなら、esptool.py image_info でチップとフラッシュモードが分かります。「ESP32 ファームウェアのビルドを確認する方法」はこれです。

ESP32 に EEPROM はあるの?

物理的な EEPROM はありません。フラッシュ上でエミュレートされています。EEPROM.h も Preferences ライブラリも、SPI フラッシュ内の小さなキーバリュー領域である NVS パーティションに書き込みます。実務的な答えは「ある」です。専用チップの代わりにフラッシュの寿命を消費する形でね。ESP32 の EEPROM をクリアする方法なら、Preferences.clear() 1 発で終わります。

フラッシュのどこに何があるの?

デフォルトの 4 MB レイアウトなら、ブートローダーが 0x1000、NVS(Wi-Fi の認証情報や設定)が 0x9000、アプリが 0x10000、データ用ファイルシステムが後半にあります。パーティションテーブル(0x8000)が地図にあたります。ナレッジベースに基板別の完全なリファレンスがあります。

フラッシュ全体をダンプするには?

esptool.py read_flash 0x0 0x400000 backup.bin を 4 MB チップで実行します。--verify を付けると、完全に読み戻せたか検証できます。復元は同じオフセットで write_flash します。フルダンプは実験的なファームウェアを入れる前の唯一の本物の安全網です。私も壊すつもりの基板の前には必ず取っていて、これまでに 2 枚を救いました。

SPIFFS か LittleFS か?

LittleFS です。速く、電源喪失にも強く、Arduino-ESP32 コアに同梱されています。SPIFFS はレガシーですが、静的なデータなら今でも問題ありません。どちらも同じ Sketch Data Upload プラグインで書き込めます。公式ドキュメントは移行手順があいまいなので、初回起動時に新しいファイルシステムをフォーマットしてからファイルをコピーしてください。

Wi-Fi 経由でファームウェアを更新できる?

できます。OTA です。Update クラスはサーバーダウンロードの答えで作った .bin ストリームを受け取り、アプリを動かしたまま OTA パーティションに書き込みます。「ESP32 をどこからでもアクセスする方法」の実践的な答えはこれです。ポートフォワーディングする代わりに、デバイスからこちらへ電話してくるイメージですね。app.sensbench.com ならこの流れをブラウザで試せます。

この記事のテーマのプロジェクトは、sensbench の無料シミュレーターでそのまま実行できます。回路は配線済み、ファームウェア同梱、アカウントもインストールも不要です。

Leave a Reply

Your email address will not be published. Required fields are marked *