Skip to content

ESP32 ADC Read Returns Incorrect Values

DodaTech Updated 2026-06-26 1 min read

In this tutorial, you'll learn about ESP32 ADC Read Returns Incorrect Values. We cover key concepts, practical examples, and best practices.

The Problem

ESP32 analogRead() returns values that do not match the actual voltage on the pin.

Quick Fix

Wrong

int val = analogRead(34);
Serial.println(val);  // Reads 4095 even at 2V
ADC reading is 4095 at 2V instead of the expected ~2710.
analogReadResolution(12);
analogSetAttenuation(ADC_11db);
int val = analogRead(34);
float voltage = val * 3.3 / 4095.0;
Serial.printf("ADC: %d, Voltage: %.2fV\n", val, voltage);
ADC: 2710, Voltage: 2.18V
(Accurate for a 2.18V input on GPIO 34)

Prevention

Set read resolution with analogReadResolution(). Set attenuation with analogSetAttenuation() for proper voltage range. GPIO 34-39 are input-only ADC pins. Use calibrated readings for accuracy. Average multiple readings to reduce noise.

DodaTech engineers apply these same patterns across Doda Browser, DodaZIP, and Durga Antivirus Pro for production IoT reliability.

FAQ

### What is the ADC voltage range on ESP32?

With ADC_11db attenuation: 0-3.3V full range. ADC_6db: 0-2.0V. ADC_2_5db: 0-1.34V. ADC_0db: 0-1.1V.

Why does my ADC read 4095 at 2.5V?

The pin may be floating (unconnected) causing max reading, or the attenuation is set too low. Use analogSetAttenuation(ADC_11db) for 0-3.3V range.

How accurate is ESP32 ADC?

ESP32 ADC has about +/- 6% error without calibration. Use hardware calibration or software reference for better accuracy.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro