ESP32の書き込みサイズを変更する
いろんなことに使われているESP32ですが、先日のハッカソンで渡されたサンプルプログラムがデフォルトで92%もメモリを使用するということで、何に使えるんだコレと海原雄山みたいなこと言いました。
ということで今回はそんな時に使えるESP32の書き込みができるファイルサイズを変更する方法です。
やること
ESP32の書き込みメモリのサイズを変更する
工程
- 設定ファイルの場所を特定する
- 電卓とかで増やすサイズを割り出す
- 設定ファイルを書き換え
- テストとして実際に書き込みしてみる
実際に変更してみる
設定ファイルを見つける
まずは設定ファイルの場所を特定する必要がある。
ちなみに、今回使用したOSはLinux(xubuntu)です。他のOSを使用している方とはファイルの場所などに違いがある場合があるので注意してください。
僕の場合、設定ファイルは
~/Arduino/hardware/espressif/esp32/tools/partitions/default.csv
に存在しました。
このcsvファイルに色々と情報が書き込まれていて、実際にプログラムが書き込まれるときなどにコレが参照されるそうです。
# Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 0x9000, 0x5000, otadata, data, ota, 0xe000, 0x2000, app0, app, ota_0, 0x10000, 0x140000, app1, app, ota_1, 0x150000,0x140000, eeprom, data, 0x99, 0x290000,0x1000, spiffs, data, spiffs, 0x291000,0x16F000,
初期の値はこうなっていて、0x140000 = 1310720
bytesだけ書き込めるようになっている。
nvsとotadataをいじってしまうと、動作が不安定になるので、よっぽどのことがなければotadata下の4行分データを変更します。
ちなみに、サイズを変更する時は 0x10000
ごとに変更をしないと怒られます。コンパイルエラーが出たときにも言われるので注意しましょう。
変更するサイズを決める
1310720 bytes ~ 1.3MB
になるので、今回は1.5MBくらいまで増やすとこにしようと思います。
1500000 = 0x16E360
になるので、1.5MBにするにはサイズを0x140000
から0x1700000
にすれば良さそうというのがわかります。
ちなみに 0x170000 = 1507328 > 1500000
なので多分あってます。
というわけで変更していきます。
実際に設定ファイルを変更する
windowsのメモ帳でやる人はまさかいないと思うんですが、文字コードの影響とかでバグが起きそうなのでできるだけやめてください。
変更するときにはoffsetやsizeを逐次計算していったほうがいいです。
offsetはたぶんメモリ番地、sizeはその場所が専有しているサイズになります。
サイズを0x170000にする時はこうなります。
# Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 0x9000, 0x5000, otadata, data, ota, 0xe000, 0x2000, app0, app, ota_0, 0x10000, 0x170000, app1, app, ota_1, 0x180000,0x170000, eeprom, data, 0x99, 0x2F0000,0x1000, spiffs, data, spiffs, 0x2F1000,0x0DF900,
ポイントとしてはoffsetの値にsizeを加えた数が次の場所のoffsetの番地になることです。
このブログを見ている皆さんは16進数同士の掛け算も秒でできる hexadecimal native な方も多いでしょう、しかし僕は普通の人なのでPCに搭載されている電卓を叩きました。
ちなみに、ESP32自体のメモリサイズは4MBなので、最後のspiffsの行にあるOffsetとSizeの値の和が 0x3D900 = 4000000
になれば成功です。
もしそうでなかったらどこか間違っている場所があるのでよく確認してください。
ちなみに、appの部分を変更したためにspiffs
の値が減っていますが動作に問題はありません。戦争のための致し方ない犠牲だ。
boards.txtの変更
実際に書き込めたら、もう一つファイルを変更します。
変更するのはesp32のルートにある boards.txt
場所としては~/Arduino/hardware/espressif/esp32
にありました。
このファイルの esp32.upload.maximum_size
の部分を変更します。今回は0x30000増やしたので
esp32.upload.maximum_size = 1507328
に変更します。
実際に確認してみる
適当に何かファイルを書き込みます。
簡単にLチカなどでも大丈夫です。
#define LEDPIN 13 void setup{ pinMode(LEDPIN, OUT); } void loop() { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); }
あとは書き込むと、書き込んだ後に出るメッセージが変わると思います。
変わればきちんと変更がされたので終わり、お疲れ様でした。