Lithium battery check with ESP32: voltage divider problem
Home › Forums › esp32 › Lithium battery check with ESP32: voltage divider problem
-
-
Hi Renzo,
This is off-topic but I don’t know where else to turn.
I want to monitor the battery voltage of this LoRa node. My understanding is that the Li-ion batteries charge at 4.2v so I’m sending that max voltage through a voltage divider to a (3.3v) ADC pin on the ESP32. Strangely (to me) the ADC is returning 4095 always, no matter what the source voltage is. Can you see what I’m doing wrongly? Thanks.

`int ADCvalue;
const int ADC = 25; // battery voltage pin
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
delay(500);
pinMode(ADC, INPUT);
pinMode(ADC, INPUT_PULLDOWN);
}
void loop() {
ADCvalue = analogRead(ADC);
Serial.print(ADCvalue); Serial.print(” “);
float batVoltage = ADCvalue * 4.2 / 4096; // get battery voltage
Serial.println(batVoltage);
delay(1000);
}’
Attachments:
You must be
logged in to view attached files.
-
Hi Sid,
for my projects, I use this function
float getBatteryVoltage(){
//************ Measuring Battery Voltage ***********
float sample1 = 0;
for (int i = 0; i < 100; i++) {
sample1 = sample1 + analogRead(A0); //read the voltage from the divider circuit
delay(2);
}
sample1 = sample1 / 100;
DEBUG_PRINT(F("AnalogRead..."));
DEBUG_PRINTLN(sample1);
float batVolt = (sample1 * 3.3 * (BAT_RES_VALUE_VCC + BAT_RES_VALUE_GND) / BAT_RES_VALUE_GND) / 1023;
int bvI = batVolt * 100;
batVolt = (float)bvI/100;
return batVolt;
}
Where
BAT_RES_VALUE_VCC is the resistor value of VCC part
BAT_RES_VALUE_GND is the resistor value of GND part
3.3 is the reference voltage of the ESP8266
and 1023 is the divider of the analog pin.
I use 20k and 10k resistor.
I do multiple reads to be sure that the reading is correct without voltage oscillation.
Bye Renzo
-
But I think it’s not safe to connect the output battery directly to the ESP32. It’s better to use a step-up and connect to the 5v (and use this for the ESP32 and LoRa module).
I usually do this: I use a TP4056 to charge the 18650 battery, a step-up to convert the battery’s voltage to a fixed 5v, and from there, I power both the Arduino and the LoRa device (do not power at 3.3v as it reduces the range).
Here you can find a detail.
Emergency power bank homemade
Bye Renzo
-
Thank you Renzo, very helpful.
- You must be logged in to reply to this topic.