
电池修复指南用 Open Battery Information 和 Arduino 解锁被 BMS 锁定的电池【免费下载链接】open-battery-information项目地址: https://gitcode.com/GitHub_Trending/op/open-battery-information你手上是否有一块外观完好、却突然充不进电的电池设备提示电池故障换芯成本高直接扔掉又心疼。很多时候电芯并没有坏而是 BMSBattery Management System电池管理系统负责监控电压、温度、电流的那颗小芯片在触发保护机制后把电池锁住了。Open Battery Information简称 OBI就是一个开源的电池修复工具一块 Arduino 加两颗电阻你就能在浏览器里读取并处理这块电池的 BMS判断它到底还能不能救。电池真的坏了吗 看懂BMS 锁定BMS 锁定本身是重要的安全设计一旦检测到过压、过放、过温或通讯异常BMS 会切断充放电来保护设备和使用者这一点不应该被无脑绕过。麻烦在于保护机制会误判一次瞬间的信号干扰、一个已经消失的临时故障、甚至一个已被修复的问题都可能让锁止状态一直保留下来。此时如果电池本体其实健康只因为软件报告故障就把它扔掉才是真正的浪费。OBI 做的事情是在你扔掉之前给你一个判断依据把电池接到 Arduino 上读出它的型号、每一节电芯的电压、温度、充放电次数和当前状态。数据本身会告诉你这块电池值不值得再抢救一次。动手前的全部准备Arduino 2 颗电阻 一个浏览器 ️硬件清单非常便宜Arduino Uno也可以用 ESP32-C3 模块例如 SuperMini C3两颗 4.7 kΩ 电阻一根 USB 数据线以及 Chrome 或 Edge 浏览器Web 界面依赖 Web Serial 标准它允许浏览器直接读写串口设备无需任何本地驱动软件侧几乎零门槛。需要说明一点早前的 Python 桌面版应用已经退役并从本仓库中移除旧版本可在项目的历史标签中找到仓库现在只托管 Arduino 固件所有交互都搬到了浏览器里——通过 Web Serial 连接 Arduino甚至可以直接在浏览器里刷写固件。只有当你想自己编译固件时才需要安装 VS Code 和 PlatformIO 扩展。按原理图接线一共 4 根线 ⚡先克隆仓库然后按官方原理图把电路搭出来git clone https://gitcode.com/GitHub_Trending/op/open-battery-information看懂这张图很简单在 Arduino Uno 上D8 接电池的 Enable 线D6 接 OneWire 数据线两条线各通过一颗 4.7 kΩ 电阻连到 VBAT电池正极电池的 VBAT- 接板子的 GND。其中 Enable 引脚负责把 BMS唤醒到通讯状态OneWire 则是一条单线串行协议用来逐位交换数据——很多单总线温度传感器如 DS18B20走的就是同一种方式。如果你选用 ESP32-C3有两条官方文档反复强调的注意事项上拉电阻必须接3.3V 而不是 5V否则会烧掉 GPIO引脚则使用Pin 0 作 ENABLE、Pin 1 作 OneWire换其他引脚可在 ArduinoOBI/platformio.ini 中修改。固件刷入的最快路径两条路都给你 硬件接好后需要把固件跑起来你有两个选择路线一推荐浏览器直接刷写。用 Chrome 或 Edge 打开项目的固件上传页面USB 连上开发板直接在浏览器里完成刷写——不需要工具链不需要编译器对新手最友好。路线二用 PlatformIO 编译。在 VS Code 中安装 PlatformIO 扩展打开仓库里的 ArduinoOBI 文件夹在 Project Tasks 里选择目标环境uno 或 esp32-c3-devkitm-1先点 Build 编译再点 Upload 上传即可。完整的分步说明见 ArduinoOBI/README.md。如果两条路都不想走项目 Releases 页面还附带了预编译好的固件二进制文件uno.hex / esp32.bin拿到即刷。在浏览器里读出电池报告型号、电压、温度一目了然 固件跑起来后用 Chrome 或 Edge 打开项目的 Web 版 OBI-1 工具连接 Arduino 的串口插入电池点击 Read battery。页面会呈现电池型号直接确认电池身份单节电压每一节电芯的电压均衡程度一眼可见温度电池内置温度传感器的读数充电次数与状态这块电池经历过多少循环是否因故障处于锁定状态判断逻辑很直接如果数据显示一切正常电压均衡、温度正常但设备就是不给电池充电嫌疑人大概率是 BMS 锁可以用工具尝试重置清除反过来如果电芯电压本身明显异常、掉压严重说明电芯确实在老化此时不应盲目重置——先读数据再动手正是这套工具存在的意义。幕后拆解固件到底怎么和 BMS 对话 源码很短核心逻辑都集中在 ArduinoOBI/src/main.cpp 里。固件同时说两门语言一侧是对计算机的串口协议波特率 9600浏览器发来 0x01查询版本、0x31、0x32、0x33、0xCC 等命令Arduino 执行后回传数据另一侧是对 BMS 的 OneWire 协议。仓库在 ArduinoOBI/lib/OneWire/ 下自带了一份 OneWire 驱动每条命令拼的其实都是精确的时序把总线拉低做复位然后一位一位地发、一位一位地读。还有一个容易忽略的细节每次通讯前固件会先把 ENABLE 引脚拉高约 400 毫秒把 BMS 唤醒通讯结束后再拉低。目前固件面向的是牧田Makita电池协议——代码中的模块名就叫 makita所以它适合用来检修这类电池如果你手上有其他品牌的电池想让它支持完全可以照现有协议实现的样子新增一组命令来扩展。下次再遇到报故障的电池别急着扔按 ArduinoOBI/README.md 的步骤把它接上 OBI先读一次数据。如果电芯是健康的这块电池很可能离重获新生只差一次正确的重置。【免费下载链接】open-battery-information项目地址: https://gitcode.com/GitHub_Trending/op/open-battery-information创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考