[ask for help] ESP8266MOD couldn't into AT mode

I used Arduino UNO + Arduino IDE to program a ESP8266MOD, and have installed board info in "Board Manager",

my wiring was:

the photo:

the code:

/*
 * testESP8266 - AT
 */
 
#include <SoftwareSerial.h>

SoftwareSerial ESPserial(8, 7); // RX | TX

void setup()
{

  Serial.begin(115200); // communication with the host computer
  //while (!Serial) { ; }
  
  // Start the software serial for communication with the ESP8266
  ESPserial.begin(115200);

  Serial.println("");
  Serial.println("Remember to to set Both NL & CR in the serial monitor.");
  Serial.println("Ready");
  Serial.println("");
}

void loop()
{
  // listen for communication from the ESP8266 and then write it to the serial monitor
  if ( ESPserial.available() ) { Serial.write( ESPserial.read() ); }
  
  // listen for user input and send it to the ESP8266
  if ( Serial.available() ) { ESPserial.write( Serial.read() ); }
}

and the prompt:

Executable segment sizes:
ICACHE : 32768           - flash instruction cache 
IROM   : 241360          - code in flash         (default or ICACHE_FLASH_ATTR) 
IRAM   : 29673   / 32768 - code in IRAM          (IRAM_ATTR, ISRs...) 
DATA   : 1496  )         - initialized variables (global, static) in RAM/HEAP 
RODATA : 1084  ) / 81920 - constants             (global, static) in RAM/HEAP 
BSS    : 26056 )         - zeroed variables      (global, static) in RAM/HEAP 
Sketch uses 273613 bytes (28%) of program storage space. Maximum is 958448 bytes.
Global variables use 28636 bytes (34%) of dynamic memory, leaving 53284 bytes for local variables. Maximum is 81920 bytes.
esptool.py v3.0
Serial port /dev/ttyACM0
Connecting........_____....._____....._____....._____....._____....._____....._____
Traceback (most recent call last):
  File "/home/mianqi/.arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/upload.py", line 66, in <module>
    esptool.main(cmdline)
  File "/home/mianqi/.arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/esptool/esptool.py", line 3552, in main
    esp.connect(args.before, args.connect_attempts)
  File "/home/mianqi/.arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/esptool/esptool.py", line 529, in connect
    raise FatalError('Failed to connect to %s: %s' % (self.CHIP_NAME, last_error))
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header

any diagnose?

is the esp8266 in bootloader mode (io 0 LOW at boot)?

the softwareserial is not reliable at 115200 baud. upload Blink into Uno and then wire esp8266 to RX and TX of Uno to use the USB of Uno directly. wire RX to RX, TX to TX (because the RX pin is already wired to TX of the USB chip).