Open Battery Information 新手指南:如何读取电池 BMS 并重置故障锁
【免费下载链接】open-battery-information项目地址: https://gitcode.com/GitHub_Trending/op/open-battery-information
你的电动工具电池突然一点反应都没有,充电器亮故障灯,可拆开看电芯电压又都正常——问题多半出在 BMS 芯片把自己"锁"住了。Open Battery Information(OBI)是一个免费开源的电池 BMS 修复工具:用一块 Arduino 接到电池通信线上,就能读出电池的电压、温度、循环次数,并清除保护锁。
一句话定位:这个项目适合谁
OBI 由 Arduino 固件加浏览器端 Web 工具组成:固件把 Arduino Uno 或 ESP32-C3 变成一台电池 BMS 读取器,浏览器里的 OBI-1 工具通过 Web Serial 与板子通信,还能直接在浏览器里烧录固件。它适合手里有 Arduino、愿意照着原理图接几个电阻的 DIY 用户,以及想弄清自己那块"锁死"电池还能不能救的电动工具使用者。
快速判断,以下任意一条符合就值得读下去:
- 电池没反应但电芯电压正常,怀疑是 BMS 保护锁在作怪
- 手边有 Arduino Uno 或 ESP32-C3,能按原理图接线
- 想在看二手电池前查循环次数和电芯均衡
- 能接受用 Chrome 或 Edge(Web 工具基于 Web Serial 实现)
🔌 上手流程:从零到读出第一块电池
第 1 步:准备硬件并接线
物料很少,一张表说清:
| 物料 | 数量 | 作用 |
|---|---|---|
| Arduino Uno(或 ESP32-C3 SuperMini) | 1 | 与电池 BMS 通信的主控 |
| USB 数据线 | 1 | 连接电脑 |
| 4.7kΩ 电阻 | 2 | 按原理图接入 |
| 杜邦线 | 若干 | 按原理图接线 |
接线以仓库内的原理图 docs/images/arduino-obi.png 为准:Arduino 的 8 号引脚接电池 Enable 线,6 号引脚接 OneWire 数据线,中间串接 4.7kΩ 电阻,VBAT- 与 GND 相连。当前固件的引脚定义在 ArduinoOBI/src/main.cpp 中可以核对。
第 2 步:获取代码并烧录 OBI 固件
先把仓库克隆到本地:
git clone https://gitcode.com/GitHub_Trending/op/open-battery-information cd open-battery-information烧录有两条路:不想装工具链的,直接用浏览器打开 OBI-1 官网的固件上传页面(入口地址见 README.md),Chrome/Edge 下连上 USB 就能烧;想自己编译的,装好 VS Code 和 PlatformIO 插件,打开 ArduinoOBI 文件夹,选 uno 环境依次 Build、Upload,细节见 ArduinoOBI/README.md。仓库 Releases 页面也提供编译好的 uno.hex / esp32.bin,可直接刷入。
第 3 步:打开 OBI-1 工具读电池
在 Chrome 或 Edge 中打开 OBI-1 网页工具(地址在仓库 README),选择板子的串口,接上电池,按 Read battery。型号、各电芯电压、温度、充电循环次数和状态字段会一次读出来。顺带说明:旧的 Python 桌面版(Tkinter)已被弃用并从仓库移除,如需旧版可查 v0.2.3 标签,现在全部流程走浏览器即可,不需要装 Python。
🔋 电池突然没反应:先判断是不是 BMS 故障锁
现象:电池装上工具完全无输出,充电器报故障,但用表量电芯电压都在合理范围。BMS 检测到故障时会锁机保护,这是它的重要设计;但保护也可能误触发,或故障只是瞬时的、事后已恢复,锁却没有解开。
操作:
- 按第 1 步接好线,打开 OBI-1 工具连接串口
- 点 Read battery 读取全部字段,重点看状态里有没有记录错误
- 若状态中有错误,通过工具发送重置(固件协议的写命令通道)清除错误状态
- 再次读取,确认状态干净
- 装上工具实测能否正常输出
判断标准:重置后状态干净、电压温度读数稳定,说明多半是误触发,电池可以回到工作位;如果很快再次锁死,说明故障是真实的,工具救不了硬件层面的问题。
🔍 买二手电池前:先读这四个数字
现象:卖家说电池"成色好",你手里却没有任何数据支撑判断。
操作:
- 读取充电循环次数(charge count)
- 读取各电芯电压,算出最大压差
- 看两个温度传感器的读数是否明显偏离
- 检查状态字段有无历史错误
判断标准:循环次数少、电芯压差小、传感器无漂移、无错误记录,成色才有依据;压差大或有错误记录,就是砍价甚至放弃的理由。
📋 日常保养:每次充完电记一行
操作:
- 每次充满后记录总电压和各电芯压差
- 记下两个温度传感器读数
- 更新循环次数
- 隔一段时间横向对比:压差是否在扩大、满充电压是否在下移
预期结果:几组数据摆在一起,电芯老化趋势一目了然。压差持续扩大或满充电压走低,就是该考虑换电池的信号,不用等它彻底罢工。
❓ 高频疑问:安全、兼容与失败后果
接上接口会不会伤电池?不会。工具只做低功率的 OneWire 通信,操作限于读取和软件重置,不向电池注电、不改 BMS 参数。真正的风险是接线错误,例如给 ESP32-C3 上拉用了 5V 会烧模块,接前务必对照原理图。
支持哪些电池?当前协议实现围绕牧田(Makita)电池——固件里 OneWire 实例名就是 makita。其他品牌尚未实现,固件采用模块化结构,扩展空间在 ArduinoOBI/ 里。
需要编程基础吗?不需要。浏览器烧录路线零工具链;自己编译也只是在 PlatformIO 里点 Build 和 Upload。
失败会有什么后果?读取不改变电池状态;重置只清除错误记录。读不出来或重置失败,电池保持原样,不会更糟。
🛡️ 安全与边界:它能做什么,不能做什么
- 操作前检查电池外壳:鼓包、漏液的电池直接报废,不要接入任何工具
- ESP32-C3 的上拉电阻必须接 3.3V,接 5V 会烧坏模块
- 上电前核对电池极性与原理图上的电阻值
- 项目只解决"BMS 软件锁"问题,无法修复损坏的电芯,也不能修改 BMS 保护参数
- 重置成功后若电池很快再次锁死,说明故障是真实的,应停用并送检
下一步
把 Arduino 和那块"罢工"的电池拿出来,按上面三步完成第一次连接,用真实数据看看它的健康状态。固件细节看 ArduinoOBI/README.md,通信协议实现在 ArduinoOBI/src/main.cpp,项目采用 MIT 许可(LICENSE.md),欢迎提交改动。
【免费下载链接】open-battery-information项目地址: https://gitcode.com/GitHub_Trending/op/open-battery-information
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考