Esp8266 ошибка при прошивке

Страница 1 из 3

  1. Очень прошу помочь!!!!

    Проблема в следующем: на али приобрел плату esp8266 12E и usb-ttl адаптер установил все необходимые драйвера, библиотеки для платы esp8266. Все по инструкции, попытался залить простой скетч Blink появилось сообщение об ошибке: «error: espcomm_upload_mem failed, error: espcomm_upload_mem failed», при этом плату было видно среди подключенных по Wi-Fi устройств. Искал пути решения, перепробовал куча разных способов, но безрезультатно. на АТ команды через arduino — реакции никакой. После долгих манипуляций установи NODEMCU FLASHER он определил плату (MAC) и без проблем залил «какую-то» прошивку, после повторно пробовал, через arduino без результатов. Пробовал запитывать от внешнего источника припаяв толстые провода, проблемма осталась. После нескольких попыток прошивки плата пропала из устройств, подключенных по Wi-Fi и NODEMCU FLASHER ее не видит больше, перезагружал плату пробовал на другом компьютере реакции — нет. Я решил, что плата была неисправна изначально.

    Спустя некоторое время мне пришла из Китая новая плата NodeMcu V3 Lua WI-FI установив драйвера для CH340G, я подключил ее к компьютеру и попытался залить скетч Blink появилась ошибка:

    Uploading 226384 bytes from to flash at 0x00000000

    warning: espcomm_send_command: didn’t receive command response

    warning: espcomm_send_command(FLASH_DOWNLOAD_BEGIN) failed

    error: espcomm_upload_mem failed

    error: espcomm_upload_mem failed

    скорость usb порта выставлена 11520, плата выбрана верная NODEMCU 1.0, FLASH SIZE 4M

    Я пробовал на другом компьютере перепрошить ошибка та же.

    При включении платы один раз мигает светодиод, среди устройств wi-fi NodeMcu V3 Lua не определяется, программа NODEMCU FLASHER определяет MAC платы, при загрузке мигает два раза синий светодиод.

    Прошу Вас помогите! Я не исключаю, что у меня руки из жопы растут, но перепробовал кучу различных вариантов ничего не помогает, предположить, что вторая плата бракованная — вряд ли, с питанием тоже мало вероятно, поскольку на предыдущую плату подавал на прямую 3.3В толстыми проводами. Я читал, что сама плата может приходить пустой и в неё необходимо залить прошивку, но какую, и чем она поможет при заливке скетчей. За ранее всем большое спасибо за понимание!

  2. Дайте ссылку на платы.
    У меня с подобным модулем от Амперки (форм-фактор troyka) была такая же проблема. Я просто забывал переводить модуль в режим программирования. Может, на Вашем модуле тоже есть кнопки вроде RESET и PROG?

  3. И по второй ссылке у модуля действительно есть кнопки RESET и PROG. Предлагаю такой алгоритм действий: зажать и держать RESET, нажать и отпустить PROG, отпустить RESET, загружать программу.

  4. На данный момент пытаюсь прошить модуль nodemcu (вторая ссылка), неделю назад пытался прошить модуль esp8266 безрезультатно(первая ссылка).

  5. Пробовал загрузка доходит до конца два раза мигает светодиод и выдает ошибку:
    Uploading 226384 bytes from to flash at 0x00000000

    warning: espcomm_send_command: didn’t receive command response

    warning: espcomm_send_command(FLASH_DOWNLOAD_BEGIN) failed

    error: espcomm_upload_mem failed

    error: espcomm_upload_mem failed

  6. Приношу извинения, перепутал. Зажмите и держите PROG, нажмите и отпустите RESET, отпустите PROG, прошивайте. Писал по памяти, сейчас заглянул в эту статью.

  7. Попробовал, но ситуация не изменилась: пару раз моргает светодиод и ошибка, если через NODEMCU FLASHER прошивать, то моргает вначале много раз синий светодиод, начинается загрузка-зависает, в логах пишет «Error:Set ESP8266 Address timeout.». Меня еще настораживает, что платы не видно среди подключенных устройств(

  8. Приношу свои извинения, больше ничем помочь не смогу. Глубоко ESP-8266 не занимаюсь, больше Arduino и Raspberry. Все, что познал на своих ошибках по программированию модуля, рассказал. Придется уповать на других участников форума.

  9. Если платы не видно — зачем ее прошивать? Решать вопрос с дровами.

  10. Добрый день. Похожая проблема…
    после прошивки флешером (пишет что без ошибок), в ESPlorer нажимаю открыть порт, и… появляется такая фигня, при чем только после ресета на плате, на скорости 74880:
    ets Jan 8 2013,
    rst cause:2, boot mode:(3,6)
    load 0x40100000, len 31900,
    room 16 tail 12 chksum 0xef
    ho 0 tail 12 room 4 load 0x00000000,
    len 0, room 12 tail 0 chksum 0xef load 0x00000000,
    len 0, room 4 tail 0
    chksum 0xef
    csum 0xef
    csum err ets_main.c
    Из выше изложенного складывается ощущение что криво прошивается.
    плата esp 8285 m2 devkit. кто подскажет как решить проблему эту?
    устройство видится как serial port.
    при заливке скрипта пишет: Waiting answer from ESP — Timeout reached. Command aborted.
    попытки зажать Flash, нажать Reset и отпустить Flash не привели к успеху…

  11. При подключении к компьютеру устройство определяется, драйвера для CH340G установлены, через программу NODEMCU FLASHER без проблем считывает MAC платы. Я имел ввиду, что среди точек wi-fi сети плату не видно.

  12. Похоже, все дело в

    • чипе CH340G
    • обновлениях Windows.

    У меня модуль на этом чипе также перестал распознаваться на одной винде и шиться на другой.
    Что с этим делать пока не нашел.
    Перешивал через СР2102.

  13. А если подключить внешний адаптер USB-TTL к плате nodeMCU, есть ли шансы ее прошить таким образом?

  14. Что проверил и установил. Две мои машины на Windows10, Windows7, перестали шить ESP-8266 через модуль PL2303. Прошивка через FT232 происходит успешно. https://www.espressif.com/sites/default/files/tools/flash_download_tools_v3.6.3_0.rar

    upload_2018-2-7_14-51-45.png

    upload_2018-2-7_14-54-52.png

Страница 1 из 3

PORT OPEN 9600

Total : 549941 bytes
Used  : 0 bytes
Remain: 549941 bytes

> file.remove("1.lua");
file.open("1.lua","w+");
w>>  = file.writeline
w([==[wifi.setmode(wifi.STATION)]==]);
w([==[wifi.sta.config("Vascon_WiFi_24","13551369")]==]);
w([==[print(wifi.sta.getip())]==]);
w([==[led1 = 3]==]);
w([==[led2 = 4]==]);
w([==[gpio.mode(led1, gpio.OUTPUT)]==]);
w([==[gpio.mode(led2, gpio.OUTPUT)]==]);
w([==[srv=net.createServer(net.TCP)]==]);
w([==[srv:listen(80,function(conn)]==]);
w([==[    conn:on("receive", function(client,request)]==]);
w([==[        local buf = "";]==]);
w([==[        local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");]==]);
w([==[        if(method == nil)then]==]);
w([==[            _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");]==]);
w([==[        end]==]);
w([==[        local _GET = {}]==]);
w([==[        if (vars ~= nil)then]==]);
w([==[            for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do]==]);
w([==[                _GET[k] = v]==]);
w([==[            end]==]);
w([==[        end]==]);
w([==[        buf = buf.."<h1> ESP8266 Web Server</h1>";]==]);
w([==[        buf = buf.."<p>GPIO0 <a href="?pin=ON1"><button>ON</button></a>&nbsp;<a href="?pin=OFF1"><button>OFF</button></a></p>";]==]);
w([==[        buf = buf.."<p>GPIO2 <a href="?pin=ON2"><button>ON</button></a>&nbsp;<a href="?pin=OFF2"><button>OFF</button></a></p>";]==]);
w([==[        local _on,_off = "",""]==]);
w([==[        if(_GET.pin == "ON1")then]==]);
w([==[              gpio.write(led1, gpio.HIGH);]==]);
w([==[        elseif(_GET.pin == "OFF1")then]==]);
w([==[              gpio.write(led1, gpio.LOW);]==]);
w([==[        elseif(_GET.pin == "ON2")then]==]);
w([==[              gpio.write(led2, gpio.HIGH);]==]);
w([==[        elseif(_GET.pin == "OFF2")then]==]);
w([==[              gpio.write(led2, gpio.LOW);]==]);
w([==Є[Кэ@4z
hя)Ующзш

NodeMCU 0.9.5 build 20150318  powered by Lua 5.1.4
lua: cannot open init.lua
> file.remove("1.lua");
file.open("1.lua","w+");
w = file.writelin> 551369")]==]);
w([==[print(wifi.sta.getip())]==]);
w([==[led1 = 3]==]);
w([==[led2 = 4]==]);
w([==[gpio.mode(led1, gpio.OUTPUT)]==]);
w([==[gpio.mode(led2, gpio.OUTPUT)]==]);
w([==[srv=net.createServer(net.TCP)]==]);
w([==[srv:listen(80,function(conn)]==]);
w([==[    conn:on("receive", function(client,request)]==]);
w([==[        local buf = "";]==]);
w([==[        local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");]==]);
w([==[        if(method == nil)then]==]);
w([==[            _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");]==]);
w([==[        end]==]);
w([==[        local _GET = {}]==]);
w([==[        if (vars ~= nil)then]==]);
w([==[            for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do]==]);
w([==[                _GET[k] = v]==]);
w([==[            end]==]);
w([==[        end]==]);
w([==[        buf = buf.."<h1> ESP8266 Web Server</h1>";]==]);
w([==[        buf = buf.."<p>GPIO0 <a href="?pin=ON1"><button>ON</button></a>&nbsp;<a href="?pin=OFF1"><button>OFF</button></a></p>";]==]);
w([==[        buf = buf.."<p>GPIO2 <a href="?pin=ON2"><button>ON</button></a>&nbsp;<a href="?pin=OFF2"><button>OFF</button></a></p>";]==]);
w([==[        local _on,_off = "",""]==]);
w([==[        if(_GET.pin == "ON1")then]==]);
w([==[              gpio.write(led1, gpio.HIGH);]==]);
w([==[        elseif(_GET.pin == "OFF1")then]==]);
w([==[              gpio.write(led1, gpio.LOW);]==]);
w([==[        elseif(_GET.pin == "ON2")then]==]);
w([==[              gpio.write(led2, gpio.HIGH);]==]);
w([==[        elseif(_GET.pin == "OFF2")then]==]);
w([==[              gpio.write(led2, gpio.LOW);]==]);
w([==[        end]==]);
w([==[        client:send(buf);]==]);
w([==[        client:close();]==]);
w([==[        collectgarbage();]==]);
w([==[    end)]==]);
w([==[end)]==]);
file.close();
dofile("1.lua");
stdin:1: unexpected symbol near ';'
>

У ESP8266 есть несколько общих проблем, особенно при попытке записать новую прошивку или загрузке скриптов.

Вот подборка наиболее распространенных проблем с ESP8266 и способы для их исправления.

Устранение неполадок ESP8266 — NodeMCU Flasher

Где скачать флешер NodeMCU?

Перейдите в репозиторий GitHub флешера NodeMCU и загрузите флешер для вашей версии Windows, нажав кнопку «Raw»:

  • NodeMCU прошивальщик Windows 64 бит
  • NodeMCU прошивальщик Windows 32 бит

Какие настройки следует использовать с флешером NodeMCU?

Флешер NodeMCU уже поставляется с правильными настройками по умолчанию.

Настройки по умолчанию:

image_1.png

После нажатия кнопки «Flash» ничего не происходит, прошивальщик NodeMCU не запускает процесс перепрошивки

Если вы нажали кнопку «Flash» и ничего не происходит … Это может быть одно из двух:

  •  ESP не находится в режиме прошивки (перепроверьте, подключен ли GPIO 0 к GND при включении питания)
  •  программатор FTDI не может подать достаточный ток на ESP

image_2.png

Проблема 1 — Как заставить ESP перейти в режим прошивки:

  1. Закройте окно флешера NodeMCU
  2. Отключите питание от вашего ESP8266
  3. Подключите ESP следующим образом (дважды проверьте, что GPIO 0 подключен к GND)
  4. Подайте питание на ESP8266 и откройте флешер NodeMCU Нажмите кнопку «Flash»

Если он все еще сообщает «Ожидание MAC», попробуйте следующее:

  1. Подключите провод от вашего reset ESP8266 к GND
  2. Отсоедините этот провод от GND и присоединитесь к VCC

Повторите шаги  несколько раз, пока ESP не перезагрузится, и, скорее всего, флешер NodeMCU сможет обнаружить ESP и начать процесс перепрошивки.

Проблема 2. Если FTDI не может обеспечить достаточный ток, возможно, придется купить новый программатор FTDI или подключить ESP8266 к внешнему источнику питания.

Флешер NodeMCU зависает или останавливается на определенном проценте

image_3.png

  1. Отключите питание от ESP + FTDI: Закройте окно флешера NodeMCU
  2. Подключите ESP + FTDI к компьютеру снова
  3. Откройте флешер NodeMCU и попробуйте скорость передачи 19200 бод

Если этот процесс завершится неудачно, повторите ту же процедуру для следующих скоростей передачи (38400, 57600, 74880 и 115200).

Ппо крайней мере 5 человек столкнулись с той же проблемой, и этот способ решил ее. 

Как должен выглядеть NodeMCU после успешной прошивки?

У него должна быть зеленая стрелка внизу слева.

image_4.png

Разблокировка программатора FTDI на ПК с Windows

Если у вас новый программатор FTDI то сначала необходимо установить драйверы FTDI в Windows, посетите официальный веб-сайт для получения официальных драйверов: http://www.ftdichip.com/Drivers/VCP.htm.

В качестве альтернативы можете связаться с продавцом, который продал программатор FTDI.

Если возникли проблемы с установкой драйверов FTDI в Windows 7/8 / 8.1 / 10, вполне вероятно, что FTDI заблокирован.

Устранение неполадок ESP8266 — ESPlorer IDE

ESPlorer IDE Ошибка: разрешен только один tcp сервер

Это означает, что вы пытались загрузить несколько скриптов, и в ESP все еще выполняется старый скрипт с веб-сервером. Чтобы это исправить, нужно выполнить эти команды, чтобы удалить все файлы и перезапустить ESP:

  1. file.format()
  2. node.restart ()

Загрузите скрипт снова и назовите его «init.lua», и ошибка исчезнет.

ESPlorer IDE Ошибка: не удается автоматически определить прошивку

а также

ESPlorer IDE Ошибка: Ожидание ответа от ESP — истекло время ожидания. Команда прервана. Ожидание ответа от ESP — истекло время ожидания. Команда отменена.

image_5.png

Это означает что ESP, все еще находится в режиме прошивки. Как перевести ESP в режим пользователя:

  1. Закройте соединение ESPlorer IDE
  2. Отключите питание от ESP8266
  3. Подключите GPIO 0 к VCC
  4. Подайте питание на ESP8266 и восстановите соединение с ESPlorer IDE

Если он по-прежнему сообщает «не могу автоматически определить прошивку», попробуйте следующее:

  1. Подключите провод от вашего reset к GND
  2. Отключите этот провод от GND и присоедините к VCC

Код исчезает при перезапуске ESP8266

Если после загрузки скрипта в ESP ничего не происходит. Это означает, что ESP не смог найти скрипт или возникла проблема с памятью.

Возможные причины:

  1. Вы не сохранили свой скрипт под названием «init.lua». Повторная загрузка того же скрипта, но с именем «init.lua» должна решить проблему
  2. Это может быть проблема с памятью. Перепрошивка ESP с помощью прошивальщика NodeMCU обычно решает эту проблему.

Поиск IP-адреса ESP8266

Прежде чем начать, убедитесь, что вы проверили эти два пункта:

  1. Убедитесь, что скрипт, загруженный в ESP, имеет правильные сетевые учетные данные
  2. Убедитесь, что ESP находится рядом с маршрутизатором

Как найти IP-адрес:

1. Отправка команды с помощью ESPlorer IDE. Отправьте команду «print (wifi.sta.getip ())» в IDE ESPlorer, и она должна вывести IP-адрес

image_6.png

Решение 2. Установите программное обеспечение IP-сканера

image_7.png

Устранение неполадок ESP8266 — Arduino IDE

 Не получается загрузить скрипт на ESP8266 через Arduino IDE

Как перевести ESP в режим загрузки при использовании IDE Arduino:

  1. Отключите питание от ESP8266
  2. Проверьте, что GPIO 0 подключен к GND
  3. Подайте питание на ESP8266 и откройте Arduino IDE
  4. Нажмите кнопку «Загрузить»

Добавить комментарий

The ESP8266 has a few common issues, specially when you are trying to flash a new firmware or uploading scripts.

This is a companion guide to the Home Automation using ESP8266 and Password Protected Web Server eBooks.

Here’s a compilation with some of the most common problems with the ESP8266 and how to fix them.

ESP8266 Troubleshooting – NodeMCU Flasher

Where do I download the NodeMCU flasher?

Go to the NodeMCU flasher GitHub repository and download the flasher for your Windows PC bit version by clicking the button that says “Raw”:

  • NodeMCU flasher Windows 64 bits
  • NodeMCU flasher Windows 32 bits

Which settings should I use with the NodeMCU flasher?

The NodeMCU flasher already comes with the right settings by default.

If you have changed some of the settings, I highly recommend that you re-download the NodeMCU flasher.

Here’s my current settings:

nodemcu flasher

After I press the “Flash” button nothing happens, the NodeMCU flasher doesn’t start the flashing process 

If you pressed the “Flash” button and nothing happens… It means one of these two things:

  • Problem 1 – Your ESP isn’t in flash mode (double-check if GPIO 0 is connected to GND on power up)
  • Problem 2 – Your FTDI Programmer can’t supply enough current to your ESP

nothing happens

Problem 1 – How to make your ESP go into flash mode:

  1. Close the NodeMCU flasher window
  2. Remove power from your ESP8266
  3. Having your ESP connected like this (double check that GPIO 0 is connected to GND)
  4. Apply power to your ESP8266 and open the NodeMCU flasher
  5. Press the “Flash” button

If it’s still saying “Waiting MAC”, then try the following:

  1. Having the NodeMCU flasher still open
  2. Connect a wire from your ESP8266 reset pin to GND
  3. Remove that wire from GND and connect to VCC

Repeat steps 2 and 3 a few times until your ESP reboots and hopefully the NodeMCU flasher can detect your ESP and start the flashing process.

Problem 2 – If your FTDI can’t supply enough current, you might need to buy a new FTDI programmer or power your ESP8266 with an external power supply.

NodeMCU flasher gets stuck at a certain percentage

nodemcu stuck

  1. Remove power from your ESP+FTDI:
  2. Close the NodeMCU flasher window
  3. Plug your ESP+FTDI to your computer again
  4. Open NodeMCU flasher and try the 19200 baud rate

If this process fails, please repeat the same procedure for the next baud rates (38400, 57600, 74880 and 115200).

I don’t know why, but at least 5 people faced the same problem and this trick solved it. So at a baud rate of 57600 or 115200 I think it will flash 100%. I don’t have any logical explanation, since this is not very common.

How does the NodeMCU flasher should look after a successful flash?

It should have a green arrow in the bottom left.

nodemcu flasher flashed

Unbricking the FTDI Programmer on Windows PC

If you have a brand new FTDI Programmer and you need to install your FTDI drivers on Windows, visit this website for the official drivers: http://www.ftdichip.com/Drivers/VCP.htm.

In alternative, you can contact the seller that sold you the FTDI Programmer.

If you’re having trouble installing the FTDI drivers on Windows 7/8/8.1/10 it’s very likely that FTDI is bricked.

Follow this tutorial to fix that: http://youtu.be/SPdSKT6KdF8.

In the video I mentioned earlier, the guy tells you to download the drivers from the FTDI website, read carefully the YouTube description of his video to find all the links. Here’s the drivers you need: http://www.ftdichip.com/Drivers/CDM/CDM%20v2.12.00%20WHQL%20Certified.zip

ESP8266 Troubleshooting – ESPlorer IDE

ESPlorer IDE Error: only one tcp server allowed

This means that you tried to upload multiple scripts and you ESP is still running the old script with a web server. To fix it, you simply need to send these commands to delete all the files and restart your ESP:

  1. file.format()
  2. node.restart()

Upload the script again and name it ‘init.lua’ and you shouldn’t see that error again.

ESPlorer IDE Error: can’t autodetect firmware

and

ESPlorer IDE Error: Waiting answer from ESP – Timeout reached. Command aborted.Waiting answer from ESP – Timeout reached. Command aborted.

can't autodetect firmware

This sounds like your ESP it’s still in flash mode. How to make your ESP go into user mode:

  1. Close the ESPlorer IDE connection
  2. Remove power from your ESP8266
  3. Having your ESP with GPIO 0 connected to VCC
  4. Apply power to your ESP8266 and re-establish the connection with ESPlorer IDE

If it’s still saying “can’t autodetect firmware”, then try the following:

  1. Having the ESPlorer IDE connection still printing “…..”
  2. Connect a wire from your ESP8266 reset pin to GND
  3. Remove that wire from GND and connect to VCC

Repeat steps 2 and 3 a few times until your ESP reboots and hopefully the ESPlorer IDE can detect your ESP.

My code disappears when I restart the ESP8266

If you upload a script to your ESP and when you restart it your ESP doesn’t do anything. It means that your ESP couldn’t find the script or it occurred a memory issue.

This can be solved like this:

  1. You didn’t save your script with this exact name ‘init.lua’. Re-uploading the same script, but with the ‘init.lua’ name should solve your problem
  2. It can be a memory issue. Re-flashing the ESP with NodeMCU flasher usually solves that problem

Finding the ESP8266 IP Address

Before you start make sure you check these two items:

  1. Verify that the script uploaded to your ESP has the right network credentials
  2. Make sure your ESP is near your router

Here’s what you can do to find the IP address:

Solution 1 – Sending a command with the ESPlorer IDE

  1. Send the command “print(wifi.sta.getip())” with the ESPlorer IDE and it should print your IP Address

ESP IP Address

Solution 2 – Install an IP Scanner Software

  1. An IP Scanner software searches for all the devices in your network
  2. Download this free software:
    1. Windows PC: www.advanced-ip-scanner.com
    2. MAC OS X, Windows or Linux: http://angryip.org
  3. Install one of these softwares (while having your ESP running with that web server script)
  4. Open the IP Scanner software and click “Scan”
  5. Let that process finish (it can take a couple of minutes)

In my case, it found my ESP. Now if I type 192.168.1.95 in my browser I can see the ESP web server.

advanced ip scanner

ESP8266 Troubleshooting – Arduino IDE

I can’t upload scripts to my ESP8266 using the Arduino IDE

How to make your ESP go into upload mode when using the Arduino IDE:

  1. Remove power from your ESP8266
  2. Having your ESP connected like this (double check that GPIO 0 is connected to GND)
  3. Apply power to your ESP8266 and open the Arduino IDE
  4. Press the “Upload” button

Did you experience other problems?

Please leave a comment below, so I can update the troubleshooting guide with more problems and solutions.

Thanks for reading,

-Rui Santos

Проверка/Оформление/Редактирование: Мякишев Е.А.

Cat poo.png Черновик

При попытке загрузить ESP8266 получаю ошибку «espcomm_sync failed». Как решить эту проблему?[1]

Это сообщение информирует о проблеме с загрузкой прошивки на ESP8266 через последовательное соединение. Причина может варьироваться в зависимости от типа модуля, от параметров, выбранных при загрузке, от того, используете ли вы отдельный USB-Serial конвертер, и т.д. То есть одного простого ответа на то, что является основной причиной проблемы, нет. Чтобы найти ее, придется выполнить диагностику.

Примечание: Если вы новичок в теме ESP8266 и хотели бы избежать потенциальных проблем с загрузкой прошивки, купите модуль ESP8266 со встроенным конвертером USB-Serial. Это существенно сократит количество факторов (в частности, уменьшит возню с настройками), из-за которых вы можете случайно помешать процессу загрузки.

На картинке ниже показаны платы со встроенным конвертером USB-Serial. Их использование, повторюсь, значительно упростит разработку ваших первых проектов на ESP8266.

Если вы используете «голый» (стандартный) модуль ESP8266 (например, ESP-01 или ESP-12), самостоятельно подключенный к отдельному USB-Serial конвертеру, обязательно проделайте следующее:

  1. Обеспечьте модуль достаточным питанием
  2. Подключите контакты GPIO0, GPIO15 и CH_PD при помощи подтягивающих/стягивающих резисторов
  3. Переведите модуль в режим загрузчика

Более подробно читайте в разделе «Стандартные модули ESP8266» статьи «Платы для аддона ESP8266 для IDE Arduino». На картинке ниже показаны платы без встроенного конвертера USB-Serial:

Платы ESP8266 без встроенного конвертера USB-Serial

Предварительные проверки

Чтобы исправить ошибку «espcomm_sync failed», пройдите шаг за шагом инструкцию ниже. Это список решений, ранжированных от самого простого до самого сложного.

1. Прочтите сообщение, показанное в отладочном окне IDE Arduino. Во многих случаях оно предоставляет точную информацию о том, где именно возникла проблема.

Ошибка «Failed to open COM3»

К примеру, сообщение на картинке выше, говорит, что IDE Arduino не может открыть последовательный порт COM3. Следовательно, нужно проверить, выбран ли в IDE Arduino порт, к которому подключен ваш модуль.

Выбор последовательного порта

2. Если модуль подключен к последовательному порту, но не отвечает как модуль ESP8266, сообщение в отладочном окне будет слегка другим (см. ниже). Если к вашему ПК подключены другие модули, проверьте, что загрузили код на ESP8266, а не на, к примеру, Arduino UNO.

Ошибка «espcomm_sync failed»

3. Чтобы ваш ПК мог общаться с ESP8266, выберите в IDE Arduino правильный модуль ESP8266. Если выбрать неправильный модуль, загрузка прошивки может завершиться неудачей.

Выбор платы

Выбрать правильную плату нужно для того, чтобы IDE Arduino мог применить правильный «метод сброса» при переключении платы в режим загрузчика. Разные платы используют разные методы сброса. У некоторых плат нет аппаратных компонентов, чтобы выполнить сброс через IDE Arduino. В таком случае плату нужно перевести в режим загрузчика вручную.

4. Кроме того, загрузка прошивки может не удаться из-за слишком высокой скорости передачи данных. Если у вас длинный или некачественный USB-кабель, попробуйте снизить скорость загрузки в меню «Upload Speed».

Выбор скорости для передачи данных через последовательное соединение

Дополнительные проверки

1. Если проблема не исчезла, проверьте, точно ли модуль вошел в режим загрузчика. Для этого нужно подключить к ESP8266 добавочный конвертер USB-Serial, а затем посмотреть на показываемые сообщения.

Итак, для начала подключите контакты RX и GND конвертера к контактам TX и GND на ESP8266, как показано ниже:

Подключение добавочного USB-Serial конвертера

Затем откройте терминал на скорости 74880 бод и посмотрите, какие сообщения присылает ESP8266 при сбросе, выполняемом для загрузки прошивки. Правильное сообщение должно выглядеть примерно так:

ets Jan  8 2013,rst cause:2, boot mode:(1,7)

Если у вас появилось такое же сообщение, но с другими значениями, то расшифровать его можно при помощи таблицы из этой статьи (см. третью таблицу в разделе «Сообщения о режимах запуска и причине сброса/перезагрузки»). Ключевая информация содержится в первой цифре, находящейся в скобочках рядом с надписью «boot mode», как показано на картинке ниже:

Расшифровка сообщения о режиме запуска

К примеру, сообщение «boot mode (3, 3)» информирует, что контакты GPIO2 и GPIO0 выставлены на HIGH, а GPIO15 – на LOW. Это настройка для нормальной работы модуля (т.е. выполнения программы, записанной на flash-память), но не для режима загрузчика (т.е. программирования flash-памяти).

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

2. Вы убедились, что модуль находится в режиме загрузчика, но загрузить прошивку по-прежнему не удается. Если вы используете внешний конвертер USB-Serial, проверьте, правильно ли он работает, закольцевав выход на вход. Этой очень простая проверка. Просто подключите друг к другу контакты RX и TX на конвертере как показано на картинке ниже. Затем откройте монитор порта и впишите там несколько символов. Если все в порядке, то все написанные вами символы должны сразу же появится в мониторе порта. Чтобы выполнить такую проверку на модуле со встроенным USB-Serial конвертером, может понадобиться разрушить некоторые дорожки на печатной плате. Я бы сделал это лишь в полном отчаянии. Лучше попробуйте способы, описываемые еще ниже.

3. Еще один способ – это просмотр более детальных отладочных сообщений. Кликните в IDE Arduino на Файл > Настройки (File > Preferences) и поставьте галочку рядом с пунктом «Показать подробный вывод: Загрузка» («Show verbose output during: upload»). Чтобы загрузка прошивки была успешной, эти логи должны выглядеть примерно так:

C:UsersKrzysztofAppDataLocalArduino15packagesesp8266toolsesptool0.4.8/esptool.exe -vv -cd ck -cb 115200 -cp COM3 -ca 0x00000 -cf C:UsersKRZYSZ~1AppDataLocalTempbuild7e44b372385012e74d64fb272d24b802.tmp/Blink.ino.bin    esptool v0.4.8 - (c) 2014 Ch. Klippel <ck@atelier-klippel.de>       setting board to ck       setting baudrate from 115200 to 115200       setting port from COM1 to COM3       setting address from 0x00000000 to 0x00000000       espcomm_upload_file       espcomm_upload_mem       setting serial port timeouts to 1000 ms   opening bootloader   resetting board   trying to connect       flush start       setting serial port timeouts to 1 ms       setting serial port timeouts to 1000 ms       flush complete       espcomm_send_command: sending command header       espcomm_send_command: sending command payload       read 0, requested 1   trying to connect       flush start       setting serial port timeouts to 1 ms       setting serial port timeouts to 1000 ms       flush complete       espcomm_send_command: sending command header       espcomm_send_command: sending command payload       espcomm_send_command: receiving 2 bytes of data       espcomm_send_command: receiving 2 bytes of data       espcomm_send_command: receiving 2 bytes of data       espcomm_send_command: receiving 2 bytes of data       espcomm_send_command: receiving 2 bytes of data       espcomm_send_command: receiving 2 bytes of data       espcomm_send_command: receiving 2 bytes of data       espcomm_send_command: receiving 2 bytes of data   Uploading 226368 bytes from to flash at 0x00000000       erasing flash       size: 037440 address: 000000       first_sector_index: 0       total_sector_count: 56       head_sector_count: 16       adjusted_sector_count: 40       erase_size: 028000       espcomm_send_command: sending command header       espcomm_send_command: sending command payload       setting serial port timeouts to 15000 ms       setting serial port timeouts to 1000 ms       espcomm_send_command: receiving 2 bytes of data       writing flash   ..............................................................................................................................................................................................................................   starting app without reboot       espcomm_send_command: sending command header       espcomm_send_command: sending command payload       espcomm_send_command: receiving 2 bytes of data   closing bootloader       flush start       setting serial port timeouts to 1 ms       setting serial port timeouts to 1000 ms       flush complete

Логов может быть больше, и это зависит от количества попыток подключения, выполненных «esptool». Проанализируйте эти логи на предмет аномалий в настройках, выбранных в IDE Arduino – вроде другого последовательного порта, метода сброса, скорости передачи данных и т.д. Исправьте найденные ошибки.

Методы сброса

Если вы дошли досюда, а ошибка «espcomm_sync failed» никуда не делась, значит, пришло время расчехлить пушки покрупнее.

Чтобы понять, что происходит, подключите к контактам GPIO0, RST и RXD на ESP8266 осциллограф или логический анализатор. Затем сравните свои измерения с формой сигнала на графиках ниже. В них задокументированы два стандартных метода сброса ESP8266 для загрузки кода, которые можно выбрать в IDE Arduino – «ck» и «nodemcu».

Ck

На картинке ниже изображена цепь, специально подготовленная для определения формы сигнала при использовании метода «ck». Он проще сброса методом «nodemcu» и поэтому часто используется для подключения стандартных модулей ESP к макетной плате. Сверьте это подключение со своим.

Простая цепь для проверки метода «ck»

Графики ниже показывают сигналы напряжения на контактах GPIO0 и RST при загрузке прошивки.

Первый график показывает форму сигнала в начале загрузки кода.

Метод сброса «ck», начало загрузки кода

Второй график показывает полную загрузку скетча «Blink.io» на скорости 921600 бод. Это довольно высокая скорость, поэтому на загрузку уходит всего 8 секунд.

Метод сброса «ck», загрузка скетча «Blink.io»

Когда у «esptool» не получается выполнить загрузку, он инициализирует сброс. Подобная ситуация показана, к примеру, на графике ниже.

Метод сброса «ck», конец загрузки

Каждая новая попытка отображается в логах загрузки:

resetting board
trying to connect
    flush start
    setting serial port timeouts to 1 ms
    setting serial port timeouts to 1000 ms
    flush complete
    espcomm_send_command: sending command header
    espcomm_send_command: sending command payload
    read 0, requested 1

Цепь, показанная выше, имеет одно важное ограничение при работе с IDE Arduino. После открытия монитора порта ( Ctrl + ⇧ Shift + M ) линии RTS и DTR переключаются в состояние LOW. Поскольку линия RTS подключена к входной линии REST на ESP8266, то ESP8266 просто зависнет в состоянии сброса и запустить его будет нельзя. Следовательно, после загрузки прошивки вам нужно отключить обе линии или воспользоваться другой консолью (не монитором порта IDE Arduino), которая не переключает RTS и DTR в состояние LOW. В противном случае модуль зависнет в ожидании переключения REST в состояние HIGH и в мониторе порта ничего показывать не будет.

Что касается другой консоли, можно воспользоваться монитором порта IDE Arduino для ESP8266, разработанной пользователем mytrain и обсуждаемой в отчете 1360.

Если предпочитаете программы, то для Windows я бы порекомендовал бесплатную и удобную Termite.

Nodemcu

Метод сброса «nodemcu» получил название от платы NodeMCU, где он был реализован в самый первый раз. Этот метод позволяет обойти ограничения с управлением линиями RTS и DTR, о которых говорилось в главе о методе «ck».

Ниже показана простая цепь для измерения формы сигнала при помощи метода «nodemcu»:

Простая цепь для проверки метода «nodemcu»

Первый график показывает напряжение на контактах GPIO0 и RST в начале загрузки прошивки:

Метод сброса: «nodemcu», начало загрузки

Обратите внимание, что последовательность сигналов длится в 10 раз короче, чем при использовании метода «ck» – примерно 25 мс против 250 мс.

Второй график показывает загрузку скетча «Blink.ino» на скорости 921600 бод. Не считая разницы в длине последовательности сигналов, он выглядит как аналогичный график для метода «ck».

Метод сброса: «nodemcu», загрузка полностью

Третий график тоже демонстрирует загрузку скетча «Blink.ino» на скорости 921600 бод, но с двумя попытками сброса.

Метод сброса: «nodemcu», с двумя новыми попытками сброса

Если вам интересно, как реализуется этот метод сброса, обратите внимание на схемы ниже. Он не притягивает линии RTS и DTR к «земле», когда вы открываете в IDE Arduino монитор порта.

Реализация сброса методом «nodemcu»

Такая цепь состоит из двух транзисторов и резисторов, расположенных на плате NodeMCU. Слева изображены полная схема и таблица истинности – она показывает, как сигналы RTS и DTR на последовательном порту преобразуются в контакты RST и GPIO0 на ESP8266. Более подробно смотрите в репозитории NodeMCU на GitHub.

Эм… похоже, я застрял

Надеемся, советы выше помогли вам справиться с ошибкой «espcomm_sync failed», а загрузка прошивки на ESP8266 стала быстрой и беспроблемной.

Если опять нет, пробегитесь по вопросам ниже (они представляют короткую версию того, о чем писалось в главах выше):

Предварительные проверки

  • Подключен ли ваш модуль к последовательному порту? Видит ли его IDE Arduino?
  • Отвечает ли подключенный девайс на IDE Arduino? Какое именно сообщение появляется в отладочном окне?
  • Правильный ли модуль ESP8266 выбран в меню «Плата»? Что именно у вас выбрано?
  • Пробовали ли вы снизить скорость загрузки? Какую скорость вы уже попробовали?

Дополнительные проверки

  • Какое сообщение присылает ESP8266 на скорости 74880 бод, когда вы входите в режим загрузчика?
  • Проверяли ли вы конвертер USB-Serial, зациклив его? Каков был результат?
  • Соответствует ли информация, показанная в логах, настройкам IDE Arduino? Если да, что в них?

Метод сброса

  • Какой метод сброса вы используете?
  • Какая у вас схема подключения? Она соответствует той, что показана в FAQ?
  • Какую форму имеет сигнал во время сброса? Она соответствует форме сигнала в FAQ?
  • Какую форму имеет сигнал при полной загрузке скетча? Она соответствует форме сигнала в FAQ?

ПО

  • Вы используете стабильную версию аддона ESP8266 для IDE Arduino? Что это за версия?
  • Как называется и какая версия у ваших IDE и ОС?

Если застопорились на каком-то шаге, опишите его как можно подробней и обратитесь за помощью на форум сообщества ESP8266.

Итого

С таким разнообразием модулей и плат на базе ESP8266, а также возможных методов сброса, решение проблем с загрузкой может потребовать очень много проб и попыток.
Если вы новичок, лучше использовать платы со встроенными USB-Serial конвертером и цепью для питания. Осторожно проверяйте сообщения в отладочном окне, а затем действуйте согласно этим сообщениям. Выберите правильный тип модуля в IDE Arduino и правильно настройте скорость загрузки прошивки. Проверьте, действительно ли плата переключена в режим загрузчика. Проверьте работоспособность USB-Serial конвертера, зациклив его. Проанализируйте детальные логи на предмет несоответствий с настройками IDE Arduino.

Проверьте схему подключения и форму сигнала на соответствие используемому методу сброса.

Если застряли, спросите совета у сообщества, предоставив данные обо всех выполненных вами шагах.

Тестовая площадка, которой я пользовался для проверки метода «ck»

На картинке выше показана тестовая площадка для метода «ck».

Во время подготовки этой статьи не пострадало ни одного ESP8266.

См.также

Внешние ссылки

  1. arduino-esp8266.readthedocs.io — I am getting “espcomm_sync failed” error when trying to upload my ESP. How to resolve this issue?

Понравилась статья? Поделить с друзьями:
  • Esp8266 ошибка при загрузке
  • Esp ошибка фольксваген кадди
  • Esp ошибка фольксваген джетта
  • Esp ошибка фольксваген гольф
  • Esp ошибка рено флюенс