• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Как скачать прошивку с ESP32?

ART_HA

Member
Вот ни разу не сталкивался с такой задачей! :rolleyes:
Нет-нет, никакого хакерства здесь и близко нет, просто есть плата с ESP32, в котором прошита некая программка.
Нет, я не буду её менять или разбираться с ней.
Задача гораздо проще - скачать прошивку, попрошивать своими, а потом вернуть родную прошивку на место.
Просьба подсказать решение под Windows.
 

ART_HA

Member
Спасибо, заморочно, но вроде получается. :)
Причем вариант скачивания всей флеш-памяти, а не только рабочей программы, меня более чем устраивает.

Почему-то не срабатывает опция ALL, т.е. требуется точно знать объем флеш-памяти в ESP32.
Ниже приложен скрин из даташита.
Как узнать объем флеш, когда даже на фото сверху об этом я не вижу никаких намеков? Т.е. у моего МК N4, N8 или N16
 

Вложения

ART_HA

Member
Я нечаянно обнаружил аналогичное решение, но несколько попроще.
Вот здесь: https://github.com/espressif/esptool/releases
находится пакет esptools под windows
что позволяет не использовать python (хотя он на моем ПК уже установлен, причем в двух местах).
После указания места нахождения esptools.exe в PATH строчки управления в командной строке выглядят немного проще, чем в варианте с использованием python.
 

ART_HA

Member
Ага, только ведь надо еще этот самый pip инсталлировать, а потом еще и pyserial. :)

Однако есть проблема со скачиванием с ESP32 с объемом флеш 16М. Он не только ужасно долго скачивается, так еще и в ошибки выпадает.
Нет ли у Expressiff средств побороться с этим?
 

fps

Active member
надо еще этот самый pip инсталлировать, а потом еще и pyserial.
pip ставится при установке питона, его отдельно ставить не требуется.
pyserial поставится сам при установке esptool

ужасно долго скачивается, так еще и в ошибки выпадает.
С падениями не сталкивался.
Для ускорения можно поднять скорость порта. Например --baud 460800
 

ART_HA

Member
pip ставится при установке питона, его отдельно ставить не требуется.
pyserial поставится сам при установке esptool
У меня так не получилось.
После установки питона esptool read_flash сообщил об отсутствии pyserial, а тот в свою очередь потребовал pip.
И то, и другое ставил отсюда: https://gist.github.com/Miliox/a52dbf6bc82231104d81
 

fps

Active member
После установки питона esptool read_flash сообщил об отсутствии pyserial, а тот в свою очередь потребовал pip.
По умолчанию штатный инсталлятор питона pip устанавливает тоже.
Если esptool ставить не копированием его из git, а при помощи pip - pip install esptool, то все зависимости поставятся сами
 

ART_HA

Member
Пару недель назад потребовалось мне реанимировать мой старый проект на ESP32, который создавался на старом ПК под Windows 7 на Arduino IDE 1.8. Все данные проекта были в целости и сохранности.
Тем не менее проект не пошел. Ну не работает и всё тут.
Конечно все подозрения на то, что ПК уже не тот, что винда уже не та, что ардуино уже не тот, что библиотеки уже не те...
Убил кучу времени, причем столько, что проект потерял актуальность.
Дело было не в бобине, но... если бы я хранил прошивку ESP32 в формате bin на ПК, было бы всё иначе.
Поэтому я считаю подсказки fps исключительно ценными, по крайней мере я в ближайшем будущем на все свои поделки на ESP32 сделаю копии прошивок в формате bin.
Хотя в данном случае мне эта функция действительно понадобилась только для копирования фирменного продукта с целью его дальнейшего восстановления.
В принципе один небольшой каталог плюс три несложных строчки в cmd полностью решают проблему, тем не менее надеюсь, что специалисты однажды догадаются сделать под виндой простенькую читалку\писалку для ESP32 аналогично давно существующих для других МК.
 

CodeNameHawk

Moderator
Команда форума
Конечно все подозрения на то, что ПК уже не тот, что винда уже не та,
Это не имеет никогого значения.
по крайней мере я в ближайшем будущем на все свои поделки на ESP32 сделаю копии прошивок в формате bin.
Тоже не панацея, многие прошивки перестанут работать, вернее те, в которых есть сертификаты.
Проще всего записать версии плат и версии библиотек, тогда есть шанс собрать рабочею прошивку.
Если быть пароноиком, то их можно сохранить вместе с проектом.
 
Последнее редактирование:

fps

Active member
ПК уже не тот, что винда уже не та, что ардуино уже не тот, что библиотеки уже не те...
Первые два пункта не должны иметь значения.
Библиотеки конечно же лучше всегда сохранять вместе с проектом. Или как-то иначе зафиксировать их версии.
Ардуину могу порекомендовать вот эту - сам уже давно собираю проекты ардуино только в ней, забыв её гуй как страшный сон. Вся среда - один исполняемый консольный exe файл. Его можете тоже заархивировать с проектом. Плюс cmd для его запуска.
 

ART_HA

Member
Однако нужна помощь... :cry:
Поигрался в разными примерами, какие-то работают, какие-то нет. Иногда после тех, которые не работают, приходилось пользоваться описанной выше операцией восстановления, т.е. загрузкой всего содержимого флеш-памяти - результат всегда был успешным. Но при опробовании одного из примеров перестал обнаруживаться COM порт в USB и пришлось загрузить содержимое флеш-памяти не через USB, а через TX, RX.
После чего перестали работать любые примеры, в т.ч. и те, которые работали раньше.
Выглядит это так, что на экране дисплея нет никакого изображения, даже подсветка не горит.
И при этом всё прекрасно работает после восстановления флеш-памяти.
Казалось бы не подходящие для данного девайса библиотеки, но ведь некоторые примеры из них работали!
Сомнений в исправности загрузки с ардуино IDE нет - управление портами в loop работает.
Но оно перестает работать после указания в setup tft.begin(); !!!
Один из переставших работать примеров:
[FONT=Consolas, Courier New, monospace]
Код:
#include "PanelLan.h"

// BOARD_SC01, BOARD_SC01_PLUS, BOARD_SC02, BOARD_SC05, BOARD_KC01, BOARD_BC02
PanelLan tft(BOARD_SC01_PLUS);

void setup(void) {
  tft.begin();
  tft.setTextDatum(textdatum_t::middle_center);
  tft.setFont(&fonts::FreeSerifBold18pt7b);
  tft.drawString("HELLO WORLD", tft.width() / 2, tft.height() / 2);
}

void loop() {
  delay(20);
}
Что делать и кто виноват?

Библиотеки:
https://github.com/smartpanle/PanelLan_esp32_arduino
https://github.com/lovyan03/LovyanGFX
 
Сверху Снизу