# bat_monitor 电池电量监测组件
[](https://opensource.org/licenses/MIT)




`bat_monitor`组件是一个专为ESP32系列芯片设计的电池电量监测解决方案,它能够实时监测电池电压、检测充电状态(支持GPIO检测和电压变化检测两种方式),并在电池低电量、充满电等状态变化时触发相应事件通知。组件采用ADC采样和电压分压原理,支持自定义电压阈值和报告间隔,可轻松集成到ESP-IDF项目中。
---
## 快速开始
### 1. 克隆项目
要将组件添加到项目中请在IDF终端执行下方命令:
```bash
idf.py add-dependency "ningzixi/bat_monitor^1.0.0"
```
或者直接克隆本仓库到项目`components`目录下:
```bash
git clone https://github.com/NingZiXi/bat_monitor
```
### 2. 使用示例
``` c
#include "bat_monitor.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#define TAG "BatteryApp"
// 电池事件回调函数
static void battery_event_handler(bat_monitor_event_t event, float voltage, void *user_data) {
switch (event) {
case BAT_EVENT_VOLTAGE_REPORT:
ESP_LOGI(TAG, "电池电压: %.2fV", voltage);
break;
case BAT_EVENT_FULL:
ESP_LOGI(TAG, "电池已充满 (%.2fV)", voltage);
break;
case BAT_EVENT_LOW:
ESP_LOGI(TAG, "电池电量低 (%.2fV)", voltage);
break;
case BAT_EVENT_CHARGING_BEGIN:
ESP_LOGI(TAG, "开始充电");
break;
case BAT_EVENT_CHARGING_STOP:
ESP_LOGI(TAG, "停止充电");
break;
}
}
void app_main() {
// 配置电池监测参数
bat_monitor_config_t config = {
.adc_ch = ADC_CHANNEL_5, // ADC通道5
.charge_io = GPIO_NUM_40, // 充电检测IO引脚,如不使用配置为-1
.v_div_ratio = 3.0f, // 电压分压比
.v_min = 6.3f, // 电池亏点电压6.3V
.v_max = 7.7f, // 电池满电电压7.7V
.low_thresh = 10.0f, // 低电量阈值10%
.report_ms = 1000 // 1秒报告间隔
};
// 创建电池监测实例
bat_monitor_handle_t handle = bat_monitor_create(&config);
if (!handle) {
ESP_LOGE(TAG, "电池监测初始化失败");
return;
}
// 设置事件回调
bat_monitor_set_event_cb(handle, battery_event_handler, NULL);
ESP_LOGI(TAG, "电池监测已启动");
// 主循环
while (1) {
vTaskDelay(pdMS_TO_TICKS(10000)); // 10秒延迟
}
// 销毁实例
bat_monitor_destroy(handle);
}
```
## 贡献
本项目采用 MIT 许可证,详情请参阅 [LICENSE](LICENSE) 文件。
idf.py add-dependency "ningzixi/bat_monitor^1.0.0"