# Serial Monitor shows garbage characters: baud rate and boot text

> Fix garbled text in the Arduino Serial Monitor: baud rate mismatch, the ESP8266 boot message and clock or line-ending problems.

Canonical: https://roboticsengineering.in/fix/serial-monitor-shows-garbage-characters/ | Published: 2026-11-03 | Updated: 2026-11-04

**Garbage in the Serial Monitor almost always means the two ends disagree about the baud rate.** The number in Serial.begin() must match the number chosen in the monitor.

## What the message means

Serial data is timed by the baud rate. If the receiver samples at a different speed, each character is read wrongly and you see random symbols.

## Fix it in this order

1. Match the baud rate: the number in Serial.begin(115200) and the drop-down in the Serial Monitor.
2. On ESP8266 boards the boot loader prints at 74880 baud. A burst of garbage at reset followed by clean text is normal.
3. Check the board is not running from a very different clock than the one the sketch was built for.
4. Try a shorter or better cable if the text is garbled only in places.
5. Use a common ground when you connect a second board by serial.

## Why it happens

Nearly always the baud rate in the Serial Monitor does not match the number in Serial.begin(). Set the drop-down at the bottom of the monitor to the same value, for example 115200 for most ESP32 sketches and 9600 for many Arduino examples.

Other causes: a boot message printed by the ESP32 at 74880 baud before your sketch starts, a wrong board selected, or a long or poor USB cable. If one line is garbage at reset and the rest is fine, it is the boot message.

## If you see this, do this

| You see | Do this |
| --- | --- |
| Garbage only at reset, clean afterwards | Boot text at another baud rate. Ignore it. |
| Garbage always | Baud mismatch. Match both ends. |
| Garbage only with long wires | Noise. Shorten the cable. |

## Related

[Arduino IDE setup](https://roboticsengineering.in/arduino-ide-setup/), [Serial Monitor shows nothing](https://roboticsengineering.in/fix/serial-monitor-shows-nothing/).

Last reviewed: November 2026. These are the usual causes and the order that finds them fastest. Test on your own board; clones and cables differ.

## Why this happens

Serial communication has no clock wire. Each byte is sent as a start bit, eight data bits and a stop bit, and the receiver times each bit from the falling edge of the start bit. If the receiver’s bit time differs from the sender’s, the samples land in the wrong place and the byte comes out as something else. A small error is tolerated, but a different baud setting is far outside that.

At 115200 baud one bit lasts about 8.68 microseconds; at 9600 baud it is about 104 microseconds. A receiver set to 9600 therefore treats one 115200 bit as a tiny fraction of a bit and misreads most bytes, giving random symbols.

## How to confirm the cause

- Look at the baud drop-down in the monitor and the number in Serial.begin(). They must be identical.
- Try the common rates in turn, starting with 115200 and 9600. If text becomes readable at one, that is the sender’s rate.
- If the garbage appears only for the first line after reset, it is probably the boot message at a different rate, not your sketch.
- If the text is half right and half wrong, test another cable and keep the wires short; noise causes occasional bad bytes, not constant garbage.
- On a 3.3 V 8 MHz Pro Mini uploaded as a 16 MHz board, the baud rate runs at half speed. Check the board and processor settings in the IDE.

## Worked example

A minimal sketch to prove the link. Set the monitor to 115200 and you should see a counter every second:

```
void setup() {
  Serial.begin(115200);
  delay(500);
  Serial.println("Serial OK");
}

void loop() {
  static int n = 0;
  Serial.println(n++);
  delay(1000);
}
```

## Common mistakes

- Changing the baud in the code and forgetting to change it in the monitor.
- Setting the monitor line ending to something odd and thinking the text is garbled; it only changes new lines.
- Using a charge-only USB cable and then moving it between ports instead of replacing it.
- Reading a second device on a hardware serial port that is also used by USB without disconnecting it.
- Mixing 5 V and 3.3 V serial lines without a level shifter.

## If this did not fix it

- The wrong board or wrong clock option selected, which changes the real baud rate.
- A serial adapter or USB chip fault; test with another adapter.
- Two programs open on the same port (another monitor window), which can steal bytes.
