Serial Monitor shows garbage characters: baud rate and boot text

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 seeDo this
Garbage only at reset, clean afterwardsBoot text at another baud rate. Ignore it.
Garbage alwaysBaud mismatch. Match both ends.
Garbage only with long wiresNoise. Shorten the cable.

Arduino IDE setup, 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.