ESP32 analogRead() is non-linear: use analogReadMilliVolts() and the right attenuationwarning · unverified · Raw ESP32 ADC counts don't map linearly to voltage and the reference voltage varies between chips. Espressif confirmed the non-linear ADC front end; use the calibrated analogReadMilliVolts() (ESP-IDF: ADC calibration) and stay inside the attenuation's input range.