Skip to content

Commit 6e1ce3b

Browse files
committed
Merge branch 'feat/add_bq27220_fuel_gauge' into 'master'
feat(sensors): add component bq27220 battery fuel gauge Closes AEG-2631 See merge request ae_group/esp-iot-solution!1348
2 parents f3d06eb + 8d5b976 commit 6e1ce3b

File tree

27 files changed

+1917
-10
lines changed

27 files changed

+1917
-10
lines changed

.github/workflows/upload_component.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ jobs:
7474
components/sensors/adc/mcp3201;
7575
components/sensors/battery_fuel_gauge/adc_battery_estimation;
7676
components/sensors/battery_fuel_gauge/max17048;
77+
components/sensors/battery_fuel_gauge/bq27220;
7778
components/sensors/power_measure;
7879
components/sensors/gesture/apds9960;
7980
components/sensors/humiture/aht20;

.gitlab/ci/build.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1509,6 +1509,14 @@ build_components_sensors_battery_fuel_gauge_max17048_test_apps:
15091509
variables:
15101510
EXAMPLE_DIR: components/sensors/battery_fuel_gauge/max17048/test_apps
15111511

1512+
build_components_sensors_battery_fuel_gauge_bq27220_test_apps:
1513+
extends:
1514+
- .build_examples_template
1515+
- .rules:build:components_sensors_battery_fuel_gauge_bq27220_test_apps
1516+
- .build_idf_active_release_version
1517+
variables:
1518+
EXAMPLE_DIR: components/sensors/battery_fuel_gauge/bq27220/test_apps
1519+
15121520
build_components_sensors_gesture_apds9960_test_apps:
15131521
extends:
15141522
- .build_examples_template

.gitlab/ci/rules.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,10 @@
232232
- "components/sensors/battery_fuel_gauge/max17048/**/*"
233233
- "tools/cmake_utilities/package_manager.cmake"
234234

235+
.patterns-components_sensors_battery_fuel_gauge_bq27220: &patterns-components_sensors_battery_fuel_gauge_bq27220
236+
- "components/sensors/battery_fuel_gauge/bq27220/**/*"
237+
- "tools/cmake_utilities/package_manager.cmake"
238+
235239
.patterns-components_sensors_gesture_apds9960: &patterns-components_sensors_gesture_apds9960
236240
- "components/sensors/gesture/apds9960/**/*"
237241
- "tools/cmake_utilities/package_manager.cmake"
@@ -2415,6 +2419,17 @@
24152419
- <<: *if-dev-push
24162420
changes: *patterns-components_sensors_battery_fuel_gauge_max17048
24172421

2422+
.rules:build:components_sensors_battery_fuel_gauge_bq27220_test_apps:
2423+
rules:
2424+
- <<: *if-protected
2425+
- <<: *if-label-build
2426+
- <<: *if-label-target_test
2427+
- <<: *if-trigger-job
2428+
- <<: *if-dev-push
2429+
changes: *patterns-build_system
2430+
- <<: *if-dev-push
2431+
changes: *patterns-components_sensors_battery_fuel_gauge_bq27220
2432+
24182433
.rules:build:components_sensors_gesture_apds9960_test_apps:
24192434
rules:
24202435
- <<: *if-protected

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ The registered components in ESP-IoT-Solution are listed below:
7373
| [ble_services](https://components.espressif.com/components/espressif/ble_services) | [![Component Registry](https://components.espressif.com/components/espressif/ble_services/badge.svg)](https://components.espressif.com/components/espressif/ble_services) |
7474
| [bme280](https://components.espressif.com/components/espressif/bme280) | [![Component Registry](https://components.espressif.com/components/espressif/bme280/badge.svg)](https://components.espressif.com/components/espressif/bme280) |
7575
| [bootloader_support_plus](https://components.espressif.com/components/espressif/bootloader_support_plus) | [![Component Registry](https://components.espressif.com/components/espressif/bootloader_support_plus/badge.svg)](https://components.espressif.com/components/espressif/bootloader_support_plus) |
76+
| [bq27220](https://components.espressif.com/components/espressif/bq27220) | [![Component Registry](https://components.espressif.com/components/espressif/bq27220/badge.svg)](https://components.espressif.com/components/espressif/bq27220) |
7677
| [button](https://components.espressif.com/components/espressif/button) | [![Component Registry](https://components.espressif.com/components/espressif/button/badge.svg)](https://components.espressif.com/components/espressif/button) |
7778
| [cmake_utilities](https://components.espressif.com/components/espressif/cmake_utilities) | [![Component Registry](https://components.espressif.com/components/espressif/cmake_utilities/badge.svg)](https://components.espressif.com/components/espressif/cmake_utilities) |
7879
| [drv10987](https://components.espressif.com/components/espressif/drv10987) | [![Component Registry](https://components.espressif.com/components/espressif/drv10987/badge.svg)](https://components.espressif.com/components/espressif/drv10987) |

README_CN.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ ESP-IoT-Solution 中注册的组件如下:
7373
| [ble_services](https://components.espressif.com/components/espressif/ble_services) | [![Component Registry](https://components.espressif.com/components/espressif/ble_services/badge.svg)](https://components.espressif.com/components/espressif/ble_services) |
7474
| [bme280](https://components.espressif.com/components/espressif/bme280) | [![Component Registry](https://components.espressif.com/components/espressif/bme280/badge.svg)](https://components.espressif.com/components/espressif/bme280) |
7575
| [bootloader_support_plus](https://components.espressif.com/components/espressif/bootloader_support_plus) | [![Component Registry](https://components.espressif.com/components/espressif/bootloader_support_plus/badge.svg)](https://components.espressif.com/components/espressif/bootloader_support_plus) |
76+
| [bq27220](https://components.espressif.com/components/espressif/bq27220) | [![Component Registry](https://components.espressif.com/components/espressif/bq27220/badge.svg)](https://components.espressif.com/components/espressif/bq27220) |
7677
| [button](https://components.espressif.com/components/espressif/button) | [![Component Registry](https://components.espressif.com/components/espressif/button/badge.svg)](https://components.espressif.com/components/espressif/button) |
7778
| [cmake_utilities](https://components.espressif.com/components/espressif/cmake_utilities) | [![Component Registry](https://components.espressif.com/components/espressif/cmake_utilities/badge.svg)](https://components.espressif.com/components/espressif/cmake_utilities) |
7879
| [drv10987](https://components.espressif.com/components/espressif/drv10987) | [![Component Registry](https://components.espressif.com/components/espressif/drv10987/badge.svg)](https://components.espressif.com/components/espressif/drv10987) |
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# ChangeLog
2+
3+
## v0.1.0 - 2025-08-12
4+
5+
### Enhancements:
6+
7+
* Initial version: Provide the basic functionality of the BQ27220 fuel gauge.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
idf_component_register(
2+
SRCS "bq27220.c"
3+
INCLUDE_DIRS "."
4+
PRIV_INCLUDE_DIRS "priv_include"
5+
REQUIRES driver
6+
)
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# BQ27220
2+
3+
The [BQ27220](https://www.ti.com/product/BQ27220) is a single-cell Li-Ion battery fuel gauge IC that provides precise battery status monitoring, including state of charge (SoC), remaining capacity, state of health (SoH), and other critical parameters. This component provides a driver implementation for the BQ27220 in embedded systems, supporting communication via the I2C interface with the host controller.
4+
5+
In addition to the basic functionality, the component also include a tool [sample-data-app](tools/sample-data-app), which can be used to monitor the battery status in real-time and print data with CSV format for Gauging Parameter Calculator.
6+
7+
## Example of usage
8+
9+
``` c
10+
11+
#define I2C_MASTER_SCL_IO GPIO_NUM_1 /*!< gpio number for I2C master clock */
12+
#define I2C_MASTER_SDA_IO GPIO_NUM_2 /*!< gpio number for I2C master data */
13+
14+
// Default Gauging Parameter
15+
static const parameter_cedv_t default_cedv = {
16+
.full_charge_cap = 650,
17+
.design_cap = 650,
18+
.reserve_cap = 0,
19+
.near_full = 200,
20+
.self_discharge_rate = 20,
21+
.EDV0 = 3490,
22+
.EDV1 = 3511,
23+
.EDV2 = 3535,
24+
.EMF = 3670,
25+
.C0 = 115,
26+
.R0 = 968,
27+
.T0 = 4547,
28+
.R1 = 4764,
29+
.TC = 11,
30+
.C1 = 0,
31+
.DOD0 = 4147,
32+
.DOD10 = 4002,
33+
.DOD20 = 3969,
34+
.DOD30 = 3938,
35+
.DOD40 = 3880,
36+
.DOD50 = 3824,
37+
.DOD60 = 3794,
38+
.DOD70 = 3753,
39+
.DOD80 = 3677,
40+
.DOD90 = 3574,
41+
.DOD100 = 3490,
42+
};
43+
44+
// Default Gauging Config
45+
static const gauging_config_t default_config = {
46+
.CCT = 1,
47+
.CSYNC = 0,
48+
.EDV_CMP = 0,
49+
.SC = 1,
50+
.FIXED_EDV0 = 0,
51+
.FCC_LIM = 1,
52+
.FC_FOR_VDQ = 1,
53+
.IGNORE_SD = 1,
54+
.SME0 = 0,
55+
};
56+
57+
static i2c_bus_handle_t i2c_bus = NULL;
58+
static bq27220_handle_t bq27220 = NULL;
59+
60+
i2c_config_t conf = {
61+
.mode = I2C_MODE_MASTER,
62+
.sda_io_num = I2C_MASTER_SDA_IO,
63+
.sda_pullup_en = GPIO_PULLUP_ENABLE,
64+
.scl_io_num = I2C_MASTER_SCL_IO,
65+
.scl_pullup_en = GPIO_PULLUP_ENABLE,
66+
.master.clk_speed = 400 * 1000,
67+
};
68+
i2c_bus = i2c_bus_create(I2C_NUM_0, &conf);
69+
70+
bq27220_config_t bq27220_cfg = {
71+
.i2c_bus = i2c_bus,
72+
.cfg = &default_config,
73+
.cedv = &default_cedv,
74+
};
75+
bq27220 = bq27220_create(&bq27220_cfg);
76+
77+
```

0 commit comments

Comments
 (0)