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.
Right
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
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro