Skip to content

ESP32 ADC Calibration Produces Inaccurate Voltage

DodaTech Updated 2026-06-26 1 min read

In this tutorial, you'll learn about ESP32 ADC Calibration Produces Inaccurate Voltage. We cover key concepts, practical examples, and best practices.

The Problem

ESP32 ADC readings have significant error (+/- 10%) and require calibration for accurate voltage measurements.

Quick Fix

Wrong

int val = analogRead(34);
float voltage = val * 3.3 / 4095.0;  // Assumes perfect reference
Voltage reads 3.0V but multimeter shows 3.3V. 10% error.
analogReadResolution(12);
analogSetAttenuation(ADC_11db);
esp_adc_cal_characteristics_t chars;
esp_adc_cal_characterize(ADC_UNIT_1, ADC_ATTEN_11db, ADC_WIDTH_BIT_12, 0, &chars);
uint32_t voltage = 0;
esp_adc_cal_get_voltage(ADC_CHANNEL_6, &chars, &voltage);
Serial.printf("Calibrated: %dmV\n", voltage);
Calibrated: 3300mV
(Matching multimeter reading within 2%)

Prevention

Use ADC calibration API for accurate readings. Read internal 1.1V reference to calibrate. Store calibration in efuse (eFuse Vref). Average multiple reads (16+) to reduce noise. Use an external voltage reference for critical measurements.

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

FAQ

### Does every ESP32 need calibration?

Yes, each ESP32 has unique ADC characteristics due to manufacturing variation. Calibration improves accuracy from +/-10% to +/-2%.

What is the eFuse Vref calibration?

Some ESP32 modules have the reference voltage stored in eFuse. Read it with esp_adc_cal_read_efuse() for automatic calibration.

How do I calibrate without eFuse?

Use a known reference voltage (e.g., internal 1.1V) or measure with a multimeter and compute a correction factor for your specific board.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro