Time-out while uploading sketch

Hi everyone,

Got an issue since a few hours with my NodeMCU v0.1 (ESP12E)
Problem started after I have tested the OTA functionality (but I have no idea if it could be related)

So brief history:

  • I'm quite new to Arduino and the ESP stuff (2 weeks)
  • So far I have been able to work without issues with the NodeMCU. Uploaded data to a local MQTT, read data from MQTT, OLED, sensors... all well (this just to illustrate that the communication over serial port towards my PC works, or at least worked, flawlessly)
  • This morning I was going to try the OTA functionality, as the idea is that this node will be located somewhere in the garden, and I want to be able to change code without having to leave my desk to go and get the little critter on my desk. Also the idea is that in the end I make my own PCB with a ESP12E directly soldered onto it, so without the USB port whatsoever.
    Anyway:
    OTA worked flawlessly, I also discovered in the same run that you don't need to add your SSID + Pasword in each sketch, but it is stored in some special registers => cool!
    However:
    Since I have activated the OTA, I can no longer upload code over the serial port. The infamous error:
    "Write Timeout
    Doesn't exist or board not connected"
    I did several tests, resets, restarts, Googled ... to no avail.
    Then I did something "stupid" - I guess - I uploaded code over OTA, without the OTA functionality... The idea I had about was: Maybe the chip now only accepts OTA updates as it's configured for OTA, so if I upload a sketch without the OTA, the serial will become back alive.
    Well not exactly... So the upload worked (I just used the blink example) and the onboard led started blinking, however I can still not upload over serial, but off course the OTA option is also ruled out at the same time...

Again I've been looking and searching around for a solution, but no luck so far, hence my post here.

What I already did:

  • changed USB ports and cables (btw it's a Desktop, no laptop where sometimes the USB voltages drop on battery drain)
  • Restarted PC
  • Did a java update the PC was asking for
  • Did the Loopback test (which was successfull by the way)
  • Read board info works (alltough it's a chinese clone, so not much usefull info)
  • Upload baudrate to each and every available option. However: sidenote here: I can only select 115200 (which I used since the start), 57600, 256000, 512000, 921600, 3000000. I say this as some threads left and right instruct to select 9600... Another thing I like to mention here. I sometimes received jibberish characters in the serial monitor (while selecting serial monitor baudrate) Untill I chose 74880, from that moment on I get some output while pressing the reset button:
    ets Jan 8 2013,rst cause:2, boot mode:(3,7)

ets_main.c
Also during al my tests at a certain moment something has been written as the blink led doesn't function anymore.

So now I'm basically stuck...
The thing that confuses me most is the baudrate of 74880. In none of my sketches I have mentioned that serial speed. So it's some kind of default from somewhere... ?

  • First thing: How to get my Node back to life (respond to serial uploads)
  • Find out what's the relationship between the OTA adn the failing serial connection.

Thanks in advance.
Sorry for the long read.

EDIT:

  • I have tested with another NodeMCU on same PC, cables, USB and = successfull. So I can only conclude the problem resides within the module itself.
  • I read about RESET issues. So I tied RST to GND while compiling and when serial monitor tries to connect remove the wire : no luck either

Can someone point me to clear step-by-step instructions to reflash the firmware?

Nevermind, was easier in the end then I read about with TTL converters and stuff.
Flash is ongoing. But it sems to take a while..., normal? Any hints about the actual time this could take?

Update:
So after a successfull flash of a new firmware image I was once again able to upload new sketches.

Yippie

However:
In order to determine if the OTA example was indeed the issue I reuploaded the sketch and BAM: same issue.

I’ll post the code here later, but it’s just basically the OTA example where I added a small pwm part to have the on board led fade-out/fade-in

I didn’t notice this this morning, but even while uploading the “uploadconsole” doesn’t finish entirely.
Last upload percentage is about 70% and the message about the RTS hard reset thing doesn’t show up. However the code runs.

To be continued?

Small question: could it be that the continuous PWM switching creates noise on the supply voltage which in turn creates noise on the USB comm causing it it fail?

I don’t have a scope able to measure such thing...

Sketch and schematics please.

Could you also take a few moments to Learn How To Use The Forum.
Other general help and troubleshooting advice can be found here.
It will help you get the best out of the forum in the future.

I have to post everything in various messages as the forum won't allow me to put it all-in-one.

Schematics: none. There's nothing connected besides the USB on the NodeMCU (at first there was, but I disconnected everything to isolate the issue towards the NodeMCU)

I just reflashed the firmware and I load the sketches in this order one after another:

#1 The "Blink" example that came with the 1.8.13 IDE just to get the on board LED on/off

this works

#2 A sketch to set the wifi credentials, so I don't have to hardcode those in each and every sketch

this works

#include <ESP8266WiFi.h>

#ifndef STASSID
#define STASSID "*****************"
#define STAPSK  "*****************"
#endif

const char* ssid = STASSID;
const char* password = STAPSK;

void setup() {
  Serial.begin(115200) ;
  while(!Serial) ;    // time to get serial running

  WiFi.mode(WIFI_STA);

  WiFi.begin(ssid, password);
    
  Serial.print("Connecting to WiFi") ;
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    //WiFi.begin(ssid, password) ;
    Serial.print(".") ;
  }
  Serial.println("") ;
  Serial.print("Connected to WiFi : ") ;
  Serial.println(WiFi.SSID()) ;
}

void loop() {
  // put your main code here, to run repeatedly:
}

#3 A sketch to test if wifi credentials are indeed permanently stored

this works

#include <ESP8266WiFi.h>

void setup() {
  Serial.begin(115200) ;
  while(!Serial) ;    // time to get serial running
    
  Serial.print("Connecting to WiFi") ;
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    //WiFi.begin(ssid, password) ;
    Serial.print(".") ;
  }
  Serial.println("") ;
  Serial.print("Connected to persistent WiFi : ") ;
  Serial.println(WiFi.SSID()) ;
}

void loop() {
  // put your main code here, to run repeatedly:
}

#4 BasicOTA example that came with the 1.8.13 IDE where I commented out some lines as not needed, due to #2 and #3

this works. As from this point I have an additional communication port available with the IP of my ESP. ESP receives "fixed" IP based on MAc from my local DHCP server

#include <ESP8266WiFi.h>
//#include <ESP8266mDNS.h>
//#include <WiFiUdp.h>
#include <ArduinoOTA.h>

//#ifndef STASSID
//#define STASSID "your-ssid"
//#define STAPSK  "your-password"
//#endif
//
//const char* ssid = STASSID;
//const char* password = STAPSK;

void setup() {
  Serial.begin(115200);
  Serial.println("Booting");
  WiFi.mode(WIFI_STA);
  //WiFi.begin(ssid, password);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("Connection Failed! Rebooting...");
    delay(5000);
    ESP.restart();
  }

  // Port defaults to 8266
  // ArduinoOTA.setPort(8266);

  // Hostname defaults to esp8266-[ChipID]
  // ArduinoOTA.setHostname("myesp8266");

  // No authentication by default
  // ArduinoOTA.setPassword("admin");

  // Password can be set with it's md5 value as well
  // MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
  // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");

  ArduinoOTA.onStart([]() {
    String type;
    if (ArduinoOTA.getCommand() == U_FLASH) {
      type = "sketch";
    } else { // U_FS
      type = "filesystem";
    }

    // NOTE: if updating FS this would be the place to unmount FS using FS.end()
    Serial.println("Start updating " + type);
  });
  ArduinoOTA.onEnd([]() {
    Serial.println("\nEnd");
  });
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  });
  ArduinoOTA.onError([](ota_error_t error) {
    Serial.printf("Error[%u]: ", error);
    if (error == OTA_AUTH_ERROR) {
      Serial.println("Auth Failed");
    } else if (error == OTA_BEGIN_ERROR) {
      Serial.println("Begin Failed");
    } else if (error == OTA_CONNECT_ERROR) {
      Serial.println("Connect Failed");
    } else if (error == OTA_RECEIVE_ERROR) {
      Serial.println("Receive Failed");
    } else if (error == OTA_END_ERROR) {
      Serial.println("End Failed");
    }
  });
  ArduinoOTA.begin();
  Serial.println("Ready");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  ArduinoOTA.handle();
}

#5 Same as BasicOTA, I just added the blink code from first sketch to have a validation the OTA works as serial monitor doesn't work when connected to the IP from IDE

This works, uploaded via OTA

#include <ESP8266WiFi.h>
#include <ArduinoOTA.h>

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  
  Serial.begin(115200);
  Serial.println("Booting");
  WiFi.mode(WIFI_STA);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("Connection Failed! Rebooting...");
    delay(5000);
    ESP.restart();
  }

  ArduinoOTA.onStart([]() {
    String type;
    if (ArduinoOTA.getCommand() == U_FLASH) {
      type = "sketch";
    } else { // U_FS
      type = "filesystem";
    }

    // NOTE: if updating FS this would be the place to unmount FS using FS.end()
    Serial.println("Start updating " + type);
  });
  ArduinoOTA.onEnd([]() {
    Serial.println("\nEnd");
  });
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  });
  ArduinoOTA.onError([](ota_error_t error) {
    Serial.printf("Error[%u]: ", error);
    if (error == OTA_AUTH_ERROR) {
      Serial.println("Auth Failed");
    } else if (error == OTA_BEGIN_ERROR) {
      Serial.println("Begin Failed");
    } else if (error == OTA_CONNECT_ERROR) {
      Serial.println("Connect Failed");
    } else if (error == OTA_RECEIVE_ERROR) {
      Serial.println("Receive Failed");
    } else if (error == OTA_END_ERROR) {
      Serial.println("End Failed");
    }
  });
  ArduinoOTA.begin();
  Serial.println("Ready");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  ArduinoOTA.handle();
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

#6 same as above, only I change blink speed + upload via serial, to validate serial upload still working

This works

#7 same as #5 over OTA

This works

So at this point I have a NodeMCU where I can update both from serial as over OTA without any issue.

#8 The sketch afterwards everything goes downhill (upload over serial) It's the OTALeds example that came with the 1.8.13 IDE where i commented out/removed same stuff as in #4. Also I changed the led_pin declaration to 2 for piloting the on_board led

#include <ESP8266WiFi.h>
#include <ArduinoOTA.h>

int led_pin = 2; //on board LED
#define N_DIMMERS 3
int dimmer_pin[] = {14, 5, 15};

void setup() {
  Serial.begin(115200);

  /* switch on led */
  pinMode(led_pin, OUTPUT);
  digitalWrite(led_pin, LOW);

  Serial.println("Booting");
  WiFi.mode(WIFI_STA);

  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("Retrying connection...");
  }
  /* switch off led */
  digitalWrite(led_pin, HIGH);

  /* configure dimmers, and OTA server events */
  analogWriteRange(1000);
  analogWrite(led_pin, 990);

  for (int i = 0; i < N_DIMMERS; i++) {
    pinMode(dimmer_pin[i], OUTPUT);
    analogWrite(dimmer_pin[i], 50);
  }

  //ArduinoOTA.setHostname(host);
  ArduinoOTA.onStart([]() { // switch off all the PWMs during upgrade
    for (int i = 0; i < N_DIMMERS; i++) {
      analogWrite(dimmer_pin[i], 0);
    }
    analogWrite(led_pin, 0);
  });

  ArduinoOTA.onEnd([]() { // do a fancy thing with our board led at end
    for (int i = 0; i < 30; i++) {
      analogWrite(led_pin, (i * 100) % 1001);
      delay(50);
    }
  });

  ArduinoOTA.onError([](ota_error_t error) {
    (void)error;
    ESP.restart();
  });

  /* setup the OTA server */
  ArduinoOTA.begin();
  Serial.println("Ready");

}

void loop() {
  ArduinoOTA.handle();
}

ERRORS during upload:

Arduino: 1.8.13 (Windows Store 1.8.39.0) (Windows 10), Board:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200"

Executable segment sizes:

IROM   : 281492          - code in flash         (default or ICACHE_FLASH_ATTR) 

IRAM   : 28432   / 32768 - code in IRAM          (ICACHE_RAM_ATTR, ISRs...) 

DATA   : 1288  )         - initialized variables (global, static) in RAM/HEAP 

RODATA : 1032  ) / 81920 - constants             (global, static) in RAM/HEAP 

BSS    : 25752 )         - zeroed variables      (global, static) in RAM/HEAP 

De schets gebruikt 312244 bytes (29%)  programma-opslagruimte. Maximum is 1044464 bytes.

Globale variabelen gebruiken 28072 bytes (34%) van het dynamisch geheugen. Resteren 53848 bytes voor lokale variabelen. Maximum is 81920 bytes.

C:\Users\Els\Documents\ArduinoData\packages\esp8266\tools\python3\3.7.2-post1/python3 C:\Users\Els\Documents\ArduinoData\packages\esp8266\hardware\esp8266\2.7.2/tools/upload.py --chip esp8266 --port COM6 --baud 115200 --before default_reset --after hard_reset write_flash 0x0 C:\Users\Els\AppData\Local\Temp\arduino_build_866612/OTA_test.ino.bin 

esptool.py v2.8

Serial port COM6

Connecting....

Chip is ESP8266EX

Features: WiFi

Crystal is 26MHz

MAC: d8:bf:c0:ff:6d:fe

Uploading stub...

Running stub...

Stub running...

Configuring flash size...

Auto-detected Flash size: 4MB

Compressed 316400 bytes to 229498...

Writing at 0x00004000... (13 %)Traceback (most recent call last):

  File "C:\Users\Els\Documents\ArduinoData\packages\esp8266\hardware\esp8266\2.7.2/tools/upload.py", line 65, in <module>

    esptool.main(cmdline)

  File "C:/Users/Els/Documents/ArduinoData/packages/esp8266/hardware/esp8266/2.7.2/tools/esptool\esptool.py", line 2938, in main

    operation_func(esp, args)

  File "C:/Users/Els/Documents/ArduinoData/packages/esp8266/hardware/esp8266/2.7.2/tools/esptool\esptool.py", line 2374, in write_flash

    esp.flash_defl_block(block, seq, timeout=DEFAULT_TIMEOUT * ratio * 2)

  File "C:/Users/Els/Documents/ArduinoData/packages/esp8266/hardware/esp8266/2.7.2/tools/esptool\esptool.py", line 104, in inner

    return func(*args, **kwargs)

  File "C:/Users/Els/Documents/ArduinoData/packages/esp8266/hardware/esp8266/2.7.2/tools/esptool\esptool.py", line 672, in flash_defl_block

    self.ESP_FLASH_DEFL_DATA, struct.pack('<IIII', len(data), seq, 0, 0) + data, self.checksum(data), timeout=timeout)

  File "C:/Users/Els/Documents/ArduinoData/packages/esp8266/hardware/esp8266/2.7.2/tools/esptool\esptool.py", line 379, in check_command

    raise FatalError.WithResult('Failed to %s' % op_description, status_bytes)

esptool.FatalError: Failed to write compressed data to flash after seq 1 (result was C100)

esptool.FatalError: Failed to write compressed data to flash after seq 1 (result was C100)

From this point I can no longer update the code not over OTA, not over Serial. Test while uploading basic "Blink" sketch (#1)
OTA:

Arduino: 1.8.13 (Windows Store 1.8.39.0) (Windows 10), Board:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200"

Executable segment sizes:

IROM   : 228624          - code in flash         (default or ICACHE_FLASH_ATTR) 

IRAM   : 26756   / 32768 - code in IRAM          (ICACHE_RAM_ATTR, ISRs...) 

DATA   : 1248  )         - initialized variables (global, static) in RAM/HEAP 

RODATA : 688   ) / 81920 - constants             (global, static) in RAM/HEAP 

BSS    : 24880 )         - zeroed variables      (global, static) in RAM/HEAP 

De schets gebruikt 257316 bytes (24%)  programma-opslagruimte. Maximum is 1044464 bytes.

Globale variabelen gebruiken 26816 bytes (32%) van het dynamisch geheugen. Resteren 55104 bytes voor lokale variabelen. Maximum is 81920 bytes.

C:\Users\Els\Documents\ArduinoData\packages\esp8266\tools\python3\3.7.2-post1/python3 C:\Users\Els\Documents\ArduinoData\packages\esp8266\hardware\esp8266\2.7.2/tools/espota.py -i 192.168.1.100 -p 8266 --auth= -f C:\Users\Els\AppData\Local\Temp\arduino_build_468800/Blink.ino.bin 

10:19:34 [ERROR]: No Answer

10:19:34 [ERROR]: No Answer

Serial:

Arduino: 1.8.13 (Windows Store 1.8.39.0) (Windows 10), Board:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200"

Executable segment sizes:

IROM   : 228624          - code in flash         (default or ICACHE_FLASH_ATTR) 

IRAM   : 26756   / 32768 - code in IRAM          (ICACHE_RAM_ATTR, ISRs...) 

DATA   : 1248  )         - initialized variables (global, static) in RAM/HEAP 

RODATA : 688   ) / 81920 - constants             (global, static) in RAM/HEAP 

BSS    : 24880 )         - zeroed variables      (global, static) in RAM/HEAP 

De schets gebruikt 257316 bytes (24%)  programma-opslagruimte. Maximum is 1044464 bytes.

Globale variabelen gebruiken 26816 bytes (32%) van het dynamisch geheugen. Resteren 55104 bytes voor lokale variabelen. Maximum is 81920 bytes.

C:\Users\Els\Documents\ArduinoData\packages\esp8266\tools\python3\3.7.2-post1/python3 C:\Users\Els\Documents\ArduinoData\packages\esp8266\hardware\esp8266\2.7.2/tools/upload.py --chip esp8266 --port COM6 --baud 115200 --before default_reset --after hard_reset write_flash 0x0 C:\Users\Els\AppData\Local\Temp\arduino_build_468800/Blink.ino.bin 

esptool.py v2.8

Serial port COM6

Connecting....

Chip is ESP8266EX

Features: WiFi

Crystal is 26MHz

MAC: d8:bf:c0:ff:6d:fe

Uploading stub...

Running stub...

Stub running...

Configuring flash size...

Auto-detected Flash size: 4MB

Compressed 261472 bytes to 193181...

Writing at 0x00004000... (16 %)Traceback (most recent call last):

  File "C:\Users\Els\Documents\ArduinoData\packages\esp8266\hardware\esp8266\2.7.2/tools/upload.py", line 65, in <module>

    esptool.main(cmdline)

  File "C:/Users/Els/Documents/ArduinoData/packages/esp8266/hardware/esp8266/2.7.2/tools/esptool\esptool.py", line 2938, in main

    operation_func(esp, args)

  File "C:/Users/Els/Documents/ArduinoData/packages/esp8266/hardware/esp8266/2.7.2/tools/esptool\esptool.py", line 2374, in write_flash

    esp.flash_defl_block(block, seq, timeout=DEFAULT_TIMEOUT * ratio * 2)

  File "C:/Users/Els/Documents/ArduinoData/packages/esp8266/hardware/esp8266/2.7.2/tools/esptool\esptool.py", line 104, in inner

    return func(*args, **kwargs)

  File "C:/Users/Els/Documents/ArduinoData/packages/esp8266/hardware/esp8266/2.7.2/tools/esptool\esptool.py", line 672, in flash_defl_block

    self.ESP_FLASH_DEFL_DATA, struct.pack('<IIII', len(data), seq, 0, 0) + data, self.checksum(data), timeout=timeout)

  File "C:/Users/Els/Documents/ArduinoData/packages/esp8266/hardware/esp8266/2.7.2/tools/esptool\esptool.py", line 379, in check_command

    raise FatalError.WithResult('Failed to %s' % op_description, status_bytes)

esptool.FatalError: Failed to write compressed data to flash after seq 1 (result was C100)

esptool.FatalError: Failed to write compressed data to flash after seq 1 (result was C100)

After power cycling the NodeMCU and trying upload over serial:

Arduino: 1.8.13 (Windows Store 1.8.39.0) (Windows 10), Board:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200"

Executable segment sizes:

IROM   : 228624          - code in flash         (default or ICACHE_FLASH_ATTR) 

IRAM   : 26756   / 32768 - code in IRAM          (ICACHE_RAM_ATTR, ISRs...) 

DATA   : 1248  )         - initialized variables (global, static) in RAM/HEAP 

RODATA : 688   ) / 81920 - constants             (global, static) in RAM/HEAP 

BSS    : 24880 )         - zeroed variables      (global, static) in RAM/HEAP 

De schets gebruikt 257316 bytes (24%)  programma-opslagruimte. Maximum is 1044464 bytes.

Globale variabelen gebruiken 26816 bytes (32%) van het dynamisch geheugen. Resteren 55104 bytes voor lokale variabelen. Maximum is 81920 bytes.

C:\Users\Els\Documents\ArduinoData\packages\esp8266\tools\python3\3.7.2-post1/python3 C:\Users\Els\Documents\ArduinoData\packages\esp8266\hardware\esp8266\2.7.2/tools/upload.py --chip esp8266 --port COM6 --baud 115200 --before default_reset --after hard_reset write_flash 0x0 C:\Users\Els\AppData\Local\Temp\arduino_build_468800/Blink.ino.bin 

esptool.py v2.8

Serial port COM6

Connecting....

Chip is ESP8266EX

Features: WiFi

Crystal is 26MHz

MAC: d8:bf:c0:ff:6d:fe

Uploading stub...

Running stub...

Stub running...

Configuring flash size...

Auto-detected Flash size: 4MB

Compressed 261472 bytes to 193181...

Writing at 0x00004000... (16 %)Traceback (most recent call last):

  File "C:\Users\Els\Documents\ArduinoData\packages\esp8266\hardware\esp8266\2.7.2/tools/upload.py", line 65, in <module>

    esptool.main(cmdline)

  File "C:/Users/Els/Documents/ArduinoData/packages/esp8266/hardware/esp8266/2.7.2/tools/esptool\esptool.py", line 2938, in main

    operation_func(esp, args)

  File "C:/Users/Els/Documents/ArduinoData/packages/esp8266/hardware/esp8266/2.7.2/tools/esptool\esptool.py", line 2374, in write_flash

    esp.flash_defl_block(block, seq, timeout=DEFAULT_TIMEOUT * ratio * 2)

  File "C:/Users/Els/Documents/ArduinoData/packages/esp8266/hardware/esp8266/2.7.2/tools/esptool\esptool.py", line 104, in inner

    return func(*args, **kwargs)

  File "C:/Users/Els/Documents/ArduinoData/packages/esp8266/hardware/esp8266/2.7.2/tools/esptool\esptool.py", line 672, in flash_defl_block

    self.ESP_FLASH_DEFL_DATA, struct.pack('<IIII', len(data), seq, 0, 0) + data, self.checksum(data), timeout=timeout)

  File "C:/Users/Els/Documents/ArduinoData/packages/esp8266/hardware/esp8266/2.7.2/tools/esptool\esptool.py", line 369, in check_command

    val, data = self.command(op, data, chk, timeout=timeout)

  File "C:/Users/Els/Documents/ArduinoData/packages/esp8266/hardware/esp8266/2.7.2/tools/esptool\esptool.py", line 337, in command

    self.write(pkt)

  File "C:/Users/Els/Documents/ArduinoData/packages/esp8266/hardware/esp8266/2.7.2/tools/esptool\esptool.py", line 300, in write

    self._port.write(buf)

  File "C:/Users/Els/Documents/ArduinoData/packages/esp8266/hardware/esp8266/2.7.2/tools/pyserial\serial\serialwin32.py", line 323, in write

    raise writeTimeoutError

serial.serialutil.SerialTimeoutException: Write timeout

de geselecteerde seriële poort serial.serialutil.SerialTimeoutException: Write timeout

 bestaat niet of uw board is niet aangesloten.
  • I still "see" the IP-address in the ports menu in the IDE (but IP is not responsive to ping requests)
  • Windows gives me the "plong/pling" upon disconnect/reconnect from USB
  • The serial port seems to have fallen back to baud 74880, as when I set the serial monitor to that baud rate and press the reset button I get:
 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

ets_main.c

I hope someone is willing to do this test him/herself to confirm.

WARNING: only way to get your NodeMCU back up and running (at least in my experience) is doing a firmware flash.

Most of the ESP based boards have two baud rates.

One is an odd baud rate that tends to only occur during boot up of the board. (more like a BIOS type boot)
The other tends to be whatever you have set / called for sketch usage.

Window store version of the IDE has caused some odd issues for some people and quite often the advice is to move to a proper install of the IDE which seems to help a lot of people (not all)

OTA can on occasion also be problematic for some users and more often than not it seems to be ESP based.
That is not something I have much experience of and I think a lot of the ESP forums may be a better source of answers.

You could also use the search facility that will bring up OTA issues (the magnifying glass at the upper right of the page)