ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Open Battery Information:Arduino读码+浏览器复位,让罢工的电动工具电池满血复活的完整实战指南

Open Battery Information:Arduino读码+浏览器复位,让罢工的电动工具电池满血复活的完整实战指南

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 里记着一次过放事件的故障标记。

操作:

  1. 按上图接线,OBI-1 工具连上板子串口
  2. 按 Read battery 取数:总压16.4V,单体3.28 / 3.25 / 3.31 / 3.27 / 3.29V,温度21°C,充电次数 112,状态字段显示故障锁定
  3. 在工具端执行复位命令(固件 0xCC 写通道),清掉标志后重读
  4. 确认错误标记清除,充电器开始正常充电

结果:充满后电钻续航恢复到新电池约 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),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进