Home / Tools / Error decoder

ESP32 error decoder

Copy the red text out of your serial monitor, drop it in, and see what it actually means. No signup, no upload — the whole thing runs in your browser.

① Who are you? (optional — it tailors the advice)
② Or just tap your symptom — it loads a matching log
③ Paste your log
🔒 Nothing is uploaded — everything runs locally in your browser, so logs with your SSID and passwords stay on your machine.
Tick the steps you already tried — they show up as [x] in the post. That alone gets you far better answers.
Take it offline
Download a single HTML file that works with no internet at all: ESP32 Error Decoder (offline). Useful in a lab, on a factory floor, or anywhere the network is locked down — and you can just send the file to a colleague.

Why this exists

ESP32 error messages are famously unhelpful. "Timed out waiting for packet header" does not mention the BOOT button. "LoadProhibited" does not mention NULL pointers. "Brownout detector was triggered" does not mention your USB cable. The official docs are accurate but scattered across dozens of pages, and most of what you find in search results is a forum thread from five years ago with no conclusion.

So we turned the whole mess into a decoder: paste the log, get the answer. Causes are ranked by how often they actually turn out to be the answer, and every entry links back to the official Espressif documentation.

Full error index

All 34 patterns currently covered. Probabilities shown by the tool are ranked from field experience, not from measured statistics.

⬇ Flashing

Cannot connect: esptool waits for a reply that never comes The serial port exists, but the chip is not in download mode at that moment. This is the…
Wrong boot mode detected The strapping pins were sampled at a level combination that is not download mode — GPIO0…
Cannot open the serial port This fails at the OS level, before the chip is involved. On Windows it is usually driver…
Connected but writing to flash fails Handshake succeeded but the actual write failed. Flash writing draws peak current — this…
Flash verify failed (MD5 mismatch) After writing, the read-back does not match. Either the write was disturbed, or the flas…
Firmware does not fit in flash The binary is bigger than the app partition. Very common with OTA enabled — two app slot…

⚡ Power & reset

Brownout detector was triggered The chip saw its own supply drop below the threshold and reset itself. Wi-Fi transmit bu…
Watchdog reset (rst:0x10 / 0x7 / 0x8) The chip decided the firmware was stuck and rebooted. 0x10 means it hung during boot (bo…
Garbled serial output — usually just the wrong baud rate The ESP32 bootloader prints its banner at 74880 baud. If your monitor is set to 9600 or …

💥 Runtime crash

LoadProhibited — reading memory it should not The code read from an invalid address — usually a NULL pointer, a wild pointer, or an ob…
StoreProhibited — writing memory it should not A write to an invalid address — a read-only region, a NULL struct member, or past the en…
IllegalInstruction — the CPU executed something that is not code The program counter jumped somewhere invalid. Usually a corrupted function pointer, a sm…
InstrFetchProhibited — cannot fetch an instruction The CPU tried to execute code from an address outside valid instruction memory. If PC is…
Stack overflow — task stack too small The task used more stack than allocated and stomped on the canary. Compared with a myste…
Task watchdog got triggered The idle task has not run for too long, meaning some task is hogging the CPU. The log us…
abort() / assert failed Not a hardware fault — the code or a library called abort deliberately. The assert line …
Cache disabled but cached memory region accessed During flash erase/write the cache is temporarily disabled, so calling a function that l…

📶 Wi-Fi & network

Wi-Fi network not found or refused ESP32 is 2.4 GHz only — no 5 GHz support. If your router uses band steering or you share…
Wi-Fi authentication failed The password is right but the handshake fails. Common with WPA2/WPA3 mixed mode, incompa…
MQTT connection failing or looping The network works but the MQTT handshake fails. Read the return code: -2 means timeout (…
TLS / HTTPS handshake failed HTTPS cannot be established. The most common cause is a wrong device clock making the ce…

📷 Camera

Camera probe failed The ESP32 could not handshake with the camera over SCCB. The number one cause is always …
Frame buffer failure or corrupted image The frame buffer could not be allocated, or DMA could not keep up so data is misaligned.…

🧠 Memory & PSRAM

Out of memory The heap ran out. Classic ESP32 has roughly 300 KB of usable DRAM, and Wi-Fi + TLS + cam…
PSRAM initialisation failed The chip cannot find external PSRAM. Either the module has none, or the setting is on bu…
DRAM region overflowed This fails at link time: your globals and statics together exceed usable DRAM. Failing a…

🔄 OTA update

OTA update failed or rolled back The new firmware was written but validation failed, or the app never confirmed it booted…

🔌 Hardware & I/O

ADC2 conflict with Wi-Fi On classic ESP32 the ADC2 channels are used by the Wi-Fi driver, so readings are unrelia…
I²C communication failure The host sent an address but no device pulled SDA low. Usually a wrong address, missing …
Strapping pin at the wrong level The strapping pins (GPIO0/2/5/12/15) decide how the chip boots. If external circuitry pu…
Deep sleep will not wake or wakes immediately Either it never wakes, or it wakes instantly. The first is a misconfigured wake source; …

🛠 Build & toolchain

Header not found — missing library The compiler cannot find an #include. In Arduino the library is missing; in ESP-IDF the …
API changed — sample code vs newer library The most common reason copied sample code will not compile. The ESP32 Arduino core chang…
ESP-IDF toolchain not set up Environment variables or the Python virtualenv are not active, so idf.py / cmake / pytho…