Прошивка esp8266 через usb ttl

Обновлено: 04.07.2024

Продолжаем работу с микроконтроллером ESP8266, а вернее с FLASH-памятью, подключенной к ней для хранения ПО и настроек.

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

Также, при необходимости, мы теперь можем вернуть прошивку прошлой версии, которая была в модуле, так как в прошлом уроке мы её смогли считать и сохранить, причём в удобном виде.

Для начала нам нужны, конечно же, файлы для прошивания памяти.

Скачаем необходимый SDK с официального сайта Espressif. В случае модуля ESP-01, мы, скорее всего не сможем воспользоваться третьей версией SDK, так как в ней нет прошивки, пригодной для схемы 512+512. Наши методы прошивания подойдут не только для модулей ESP-01, а и для любых других модулей, где установлен контроллер ESP8266, поэтому вполне можно и воспользоваться SDK3. Но в нашем случае мы скачаем последнюю на данный момент SDK 2.2.1 отсюда. Комплект нужен именно NONOS (без использования операционной системы).

Распакуем архив. Из него нам нужны будут для прошивания boot_v1.X.bin, версию подбираем, обычно последняя, файл esp_init_data_default_vXX.bin, я прошивал версию 05, файл blank.bin (если прошиваем неочищенную полностью память) из папки bin, а также файл userX.1024.new.2.bin из папки bin\at\512+512.

Для начала давайте очистим полностью FLASH-память нашего модуля.

Сначала подключим нашу схему, которая с прошлых занятий не изменилась.

Запускаем командную строку, находясь сразу в каталоге с файлами прошивок, которые мы создали, когда считывали прошивку из модуля, переведём модуль в режим прошивки и отправим следующую команду



Ещё раз уточним, что и с какого адреса прошивать, открыв мануал по AT


Теперь запустим Flash Download Tools и подключим файлы новой прошивки, прописав соответствующие адреса, заодно также подключим и файл blank.bin, который прошивается по трём адресам, но отмечать для прошивания мы его не будем, так как у нас память уже полностью очищена. Также выберем настройки внизу под наши параметры


Переводим модуль в режим прошивки и жмём кнопку START.

При удачном завершении операции мы получим вот такую картину


Вообще, признаться, когда я писал данный пост, у меня впервые прошилось нормально с помощью данной программы, обычно всегда процесс приводил к ошибке.

Запустим ESPlorer, настроим порт и перезагрузим наш контроллер. Если у нас всё прошилось удачно, мы увидим приблизительно вот это


Мы видим, что загрузчик у нас новой версии, SDK тоже.

Теперь попытаемся прошить наш модуль с помощью nodemcu-flasher.

Сначала не забываем отключиться от порта в ESPlorer, затем снова очистим нашу память с помощью утилиты esptool.

Запустим nodemcu-flasher, сначала перейдём там в раздел Config и аналогично подключим файлы прошивки и отметим только нужные файлы (если бы мы не стирали полностью FLASH, то blank.bin тоже отмечаем)


Переводим модуль в режим прошивки, переходим в программе nodemcu-flasher в раздел Operation и жмём кнопку Flash( F ). Начнётся процесс заливки прошивки в FLASH-память модуля


При удачном исходе операции мы получим зелёную галку внизу


Как ни странно, у меня сейчас тоже всё прошилось. Обычно сразу три файла у меня никогда удачно не прошивались, только по очереди, и то не с первого раза. Посмотрим как пойдёт процесс при съёмке видеоверсии. Проверим наличие прошивки в программе ESPlorer. Если всё нормально, то у нас остался ещё третий метод прошивания FLASH-памяти модуля, а это утилита esptool.

Для удобства работы с ней мы скопируем из папки с новой прошивкой файлы boot_v1.7.bin, версию подбираем, обычно последняя, файл esp_init_data_default_v05.bin, я прошивал версию 05, файл blank.bin (если прошиваем неочищенную полностью память) из папки bin, а также файл user1.1024.new.2.bin в папку, которую мы сохраняли прошивку с модуля и в которой мы в данный момент находимся в режиме командной строки. Прошивать будем каждый файл по отдельности, хотя можно прошить и вместе.

Перейдём в командную строку и, соответственно, сначала очистим FLASH-память нашего модуля перед прошивкой.

Затем переведём модуль в режим прошивки и попытаемся прошить сначала самый маленький файл



Подобным образом прошьём и остальные файлы, не забывая перед каждой командой переводить модуль в режим прошивания, хотя можно это делать и после, но, руководствуясь моим опытом, лучше ДО



Проверим на всякий случай наличие прошивки в ESPlorer.

Таким же образом мы можем прошить наши файлы, которые мы считали в прошлом занятии, например, в том случае, если нам по каким-то причинам не понравится новое ПО, которое мы только что прошили.

Всем спасибо за внимание!

Бинарные версии 512 + 512 здесь

Различные модули ЕSP8266 можно приобрести здесь Модули ЕSP8266

Переходник USB to TTL можно приобрести здесь ftdi ft232rl

Многофункциональный переходник CJMCU FT232H USB к JTAG UART FIFO SPI I2C можно приобрести здесь CJMCU FT232H USB

Как можно прошить attiny & esp:

  1. Взять готовые hex файлы и залить их
  2. Скомпилировать исходный код в platformio (cli или visual studio code)
  3. Скомпилировать исходный код в Arduino IDE

Чем прошить attiny:

  • Программатором USBAsp
  • Платой Arduino, загрузив в нее скетч Arduino-as-ISP
  • другим программатором для AVR

Чем прошить ESP8266:

  • USB-TTL 3.3v переходником
  • Платой Arduino, подключившись к ee RX,TX + делитель до 3.3v

Фьюзы: E:FF, H:DF, L:62

Arduino в качестве ISP программатора (3.3в-5в).

В platfomio.ini: upload_protocol = arduino upload_flags = -P$UPLOAD_PORT upload_speed = 19200

Распиновка разъема Ватериус для прошивки attiny

nc - не используется Vcc - в любой 3.3в или 5в.

Китайский USB-ISP программатор

Плата MX-USBISP-V5.00 Программа ProgISP V1.7.2 Фьюзы: E:FF, H:DF, L:62

Я купил китайский USB-ISP и перепрошил его по инструкции в USBasp (прошивка). В диспетчере устройств он стал виден, как USBasp. Драйвер v3.0.7 В platfomio.ini:

Примечание: в Windows7 почему-то не заработал. Windows 10x64 - ок.

Для прошивки ESP8266 необходим USB-TTL преобразователь с логическим уровнем 3.3в. Обратите внимание, что у него должен быть регулятор напряжения для питания ESP8266 на 3.3в. У обычных USB-TTL преобразователей логический уровень 5в, поэтому их вывод TX нужно подключить к делителю напряжения. Я использую резисторы 1.5к и 2.2к.

Инструкция из интернета (в большинстве других туториалах подключают 5в логику и делают ESP больно)

Драйверы для USB-TTL:

Готовые hex файлы

Прошивка attiny85 с помощью Avrdude & Usbasp

  1. Скачивем Avrdude: http://download.savannah.gnu.org/releases/avrdude/avrdude-6.2-mingw32.zip
  2. Распаковываем архив, заходим в папку. Открываем консоль: shift+правкая кнопка мыши - Открыть окно команд
  3. Скачивем прошивку attiny85: curl https://raw.githubusercontent.com/dontsovcmc/waterius_firmware/master/0.5/attiny85.hex --output ./attiny85.hex Если нет curl, то открываем ссылку и копируем файл в папку Avrdude.
  4. Ставим драйвер программатора USBAsp и подключаем его с attiny85.
  5. avrdude.exe -p t85 -c Usbasp -B 4 -P usb -U efuse:w:0xFF:m -U hfuse:w:0xDF:m -U lfuse:w:0x62:m
  6. avrdude.exe -p t85 -c Usbasp -B 4 -P usb -U flash:w:"D:\firmware.hex":a , ге D:\firmware.hex - путь до файла. У вас свой.

Программатор не нужен, а нужен переходник с USB на TTL 3.3 вольт.

COM7 замените на свой порт

output log (esptool 2.5.0)

5b. Чуть больше ключей: python -m esptool --chip esp8266 --port /dev/cu.wchusbserial1410 --baud 115200 --after no_reset write_flash --flash_freq 40m --flash_size 1MB --flash_mode qio --verify 0x0 .pio/build/esp01_1m/firmware.bin

output log (esptool 2.2.1)

Очистить конфигурацию можно вместе с памятью: python -m esptool --chip esp8266 --port COM3 --after no_reset erase_flash

Прошивка через PlatformIO

PlatformIO бывает в виде консольной утилиты или как дополнение в Visual Studio Code. Инструкция по установки утилиты

Инструкция из интернета У нас только attiny85 уже сидит на плате, поэтому подключаемся к разъему.

После установки в командной строке можно вызывать platformio --version и увидеть версию platformio

Прошивка с помощью Arduino IDE

Установить поддержку Attiny плат 0. выбрать 1 MHz internal

  1. В /attiny/scr переименовать main.cpp в src.ino
  2. Открыть src.ino в Arduino IDE
  3. Компилировать

Additional Libraries Требуемые библиотеки

ESP8266: Additional Boards Managers URLs:

  • Board: Generic ESP8266 Module
  • Flash Mode: QIO
  • Flash Size: 1M (no SPIFFS)
  • Debug port: Disable
  • Debug Level: None
  • IwIP Varian: v2 Lover Memory
  • Reset Method: ck
  • Crystal Frequency: 26 MHz
  • Flash Frequency: 40MHz
  • CPU Frequency: 80 MHz
  • Buildin Led: 0
  • Upload Speed: 115200
  • Port: select your port
ЕSP включается, запрашивает режим включения у Attiny, нет ответа, идёт спать.

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Подробная инструкция как прошить модуль ESP в среде ARDUINO IDE. Возможно в интернете и куча статей, но я все равно так и не понимал как прошить. Появлялись разные ошибки, не понимал конкретного порядка действий. В итоге решил все расписать.

В наличии у меня есть только Arduino UNO, ESP 01, USB-TTL. Речь пойдет именно о них.




Так, ПО мы установили. Теперь будем все подключать. Для начала небольшое разъяснение. Модуль ESP работает от 3,3V. В моем USB-TTL есть 2 режима работы, который выбирается перемычкой- 5V и 3,3V. Установив ее, мы лишаемся возможности подать питание от нее к ESP. И поэтому питание от нее я взял с Arduino, НО необходимо чтобы была общая GND и у Arduino и USB-TTL. Далее, чтобы ESP запустилась, на ножку CH_PD надо тоже подать 3.3V. Ну и собственно Rx-Tx и Tx-Rx.

На счет питания, может я не совсем правильно делаю, что беру с Ардуино. Но а так есть специальные конвертеры питания на 3.3V. Можете заказать их.

Теперь ОЧЕНЬ важный момент. У ESP есть разные режимы включения. И чтобы туда что-то прошить, контроллер надо "подготовить". Подключаем ножку GPIO0 к GND (Это режим прошивки). Далее на короткое время замыкаем RST к GND - тем самым мы перезапускаем ESP в режиме прошивки. ОТКЛЮЧАЕМ GPIO0 от GND. Теперь контроллер ждет загрузки прошивки. В мониторе порта можно смотреть в каком режиме запустилась ESP. boot mode:(1,6), где первая цифра как раз режим: 1-загрузчика,3-штатной работы.

Итак порядок действий:

  1. Rx(ESP) подключаем к Tx(Usb-ttl) и Tx(ESP) к Rx(Usb-ttl)
  2. Например, на макетной объединяем в 1 линию GND(Arduino),GND(Usb-ttl),GND(ESP),GPIO(ESP) и готовим "моргнуть" проводом от RST(ESP) на GND. Пока просто готовим провод.
  3. Ну и подаем питание. Так же на макетной плате в одну линию (отдельную от GND): 3.3V(Arduino),CH_PD(ESP),Vcc(ESP).


Мы включили ESP, теперь в диспетчере устройств можно посмотреть порт и выставить его в Arduino. Готовим скетч, компилируем, проверяем на ошибки. Открываем монитор порта, скорость выставляем на 74880. И теперь "моргнем" проводом с RST(ESP) на GND (отключили и включили). В мониторе порта увидим в каком режиме запустилась ESP. Если первая цифра =1, то все ок. Теперь ОТКЛЮЧАЕМ GPIO(ESP) от GND и запускаем прошивку в Arduino IDE. Ждем. Готово!


Собрали и получили что-то очень некрасивое, контакты все отходят, процесс прошивки при этом обрывается. Да и для частой прошивки и вовсе не очень удобно.


Решил я заказать TTL программатор для ESP-01.


Ну пока он едет, нужно было выйти из неудобной ситуации. Порывшись дома в коробке DIY, нашел:

Собираем это все и получаем что-то похожее на это:



Процесс прошивки стал гораздо удобнее. Подключаем TTL и самодельную платку Dupont проводками, зажимаем кнопку и процесс прошел. P.S. Текстолит можно обрезать более чем в двое.

Приехала ко мне TTL для ESP-01. И первое замечание как я должен шить если в ней нет кнопки, опять неудобный проводок?!

Допаяем кнопку сами. Нам понадобится тактовая кнопка большего размера.


Она идеально подходит по пинам. Откусываем два лишних пина, паяем кнопку к TTL и садим на термоклей.


В чате очень часто мелькали вопросы по прошивке ESP-01, возможно для кого-то будет полезным.


Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.

Для меня очень своевременная статья, спасибо Дмитрий!

Значит уже труд оправдан =)

А без кнопки на специальном USB-TTL для ESP-01 не запускается прошивка? Просто на том же NodeMCU при прошивке все автоматически происходит, с помощью управления RTS/CTS команд COM порта (или что-то типа того, точно не помню какие именно сигналы используются). Может тут тоже также работает?

я когда заказывал программатор тоже думал будет автоматически, но увы.

Тогда может есть способ доработать конвертор для автоматической прошивки по аналогии NodeMCU?

Это проблема программная или аппаратная? Т.е. прошивка в конвертере не позволяет это сделать или нужно устанавливать другой конвертор.

Тогда, как пример, выпаять из какой-нибудь платы Ардуино конвертор и впаять в этот переходник получим автоматическую прошивку.

Конвертер тут обычный CH340, который также используется в nodemcu и arduino, поэтому проблема аппаратная - нужные сигналы с конвертера не разведены на плате, нужна схема платы чтобы точно в этом убедиться

Читайте также: