Preview build — page text is a draft awaiting human review. Code badges come from real compiles. The flasher is real but not yet hardware-tested; the Playground is still a preview.
Serial · ESP8266

Fix: ESP8266 prints garbage in Serial Monitor after reset (74880 baud)

The junk characters at reset are the ESP8266 boot log sent at 74880 baud. Set the monitor to 74880 to read it, or ignore it — your 115200 output follows.

NodeMCU ESP8266Wemos D1 miniESP-01Updated 3 Nov 2026

Community draft — report a mistake

What you see

OutputOutput
--- Serial Monitor at 115200 ---
rl␀l��|␀�l�|␂␌␌␌�␌l�␌b|��␂�␒�r�b�␌b��on�␀␌�l��on␌␌␌�␂␌␌␌␌b␌␌␌␂␌
=== FlashReady ESP8266 reset report ===
Reset reason : 6 = External System

--- Same reset at 74880 ---
 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 3460, room 16
tail 4
chksum 0xcc
load 0x3fff20b8, len 40, room 4
tail 4
chksum 0xc9
csum 0xc9
v00062e60
~ld

The ESP8266’s ROM bootloader prints a short status message every time it starts. Because of the crystal fitted to nearly every module, that message goes out at the odd speed of 74880 baud. At 115200 it shows up as a burst of junk characters.

That’s normal and harmless. When the board is misbehaving, though, switch the monitor to 74880. The boot log tells you why it reset.

Quick fix — try in order

  1. 1

    If your own text follows, ignore the junk

    The garbled line is the chip's ROM talking at a different speed. Your sketch's Serial.begin(115200) output comes right after it.

  2. 2

    To read the boot log, set the monitor to 74880

    Serial Monitor → baud drop-down → 74880. Now you see “rst cause” and “boot mode”, which tell you why the chip reset.

  3. 3

    Or run your sketch at 74880 too

    Serial.begin(74880); and set the monitor to 74880 — then both the boot log and your output are readable.

  4. 4

    Garbage all the time? Match the baud rate

    If nothing is ever readable, the monitor speed doesn't match Serial.begin(). Set both to the same value. See Serial Monitor shows garbage.

Diagnostic sketch

Verified — core esp8266 3.1.2, 3 Nov 2026Compile-only
esp8266-reset-info.inoArduino C++Open in PlaygroundOpen in Playground
// FlashReady diagnostic: why did my ESP8266 reset?
// Prints the SDK reset reason (with the exception details after a crash), the real flash
// chip size versus the size chosen in Tools -> Flash Size, then a heartbeat every 5 s.
// Open Serial Monitor at 115200. The ROM's own boot line ("rst cause:..") is printed at 74880
// baud and shows up as a few garbage characters first - that is normal.
#include <user_interface.h>

void setup() {
  Serial.begin(115200);
  delay(200);
  Serial.println();
  Serial.println("=== FlashReady ESP8266 reset report ===");
  rst_info *info = ESP.getResetInfoPtr();
  // SDK numbering: 0 power-on, 1 hardware WDT, 2 exception, 3 soft WDT, 4 soft restart,
  // 5 deep-sleep wake, 6 external reset (RST pin). Not the same numbers as the ROM's "rst cause".
  Serial.printf("Reset reason : %u = %s\n", info->reason, ESP.getResetReason().c_str());
  Serial.printf("Reset info   : %s\n", ESP.getResetInfo().c_str());
  if (info->reason == REASON_EXCEPTION_RST) {
    Serial.printf("Exception    : (%u) at epc1=0x%08x - paste the stack into the Exception Decoder\n",
                  info->exccause, info->epc1);
  }

  uint32_t real = ESP.getFlashChipRealSize();
  uint32_t ide = ESP.getFlashChipSize();
  Serial.printf("Flash (chip) : %u KB (id 0x%06x)\n", real / 1024, ESP.getFlashChipId());
  Serial.printf("Flash (IDE)  : %u KB\n", ide / 1024);
  if (real != ide) {
    Serial.println("WARNING      : Tools -> Flash Size does not match the chip. Fix it and re-upload.");
  }
  Serial.printf("Core / SDK   : %s / %s\n", ESP.getCoreVersion().c_str(), ESP.getSdkVersion());
  Serial.printf("Free heap    : %u bytes\n", ESP.getFreeHeap());
  Serial.println("=======================================");
}

void loop() {
  static uint32_t last = 0;
  if (millis() - last >= 5000) {
    last = millis();
    Serial.printf("alive, uptime %lu s\n", millis() / 1000);
  }
}

Why it happens

Why 74880?

The ESP8266 ROM was written for a 40 MHz crystal and talks at 115200 with it. Most modules use a 26 MHz crystal, so the real speed is 115200 × 26 / 40 = 74880 baud.

Why does this matter?

The boot log is the only place you see crash and boot-mode information: rst cause:4 (watchdog), boot mode:(1,6) (GPIO0 low) and so on.

Board-specific notes

ESP-01: With a USB-TTL adapter, the same garbage appears every time the module powers up. It's normal.

↑↓ to move · Enter to open