Для загрузки (прошивки) ESP32 без нажатия кнопки BOOT можно использовать один из следующих методов:

1. Автоматический сброс через DTR (или RTS)
Многие USB-UART преобразователи (например, CH340, CP2102, FTDI) поддерживают сигналы DTR и RTS, которые можно использовать для автоматического перевода ESP32 в режим загрузки.

Подключите:

DTR → GPIO0 (через конденсатор ~100 нФ)

RTS → EN (через конденсатор ~100 нФ)

При открытии последовательного порта программатор автоматически сгенерирует нужные сигналы для входа в bootloader.

Схема подключения:
USB-UART (DTR) --||--> GPIO0
USB-UART (RTS) --||--> EN
Конденсаторы нужны для формирования импульса, а не постоянного уровня.

2. Использование esptool.py с опцией --no-stub
Если ESP32 не хочет заходить в режим прошивки, попробуйте:

bash
esptool.py --no-stub --before no_reset write_flash 0x1000 firmware.bin
Это отключает стандартный загрузчик и может помочь при проблемах с автоматическим сбросом.

3. Программный сброс в режим загрузчика
Если у вас уже есть прошивка, которая выполняется, можно добавить код для перехода в bootloader:

cpp
#include "esp_loader.h"

void enter_bootloader() {
esp_restart();
// Или более сложный вариант с очисткой RTC памяти
REG_WRITE(RTC_CNTL_OPTION1_REG, RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK);
esp_restart();
}
Затем вызвать эту функцию перед прошивкой.

4. Отключение проверки загрузочных пинов
В некоторых ESP32 (например, ESP32-S2/S3) можно отключить проверку GPIO0 при загрузке, изменив eFuse:

bash
espefuse.py set_flash_voltage 3.3V
Внимание! Это необратимо и может повлиять на безопасность.

5. Использование внешнего программатора (JTAG/SWD)
Если USB-UART не работает, можно прошить ESP32 через JTAG (например, с помощью ESP-Prog или ST-Link).

Вывод
Лучший способ — использовать DTR/RTS с конденсаторами. Если это не работает, проверьте:

Правильность подключения GPIO0 и EN.

Исправность USB-UART адаптера.

Попробуйте другой метод (например, esptool.py --no-stub).