Open Battery Information:Arduino读码+浏览器复位,让罢工的电动工具电池满血复活的完整实战指南
【免费下载链接】open-battery-information项目地址: https://gitcode.com/GitHub_Trending/op/open-battery-information
电钻摆在工位上,装上电池充电器红灯闪了半分钟又灭掉——充不进电。拿去店里,师傅说换新的;可拆开电池组一看,单体电压都正常。真正的元凶是保护锁:BMS(电池管理系统)判定电池有故障,把它锁死了。Open Battery Information 就是冲着这类问题来的:用一块小Arduino接上电池的BMS,读出锁定原因和单体数据,还能把故障状态复位掉。
Open Battery Information 速览:一个跑在浏览器里的BMS诊断工具
它是什么?一套开源电池诊断与维修工具集:仓库里放的是Arduino固件 ArduinoOBI/,电脑端配套 OBI-1 Web 工具。解决什么?BMS 误判电池故障后上锁,而实际只是误触发或临时性故障,不该让好电池组报废。适合谁?维修工程师、电动工具玩家、嵌入式爱好者,有一块烙铁和一个浏览器就能上手。
技术路线一句话:Arduino Uno 当桥梁,走 OneWire 单总线协议跟BMS芯片对话,电脑端用浏览器经 Web Serial 连上串口。老版 Python 桌面端已退役,现在不用装任何环境,固件甚至能直接从浏览器刷写。
核心能力拆解:板子到底替你干了哪些事
OneWire单总线通信:一根数据线就能连上BMS芯片,不用去猜多针接口的定义。lib/OneWire/ 里的通信库用直接寄存器操作做比特级时序控制,每比特固定90µs,帧内带CRC校验,固件读写全在这套时序基线上完成,链路才稳。
使能线隔离:板上的D8是专用使能脚,只在读取期间拉高、读完立刻拉低,断开与电池的连接。固件"连上再读、读完即断",避免板子和电池长期带电。
统一命令通道:电脑端发"头0x01+ 长度 + 命令字",固件在 main.cpp 的switch里按命令字分发:0x01 查版本、0x31/0x32 唤醒与读取、0x33/0xCC 走数据读写,处理完回固定格式帧。
浏览器直连:Web Serial 意味着免驱动、免 Python,Chrome 或 Edge 打开就能用,项目还带独立的固件刷写页,直接在浏览器烧录。
整体分三层看:
- 桥接层:Arduino固件,负责串口命令解析与 OneWire 比特时序
- 协议层:固件内实现的品牌 BMS 协议(当前为 Makita)
- 交互层:OBI-1 Web 工具,提供数据展示与操作界面
Open Battery Information 接线指南:从零到首次通信的完整路径
硬件准备:板子与接线
Arduino Uno(或 ESP32-C3)、一根 USB 线、电池接口适配线束。接线如下:D6接电池 OneWire 数据脚,D8是使能脚,两脚各串4.7kΩ电阻,VBAT- 与 Arduino 的 GND 必须共地。
这张是官方接线图,两个 4.7kΩ 电阻和共地连接是链路稳定的关键,照图做最保险。换用 ESP32-C3 时,上拉电阻要接3.3V脚,接到 5V 会烧掉 GPIO。
环境搭建:克隆与编译
装好 VS Code 和 PlatformIO 扩展后克隆代码:
git clone https://gitcode.com/GitHub_Trending/op/open-battery-information这是全程唯一一条命令。用 VS Code 打开 ArduinoOBI 文件夹,PlatformIO 会自动识别 platformio.ini,默认构建环境就是uno,侧栏点 Build 看到 Success 即编译通过 ✅。ESP32-C3 则切换环境到esp32-c3-devkitm-1。
首次运行:一次读通电池
点 Upload 刷完板子,在 Chrome 或 Edge 里打开 OBI-1 Web 工具,选中板子串口,插入电池后按Read battery:型号、单体电压、温度、充电次数和状态一次读出。固件串口按9600波特率工作,不用动。
实战场景复盘:从"死电池"到正常充电的典型流程
现象:一块 Makita 18V 锂电池吃灰半年,充电器指示灯闪烁不充,电钻也不启动。拆包测量五节单体都在 3.3V 以上,电芯本身没坏,是 BMS 里记着一次过放事件的故障标记。
操作:
- 按上图接线,OBI-1 工具连上板子串口
- 按 Read battery 取数:总压16.4V,单体3.28 / 3.25 / 3.31 / 3.27 / 3.29V,温度21°C,充电次数 112,状态字段显示故障锁定
- 在工具端执行复位命令(固件 0xCC 写通道),清掉标志后重读
- 确认错误标记清除,充电器开始正常充电
结果:充满后电钻续航恢复到新电池约 85%,电池组回到工具箱继续服役。
踩过的坑与二次开发入口:新手最容易翻车的三处
⚠️ 读取超时、串口无响应 → 多数是数据脚没接到 BMS 或没共地 → 重查 D6/D8 接线和 GND 连接。 ⚠️ 读到乱码、丢帧 → 90µs 比特时序没对上,或总线走线太长引入干扰 → 数据线尽量短,4.7kΩ 电阻别省。 ⚠️ 换 ESP32-C3 后板子烧砖 → 上拉接到了 5V 脚 → 从 3.3V 取电;要换引脚就改 platformio.ini 里的ESP_EN_PIN/ESP_OW_PIN。
⚠️动手前确认电池组无鼓包、无发烫,戴绝缘手套操作,任何时刻不要用金属工具同时碰 VBAT+ 和 VBAT-;闻到烧焦味立即断电。
扩展入口也很直白:品牌协议支持就在 main.cpp 的命令分发处,想支持新品牌,照着给它加一组命令字分支即可;比特时序库在 lib/OneWire/。
开头那台电钻,读完复位后就回到了工具箱里。下次再遇到工具"罢工",先别急着下单新电池——一块Arduino加上这套开源固件,足够让你先判断这组电池还能不能救。
【免费下载链接】open-battery-information项目地址: https://gitcode.com/GitHub_Trending/op/open-battery-information
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考