Некоторые советы при обновлении ядра esp32 в Arduino IDE

Выложу здесь некоторые советы, которыми пользуюсь сам при обновлении ядра esp32 в Arduino IDE либо самой Arduino IDE.

При обновлении ядра ESP32 необходимо восстановить некоторые файлы, которые будут изменены либо удалены при обновлении ядра.

WiFi и Ethernet

Если вы в своих проектах используете WiFi и Ethernet, то необходимо восстановить файл Server.h. Он лежит по адресу C:\Users\PC\AppData\Local\Arduino15\packages\esp32\hardware\esp32\<номер версии ядра>\cores\esp32\Server.h

Его требуемое содержимое:

#ifndef server_h
#define server_h

#include "Print.h"

class Server: public Print
{
public:
    //virtual void begin(uint16_t port=0) =0; //WiFi
	virtual void begin() =0; //Ethernet
};

#endif

При использовании в своих проектах WiFi или Ethernet нужно будет в зависимости от того, что мы используем, одну из строчек закоментировать, другую оставить открытой.

Partition Schemes

Далее, необходимо восстановить свои Partition схемы, которых не будет в обновлённом ядре. Для этого в файле boards.txt, расположенного по адресу c:\Users\PC\AppData\Local\Arduino15\packages\esp32\hardware\esp32\<номер версии ядра>\boards.txt нужно добавить:

esp32.menu.PartitionScheme.<наша_схема>=<название схемы, отображаемое как пункт меню>
esp32.menu.PartitionScheme.<наша_схема>.build.partitions=<имя файла схемы без расширения>
esp32.menu.PartitionScheme.<наша_схема>.upload.maximum_size=<доступный_размер_приложения>

заменяя то, что указано в угловых скобках, на смысловое содержимое. При этом доступный_размер_приложения - это доступная память для приложения в Байтах, равная app0 Size - app0 Offset из файла схемы. Например:

esp32.menu.PartitionScheme.custom_schema=1536k Flash / 768kB LittleFS
esp32.menu.PartitionScheme.custom_schema.build.partitions=custom_schema
esp32.menu.PartitionScheme.custom_schema.upload.maximum_size=1572864

Таких блоков должно быть столько, сколько мы добавим кастомных схем.
При этом в папке c:\Users\PC\AppData\Local\Arduino15\packages\esp32\hardware\esp32\<номер версии ядра>\tools\partitions\ должны лежать файлы наших кастомных схем в формате csv. Например, файл custom_schema.csv имеет следующее содержимое:

# Name,   Type, SubType, Offset,  Size, Flags
nvs,      data, nvs,     0x9000,  0x5000,
otadata,  data, ota,     0xe000,  0x2000,
app0,     app,  ota_0,   0x10000, 0x190000,
app1,     app,  ota_1,   0x1a0000,0x190000,
spiffs,   data, spiffs,  0x330000,0xc0000,
coredump, data, coredump,0x3f0000,0x10000,

#Custome schema, where App = 1.536MB, SPIFFS = 768kB

Как делать другие схемы можно посмотреть в файлах уже готовых схем в папке ...\tools\partitions\, и по аналогии сделать свои. А можно почитать об этом на официальном сайте Espresiff (Partition Tables - ESP32 - — ESP-IDF Programming Guide latest documentation). Если ссылка станет не рабочей, можно поискать по запросу esp32 custom partition table.

!!! Важный момент. В Arduino IDE версии 2 в меню Tools не появятся новые схемы, пока мы не удалим скешированную папку приложения. Для этого нужно удалить папку c:\Users\<User>\AppData\Roaming\arduino-ide\. Не переживайте, приложение при этом не удаляется.

Фичи меню Tools

Для того, чтобы у нас в Arduino 1.* была возможность прошивать LittleSPIFFS у ESP32 и ESP8266, в папке c:\Users\<User>\Documents\Arduino\tools\ должны располагаться папки с файлами <Фича>\tools\<фича>.jar

Пример содержимого папки c:\Users\<User>\Documents\Arduino\tools\

\ESP8266LittleFS\tool\esp8266littlefs.jar
\ESP32LittleFS\tool\esp32littlefs.jar
\EspExceptionDecoder\tool\EspExceptionDecoder.jar

При наличии этих файлов в данной папке будет возможность в Arduino 1.* прошить LittleSPIFFS у ESP32 и ESP8266 и декодировать Exception, возникающий при panic reboot системы. Файлы эти можно найти на гитхабе:

esp8266littlefs.jar
esp32littlefs.jar
EspExceptionDecoder.jar

Там же найдёте инструкции к установке плагинов, если у вас появятся вопросы

1 лайк

Зачем вы это всё делаете? У вас что то не работает или ошибки при компиляции лезут?. Вот уже более 5 лет работаю с ESP32 и не возникало даже вопросов и причин для обновления ядра.

Постоянно вижу в описаниях проектов “Обновить я дро до версии х.хх”. Или наоборот - “если у вас ядро младше У.УУ - откатите на более старую версию” :slight_smile:

Так что похоже у многих девелоперов проекты зависимы от версии основного пакета

У меня был проект на esp32 который не влезал в кристалл. Памяти flash потреблялось на пару процентов больше, чем могло поместиться, конкретную цифру не пишу ибо не помню. Версия ядра была 2.0.6. Обновил версию ядра до 2.0.9. Код заметно полегчал и его удалось запихнуть в кристалл. Это одна из причин.
Вторая - если вы посмотрите в issue библиотеки WiFiManager, то можно заметить, что некоторые косяки библиотеки вызваны ошибками в ядре, которые иногда исправляют, что, соответственно, приводит к появлению новой версии ядра.
Третье, как сказал @b707 , многие библиотеки зависят от версии ядра.

Добавил новую фичу в проект, а она тянет за собой кучу вынужденных обновлений

для себя выбрал делать так:

“PC” замените на User", т. е. имя вашей учётной записи в Windows