Need support? support@freenove.com
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "BatteryPower.h"
void setupAdc(){
analogReadResolution(12);
analogSetAttenuation(ADC_11db);
adcAttachPin(PIN_ANALOG_IN);
}
uint32_t getBatteryVoltage(){
uint32_t adc_reading = 0;
for (int i = 0; i < NUM_OF_SAMPLES; i++){
adc_reading += analogRead(PIN_ANALOG_IN);
}
adc_reading /= NUM_OF_SAMPLES;
uint32_t voltage = adc_reading*3300/4096;
return voltage * VOLATAGE_RATIO;
}
ADC data sampling accuracy setting. Here it is set to 12 bits. 2^12=4096, so the sampling data range of ADC
is 0-4095.
analogReadResolution(12);
ADC sampling voltage range setting of ESP32, which is 0-3.3V. ADC_11db represents the maximum range.
Combined with the above analogReadResolution() function, when the voltage of the ADC collection point is
0V, the value collected by the ADC is 0; when the voltage of the ADC collection point is 3.3V, the value
collected by the ADC is 4095.
analogSetAttenuation(ADC_11db);
Associate the ADC configuration to the pin.
adcAttachPin(PIN_ANALOG_IN);
Use analogRead(PIN_ANALOG_IN) to capture the ADC value at the ESP32 pin.
Continuously collect NUM_OF_SAMPLES ADC values at the ESP32 pins and calculate the average.
uint32_t adc_reading = 0;
for (int i = 0; i < NUM_OF_SAMPLES; i++){
adc_reading += analogRead(PIN_ANALOG_IN);
}
adc_reading /= NUM_OF_SAMPLES;
Convert the ADC value to the actual measured voltage value. The unit is millivolts.
uint32_t voltage = adc_reading*3300/4096;
We know from the previous introduction that the voltage at the ESP32 pin is 1/4 of the battery voltage.
Therefore, the voltage value of the battery can be obtained by multiplying the voltage value measured by the
ADC by VOLATAGE_RATIO(4).
return voltage * VOLATAGE_RATIO;