I found a project who already included the sources - it was not working out of the box, but I managed to get it working: GitHub - ThomasCr/lc709203f: esphome support for lc709203f
Good Morning
I have a ESP with an integrated 18650 battery, could I monitor the battery?
if so what code would work.
This is an example of the board I have.
https://www.amazon.co.uk/battery-charger-Bluetooth-Transceiver-Development/dp/B0BC2C7PJ7/ref=sr_1_7_sspa?crid=18PRP7LMFU7YJ&keywords=esp32+18650&qid=1687586878&sprefix=esp32+18650%2Caps%2C142&sr=8-7-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9tdGY&psc=1
Good Afternoon, So I have tried the above code out and can see some changes.
I currently solder 2 x 100k resistors from + - on the battery to a pin on the board as I understand there is nothing on the board to do this.
what is the correct way to wire this? using a 18650 which is 4.2v max
really would appreciate any help with this
You can follow some crumbs over here;)
It should be just 1 100k resistor:
Please let me know what device you are using as some might have other output or way of working.
Some boards already have a 100k resistor added in-line for example.
Good Evening
So I have brought one of these battery shields with a 3.7 37000mAh battery and installed a 100k resister as suggested in this diagram.
I have Battery Shield V1.2.0
using this code
- platform: adc
pin: A0
name: "A0 Voltage of 3.7V"
update_interval: 15s
accuracy_decimals: 3
filters:
- multiply: 3.7
id: server_battery_voltage
entity_category: diagnostic
unit_of_measurement: "V"
device_class: battery
- platform: template
name: "Server_Battery_Percentage"
update_interval: 15s
accuracy_decimals: 0
lambda: |-
return (((id(server_battery_voltage).state-3) /0.7) * 100.00);
entity_category: diagnostic
unit_of_measurement: "%"
device_class: battery
but when using a volts meter it’s 4.1 volts still.
what am I doing wrong???
[19:47:26][D][sensor:093]: ‘A0 Voltage of 3.7V’: Sending state 3.70000 V with 3 decimals of accuracy
[19:47:26][D][sensor:093]: ‘Battery_Percentage’: Sending state 100.00001 % with 0 decimals of accuracy
return ((id(battery_$devicename).state-3) /1.2 * 100.00);
my battery is currently at 4.1v
I have changed 0.7 to 1.2 and now getting
[07:20:24][D][sensor:093]: ‘Battery_Percentage’: Sending state 36.95476 % with 0 decimals of accuracy
[07:20:25][D][sensor:093]: ‘A0 Voltage of 3.7V’: Sending state 3.45791 V with 3 decimals of accuracy
fyi
As I have v1.2.0 I have soldered jumper 2. Do I need any other resistor? I have seen that I might need a 130k resistor.
Depending on your resistor you might need to change the calculation. The best thing I could recommend is using a variable voltage input and try to see what the raw input is on A0 when the voltage is 3V (with the resistor connected at all times) and then going up to 4.2V
If it says 1 at like 3.5V, try adding a higher-ohm rated resistor.
ok I will need to invest in a variable voltage power supply.
This is what I found on the internet. could this help me?
The new battery shield
There now is a new version (V1.2.0) of the battery shield that has an inbuilt resistor connecting A0 to the battery, through Jumer J2 (‘Jumper’ being a big word for 2 solderpads), so if you want to measure the battery voltage, all you need to do is to put some solder connecting J2
However, rather than a 100k resistor, a 130k resistor was used. The voltage divider thus becomes 100/(130+220+100), so for a full reading of 1023 (=1Volt on A0) a total of (1/100k)*(130+220+100)=4.5Volt would be necessary.
In reality the Lipo cell will not give off 4.5Volt.
what I don’t understand is that with no resistor from bat+ to A0 i get around 0.92871 (jumps about a bit 0.92969, 0.92578)
as soon as I put a 100k resistor the voltage jumps up to above 1 volt why?
The best way to check is to use a multimeter, or at leat a meter to measure the ohm rating. Some D1 mini boards don’t work quite well with the A0. I’ve had mine die after a year. At this point the battery voltage was always 0…
Try to measure with and without a battery connected.
You could be overvolting the A0, which might cause damage.
These test where performed without any additional resistors.
Without Battery
ok so testing from the bat+ to A0 with the D1 Mini v3.0.0 disconnected = 129.4
when connecting the battery shield and the d1 mini wemos v3.0.0 it starts at about 90 and then counts up. i got to 116 something and it was still going. (takes a while to get there
With Battery
testing from the bat+ to A0 with the D1 Mini v3.0.0 disconnected = 129.3
connecting the d1 mini Wemos V3.0.0 together i get 20.36
did you ever manage to work this out? still trying to solve this myself
Hi All
I see this tutorial very interesting for this purpose Power ESP32/ESP8266 with Solar Panels and Battery | Random Nerd Tutorials
It’s explain well how doing Solar Panel + Battery level sensor for ESP32/ESP8266… but formula is for Arduino and not for ESPHOME Yaml Code… so If someone could make it because I’m begener with ESPHOME…
Alexandre from France
I believe pin should be
pin: A0 instead of
pin:VCC
Hi guys,
so i am struggeling with the same problem…
i have an esp8266 running with a battery shield 1.2.0. I did solder the J2 “jumper” and should now have a 130K resistor between battery+ and A0.
This is my code:
#Batterylevel of Device
- platform: adc
pin: A0
name: battery_voltage
id: vcc
update_interval: 15s
accuracy_decimals: 3
filters:
- multiply: 4.2
- platform: template
name: battery_level_percentage
unit_of_measurement: '%'
accuracy_decimals: 0
update_interval: 15s
lambda: |-
return ((id(vcc).state -3) /1.2 * 100.00);
In HA for battery_voltage
i get a value of 0,008V and accordingly for battery_level_percentage
i get -249%
The battery voltage, when measuring with a multimeter, is about 4,16V. The 130k Ohm resistors should work well with that, right?
So i looks like i have to low voltage on the A0 pin, right?
What am i missing here?
Should the D1 mini battery shield prevent a deep discharge or should i somehow do that myself?
Any help would be apreciated.
regards,
markus