做嵌入式开发、物联网产品的工程师,一定绕不开一个问题:这颗电池能用多久? 或者反过来:要跑 N 天,需要多大的电池? 手算太麻烦,Excel 容易出错,于是就有了这个工具 —— PowerConsume 功耗计算器。
这是一款开源免费的电池续航估算工具,专为硬件设计前期评估阶段打造:在还没有 PCB 样品、无法用仪器实测时,基于芯片数据手册的典型电流值,快速估算电池续航的量级,辅助电池选型和功耗预算规划。支持锂电池/锂亚电池/碱性干电池、多种工作模式(检测/上传/休眠)、串并联组合配置,自动推算休眠时长,一键算出续航天数或所需电池容量。提供桌面版(Python,可导出 PDF)和纯前端版(HTML,双击即用),无需登录即可上手。
注意:计算结果为理论估算值,用于设计前期的量级评估。最终量产产品的续航数据仍需以硬件样品上的实测数据为准。
在线体验:https://stark1898y.github.io/Power-Consumption-Calculator/
在嵌入式设备、物联网节点、传感器终端等场景中,电池续航是一个核心指标。但实际计算时面临诸多复杂性:
手算这些不仅繁琐,还容易出错。PowerConsume 功耗计算器就是为了解决这些问题而生的。
本工具的定位:设计前期(本工具估算)→ 打样后(仪器实测)→ 量产前(高低温老化实测)。它解决的是「还没有硬件时如何做电池选型和功耗预算」的问题,不替代实测验证。
graph LR
Root((PowerConsume<br/>功耗计算器))
subgraph 核心计算
direction TB
C1[计算续航时间] --- C1_1(输入电池→输出时间)
C2[计算所需容量] --- C2_1(输入天数→输出mAh)
C3[经验系数修正] --- C3_1(0.6~0.9 可调)
end
subgraph 电池配置
direction TB
B1[电池类型预设] --- B1_1(锂/锂亚/碱性)
B2[自定义参数] --- B2_1(电压/容量/终止电压)
B3[串并联组合] --- B3_1(串联升压/并联增容)
end
subgraph 工作模式
direction TB
W1[多模式管理] --- W1_1(添加/删除/编辑)
W2[单位配置] --- W2_1(电流μA/mA, 时长ms~天)
W3[休眠自动计算] --- W3_1(24h - 活跃时间)
end
subgraph 输出与导出
direction TB
O1[图表可视化] --- O1_1(柱状图/环形图)
O2[导出功能] --- O2_1(PDF/TXT/JSON)
end
subgraph 双端部署
direction TB
D1[桌面版] --- D1_1(Python+Tkinter)
D2[纯前端版] --- D2_1(HTML+Chart.js)
end
Root --> 核心计算
Root --> 电池配置
Root --> 工作模式
Root --> 输出与导出
Root --> 双端部署
classDef main fill:#2d3436,stroke:#fff,stroke-width:2px,color:#fff;
classDef sub fill:#f5f6fa,stroke:#dcdde1,stroke-width:1px;
class Root main;
PowerConsume 提供了两种实现版本,覆盖不同的使用场景:
| 版本 | 技术栈 | 文件 | 运行方式 | 适用场景 |
|---|---|---|---|---|
| 桌面版 | Python + Tkinter | main.py |
python main.py 或 EXE 双击 |
本地离线使用,功能最全 |
| 纯前端版 | HTML + JS + Chart.js | docs/index.html |
直接双击打开或部署 GitHub Pages | 零依赖,在线体验 |
graph TB
subgraph "PowerConsume 双端架构"
Core["核心计算逻辑<br/>电压 / 容量 / 能量 / 续航"]
end
subgraph "两种实现"
Desktop["桌面版<br/>Python + Tkinter<br/>Matplotlib 图表"]
Frontend["纯前端版<br/>HTML + Chart.js<br/>零后端依赖"]
end
subgraph "部署方式"
EXE["打包 EXE<br/>PyInstaller"]
Python["python main.py<br/>本地运行"]
Pages["GitHub Pages<br/>在线访问"]
Local["本地 HTML<br/>双击打开"]
end
Core --> Desktop
Core --> Frontend
Desktop --> EXE
Desktop --> Python
Frontend --> Pages
Frontend --> Local
style Core fill:#e67e22,stroke:#d35400,color:white
style Desktop fill:#3498db,stroke:#2980b9,color:white
style Frontend fill:#9b59b6,stroke:#8e44ad,color:white
# 安装依赖
pip install -r requirements.txt
# 运行
python main.py
桌面版基于 Tkinter 构建,提供完整的 GUI 界面,支持:



直接双击打开 docs/index.html,或部署到 GitHub Pages。所有计算逻辑在浏览器端完成,无需任何后端服务,零依赖。


这是整个计算器的数学基础。理解了这些公式,你就理解了工具的全部逻辑。
flowchart TD
Start([电池参数输入]) --> Total["总电压 = 单节电压 × 串联数<br/>总容量 = 单节容量 × 并联数"]
Total --> Avg["平均电压 = (总电压 + 终止电压 × 串联数) / 2"]
Avg --> Energy["总能量 = 总容量 × 平均电压"]
Energy --> Usable["可用能量 = 总能量 × 经验系数"]
Usable --> Daily["每日功耗 = Σ(电流 × 时长 × 平均电压 / 3600 × 每日次数)"]
Daily --> Result["续航天数 = 可用能量 / 每日功耗"]
style Start fill:#e67e22,stroke:#d35400,color:white
style Result fill:#2ecc71,stroke:#27ae60,color:white
用公式表示:
总电压 V_total = V_cell × N_series
总容量 C_total = C_cell × N_parallel
平均电压 V_avg = (V_total + V_end × N_series) / 2
总能量 E_total = C_total × V_avg (单位: mWh)
可用能量 E_usable = E_total × K_factor
每日能耗 E_daily = Σ( I_mode × T_mode × V_avg / 3600 × N_times )
续航天数 D = E_usable / E_daily
所需能量 E_required = E_daily × D_target
所需容量 C_required = E_required / (V_avg × K_factor)
| 参数 | 含义 | 典型值 |
|---|---|---|
| V_cell | 单节电池满电电压 | 锂电池 4.2V,锂亚 3.6V |
| V_end | 终止电压(电池”没电”的电压) | 锂电池 3.0V,锂亚 3.0V |
| C_cell | 单节电池容量 (mAh) | 18650 约 3500mAh |
| N_series | 串联节数(升压) | 2 节串联 = 2 倍电压 |
| N_parallel | 并联节数(增容) | 2 节并联 = 2 倍容量 |
| K_factor | 经验系数(放电效率) | 0.6 ~ 0.8,通常取 0.7 |
为什么要用平均电压?
电池从满电到放空,电压是逐渐下降的。用”满电电压”和”终止电压”的平均值来估算能量,比用单一电压值更准确。
为什么需要经验系数?
电池标称容量是在理想条件下测得的。实际使用中,大电流放电、温度变化、电池老化等因素都会导致可用容量降低。经验系数 0.7 意味着实际只能用到标称容量的 70%。
这是 PowerConsume 最实用的功能之一。实际的嵌入式设备不会一直以同一个电流工作,而是有多种模式交替运行:
sequenceDiagram
participant D as 设备
participant S as 传感器
participant C as 通信模块
participant MCU as 主控
Note over D: 一天 24 小时
loop 每 30 分钟
D->>S: 检测模式 (40mA, 30s)
S-->>D: 采集数据
end
D->>C: 上传模式 (50mA, 20s)
C-->>D: 上传完成
D->>C: 拍照+上传 (250mA, 60s)
C-->>D: 图片上传完成
Note over D: 其余时间 → 休眠 (30μA)
| 模式 | 电流 | 电流单位 | 持续时间 | 时长单位 | 每天次数 |
|---|---|---|---|---|---|
| 检测 | 40 | mA | 30 | s | 48 |
| 上传 | 50 | mA | 20 | s | 1 |
| 拍照+上传 | 250 | mA | 60 | s | 1 |
| 休眠 | 30 | uA | 自动计算 | - | 1 |
休眠时长自动计算逻辑:
活跃时间 = (30s × 48) + (20s × 1) + (60s × 1) = 1520s
休眠时间 = 86400s - 1520s = 84880s ≈ 23.58 小时
这意味着设备每天有约 23.58 小时处于 30μA 的休眠状态,只有约 25 分钟在”干活”。
电池组的串并联设计直接影响电压和容量:
graph LR
subgraph "串联 (Series)"
S1["节 1<br/>3.7V / 3500mAh"] --> S2["节 2<br/>3.7V / 3500mAh"]
S2 --> SR["总电压: 7.4V<br/>总容量: 3500mAh"]
end
subgraph "并联 (Parallel)"
P1["节 1<br/>3.7V / 3500mAh"]
P2["节 2<br/>3.7V / 3500mAh"]
P1 --> PR["总电压: 3.7V<br/>总容量: 7000mAh"]
P2 --> PR
end
style SR fill:#e74c3c,stroke:#c0392b,color:white
style PR fill:#3498db,stroke:#2980b9,color:white
| 配置 | 电压变化 | 容量变化 | 典型应用 |
|---|---|---|---|
| 2 串 1 并 | 2× 电压 | 1× 容量 | 需要高电压的场景(如 7.4V 供电) |
| 1 串 2 并 | 1× 电压 | 2× 容量 | 延长续航,电压不变 |
| 2 串 2 并 | 2× 电压 | 2× 容量 | 同时升压和增容 |
PowerConsume 内置了三种常见电池类型的默认参数,选择后自动填充:
| 电池类型 | 满电电压 | 终止电压 | 典型容量 | 默认串并联 |
|---|---|---|---|---|
| 锂电池 (Li-ion) | 4.2V | 3.6V | 3500 mAh | 1串1并 |
| 一次性锂亚电池 (Li-SOCl₂) | 3.6V | 3.3V | 19000 mAh | 1串2并 |
| 碱性干电池 (Alkaline) | 1.5V | 1.0V | 2700 mAh | 2串1并 |
锂亚电池(ER14505 等)是物联网低功耗设备的首选,容量大、自放电率极低,适合需要数年续航的场景。
碱性干电池两节串联是因为单节 1.5V 太低,两节串联得到 3V 供大多数 MCU 使用。
power-consumption-calculator/
├── main.py # 桌面版主程序 (Python + Tkinter GUI)
├── docs/
│ └── index.html # 纯前端版 (HTML + Chart.js,零后端依赖)
├── requirements.txt # Python 依赖(桌面版)
├── PowerConsumeCalculator.spec # PyInstaller 打包配置
├── dist/
│ └── PowerConsumeCalculator.exe # Windows 可执行文件
├── LICENSE # MIT 许可证
└── README.md
桌面版使用 PowerConsumeCalculator 类封装所有逻辑,关键模块:
时间单位转换
def convert_to_seconds(value: float, unit: str) -> float:
"""将任意单位的时间转换为秒"""
factor = {"ms": 0.001, "min": 60, "h": 3600, "天": 86400}
return value * factor.get(unit, 1)
能量计算核心
# 单次循环能量 (mWh)
energy_per_cycle_mwh = (current_ma * seconds * average_voltage) / 3600
# 每日总能耗
daily_energy_mwh = energy_per_cycle_mwh * times_per_day
# 续航天数
days = usable_energy_mwh / daily_total_energy
休眠时长自动更新
def update_sleep_duration(self):
"""自动计算并更新休眠时间"""
total_active_time = 0
for item in self.mode_table.get_children():
values = self.mode_table.item(item, "values")
if values[0] == "休眠":
sleep_item = item
continue
seconds = convert_to_seconds(float(values[4]), values[3])
total_active_time += seconds * int(values[5])
sleep_duration = max(0, 86400 - total_active_time) # 24h - 活跃时间
PDF 导出(含中文支持)
桌面版使用 fpdf2 库导出 PDF,自动检测系统中文字体(Windows SimHei / macOS PingFang / Linux WQY Zen Hei),并嵌入 Matplotlib 生成的功耗分布图。
桌面版采用卡片式布局,参考了网页版的视觉风格:
| 组件 | 设计要素 |
|---|---|
| 标题横幅 | 蓝紫渐变色 (#667eea),白色标题 + 版本号 |
| 卡片容器 | 白色背景 + 浅灰边框 + 左侧紫色指示条 |
| 操作按钮 | 6 种颜色区分功能(蓝=主操作、绿=保存、橙=导出、红=清空),hover 变暗 |
| 计算按钮 | 大号加粗蓝紫色,视觉焦点 |
| 结果区域 | Consolas 等宽字体,左侧紫色指示条,富文本标签(标题/高亮/分隔线) |
| 表格 | 紫色表头、白色背景、选中行高亮 |
| 状态栏 | 底部灰色条,版本号 + 版权 + GitHub/Gitee 可点击链接 |
| 滚动支持 | Canvas + Scrollbar,窗口自由缩放时内容自适应宽度 |
配色方案统一使用 COLORS 字典,与网页版保持一致的视觉语言。
纯前端版将所有计算逻辑用 JavaScript 重写,图表使用 Chart.js 渲染,无需任何后端,单个 HTML 文件即可运行:
// 能量计算
function calcDailyEnergy(currentMA, seconds, voltage) {
return (currentMA * seconds * voltage) / 3600; // mWh
}
// 续航天数
function calcBatteryDays(usableEnergy, dailyEnergy) {
return usableEnergy / dailyEnergy;
}
| 依赖 | 版本 | 用途 |
|---|---|---|
| matplotlib | ≥ 3.5.0 | 图表绘制(桌面版) |
| numpy | ≥ 1.21.0 | 数值计算(桌面版) |
| fpdf2 | ≥ 2.7.0 | PDF 导出(桌面版) |
| Pillow | ≥ 8.0.0 | 图像处理(桌面版) |
场景:一个使用 ER14505 锂亚电池(3.6V / 19000mAh)的温湿度传感器,每 30 分钟检测一次(40mA / 30s),每天上传一次数据(50mA / 20s)。
输入参数:
计算过程:
总电压 = 3.6V × 1 = 3.6V
总容量 = 19000mAh × 2 = 38000mAh
平均电压 = (3.6 + 3.3) / 2 = 3.45V
总能量 = 38000 × 3.45 = 131100 mWh
可用能量 = 131100 × 0.7 = 91770 mWh
检测能耗 = (40mA × 30s × 3.45V / 3600) × 48 = 55.2 mWh/天
上传能耗 = (50mA × 20s × 3.45V / 3600) × 1 = 0.958 mWh/天
休眠能耗 = (0.03mA × 84880s × 3.45V / 3600) × 1 = 2.43 mWh/天
每日总功耗 ≈ 58.59 mWh
续航天数 = 91770 / 58.59 ≈ 1566 天 ≈ 4.29 年
结论: 两节锂亚电池并联,理论续航约 1500~1600 天(约 4~4.5 年)。实际因温度、放电效率等因素,建议按 3~5 年的量级做规划。
场景:一个设备需要续航 365 天,每日功耗已知为 100mAh 等效,使用 3.7V 锂电池,经验系数 0.7。
所需能量 = 100mAh × 3.7V × 365 = 135050 mWh
所需容量 = 135050 / (3.7 × 0.7) ≈ 52115 mAh
结论: 估算约需 45000~55000mAh 的电池组,可考虑约 13~16 节 3500mAh 18650 电池并联。最终容量还需根据实测功耗修正。
这是最关键的问题。计算结果反映的是「理想情况下的理论上限」。实际产品中,以下因素会导致实测与估算存在差距:
因此,计算结果应视为量级估算(如”能用 3~5 年”),而非精确值(如”能用 4.29 年”)。最终续航数据必须在硬件样品上实际测量验证。本工具的价值在于设计前期帮你快速排除不合理的方案,避免电池选型出现数量级错误。
经验系数取决于多个因素:
| 场景 | 建议系数 | 说明 |
|---|---|---|
| 低功耗设备 (< 1mA 平均) | 0.8 ~ 0.9 | 放电电流小,效率高 |
| 中等功耗设备 (1~100mA) | 0.6 ~ 0.7 | 常见 IoT 场景 |
| 高功耗设备 (> 100mA) | 0.5 ~ 0.6 | 大电流放电效率低 |
| 高温/低温环境 | 再降 0.1 | 温度影响显著 |
| 电池老化严重 | 再降 0.1~0.2 | 循环次数多了容量衰减 |
电池放电曲线不是平的。以锂电池为例:
满电: 4.2V ──┐
├── 平均 ≈ 3.6V ( (4.2+3.0) / 2 )
终止: 3.0V ──┘
用平均电压计算能量更接近实际情况。
休眠时间 = 86400秒 - Σ(各活跃模式时长 × 每日次数)
当所有活跃模式的总时间超过 24 小时时,休眠时间为 0(说明工作模式配置不合理)。
计算时使用的是总电压和总容量,而不是单节参数。
完全一样。两个版本共享相同的计算逻辑,只是 UI 实现不同。桌面版用 Python,前端版用 JavaScript。
PowerConsume 支持将当前配置保存为 JSON 文件,方便复用和分享:
{
"battery_info": {
"type": "一次性锂亚电池",
"experience_factor": "0.7",
"series_count": "1",
"parallel_count": "2",
"cell_voltage": "3.6",
"end_voltage": "3.3",
"cell_capacity": "19000"
},
"calc_mode": "续航时间",
"input_value": "5000",
"input_unit": "天",
"modes": [
{
"mode": "检测",
"current_unit": "mA",
"current_value": "40",
"duration_unit": "s",
"duration_value": "30.0",
"times_per_day": "48"
},
{
"mode": "上传",
"current_unit": "mA",
"current_value": "50",
"duration_unit": "s",
"duration_value": "20.0",
"times_per_day": "1"
},
{
"mode": "休眠",
"current_unit": "uA",
"current_value": "30",
"duration_unit": "s",
"duration_value": "0",
"times_per_day": "1"
}
]
}
作为客观的分析,PowerConsume 目前也有一些可以改进的地方:
| 方面 | 现状 | 可改进方向 |
|---|---|---|
| 放电曲线 | 使用线性平均电压近似 | 支持自定义放电曲线,积分计算 |
| 温度影响 | 未考虑 | 加入温度修正系数 |
| 电池老化 | 有老化模型框架,但未深度集成 | 基于循环次数的容量衰减曲线 |
| 多化学体系 | 仅 3 种预设 | 扩展更多电池类型(磷酸铁锂、铅酸等) |
| 功耗叠加 | 假设模式串行执行 | 支持并行功耗叠加(如 MCU + 传感器同时工作) |
| 电流输入 | 依赖用户输入电流值 | 引入常见芯片数据库,根据选型自动填充典型值 |
桌面版支持通过 PyInstaller 打包为单文件 EXE,无需 Python 环境即可运行:
# 安装 PyInstaller
pip install pyinstaller
# 打包(使用项目提供的 spec 文件)
pyinstaller PowerConsumeCalculator.spec
# 输出位置
dist/PowerConsumeCalculator.exe
打包后的 EXE 包含所有依赖(matplotlib、numpy、fpdf2、tkinter 等),约 40MB,双击即可使用。
注意:打包时需要确保系统已安装所有
requirements.txt中的依赖,否则 EXE 运行时会报ModuleNotFoundError。
graph LR
A["输入电池参数<br/>串/并联、电压、容量"] --> B["输入工作模式<br/>电流、时长、次数"]
B --> C["自动计算休眠<br/>24h - 活跃时间"]
C --> D["计算每日能耗<br/>Σ(mWh/天)"]
D --> E{估算模式?}
E -->|"续航估算"| F["续航天数<br/>= 可用能量 / 每日能耗"]
E -->|"容量估算"| G["所需容量<br/>= 能量需求 / (电压 × 系数)"]
style A fill:#e67e22,stroke:#d35400,color:white
style B fill:#3498db,stroke:#2980b9,color:white
style C fill:#9b59b6,stroke:#8e44ad,color:white
style D fill:#e74c3c,stroke:#c0392b,color:white
style F fill:#2ecc71,stroke:#27ae60,color:white
style G fill:#2ecc71,stroke:#27ae60,color:white
PowerConsume 功耗计算器 解决了嵌入式设备电池续航前期评估的核心痛点:
无论是做产品方案评估、还是写技术文档汇报,它都是一个实用的工具。
重要提醒:本工具提供的是理论估算值,适用于设计前期的电池选型和功耗预算规划。记住这条链路:设计前期用本工具估算 → 打样后用仪器实测 → 量产前做高低温老化验证。每一步都不可替代。
🔗 在线体验:https://stark1898y.github.io/Power-Consumption-Calculator/
| 平台 | 链接 | 说明 |
|---|---|---|
| ⭐ GitHub | https://github.com/stark1898y/Power-Consumption-Calculator | 主仓库 |
| 🚀 Gitee | https://gitee.com/stark1898/power-consumption-calculator | 国内镜像 |
| 欢迎 Star | Fork | Issue |