Apache License 2.0

技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

syssi/esphome-jk-bms 技术分析

项目背景与痛点

在智能硬件和物联网设备日益普及的今天,对电池状态的精确监控和控制显得尤为关键。syssi/esphome-jk-bms 正是为了解决这一需求而生,它提供了监控和控制 Jikong 电池管理系统 (JK-BMS) 的一个 ESPHome 组件。通过 UART-TTL 或 BLE,该组件能够感知电池的状态,实现了对电池状态的良好掌控。

JK-BMS 在电动车、无人机和便携式电子设备中广泛应用,但其监控和控制逻辑较为复杂。这一项目的核心问题在于如何高效、准确地从 JK-BMS 中获取数据,并进行有效的处理与反馈。syssi/esphome-jk-bms 提供的解决方案,则在确保数据同步准确的同时,简化了硬件集成与编程的复杂度。

核心技术揭秘

syssi/esphome-jk-bms 的核心在于 ESPHome 的组件化设计。整体架构通过 UART-TTL 或 BLE 通讯模块,实现与 JK-BMS 的数据交互。其关键部分包括通讯管理器、数据处理器和控制逻辑组件。

graph TD A[指令发送] --> B[通讯管理器] B -->|"UART" | C[UART-TTL 接收] B -->|"BLE" | D[BLE 通讯] C --> E[数据处理器] D --> E E --> F{"状态处理"} F -->|"正常" | G[状态反馈] F -->|"异常" | H[异常处理] G --> I[用户反馈] H --> I

组件的设计思想体现在其分层结构中,通讯管理器通过 UART-TTL 或 BLE 接口与 JK-BMS 交互,接收到来自 JK-BMS 的数据后,数据处理器进行格式化和分析,然后由状态处理单元进行进一步的健康状态判定,最后将结果反馈给用户。

功能亮点与差异

与市面上同类产品相比,syssi/esphome-jk-bms 的独特之处在于其广泛适用性和便捷的集成能力。尤其在 UART-TTL 与 BLE 通讯方式的支持下,该组件跨越了更加广泛的使用场景。此外,其基于 ESPHome 的模块化设计,使得开发者能够快速定制和扩展功能。通过灵活的配置选项,syssi/esphome-jk-bms 也能够轻松适应不同开发者的需求。

应用场景与落地建议

在生产环境使用 syssi/esphome-jk-bms 时,应注意确保硬件设备的稳定性和数据通讯的可靠性。例如,当使用 UART-TTL 时,应该关注通信速率和错误校验的设置,防止数据丢失或畸变。此外,在集成 BLE 通讯时,考虑到无线信号的不稳定,应采取适当的超时和重试机制。

syssi/esphome-jk-bms 适用于需要高精度电池管理系统的所有场景,如电动车、无人机或其他电池供电设备。开发者可根据具体需求定制组件内的配置逻辑,以达到最佳的系统性能和可靠性。

综合评价

syssi/esphome-jk-bms 以其简单易用且强大全面的电池管理系统受到了广大开发者的欢迎。其提供了丰富的功能与灵活的扩展性,能够在多种硬件配置中运行良好。然而,其上手门槛较低的同时,也意味着项目的复杂度提升时,性能调优可能需要一定的开发经验。在同类工具中,syssi/esphome-jk-bms 揽获了普遍的好评,特别是在对精度和安全性要求较高的应用中表现出色。

关于

GitHub 原始描述(英文)

ESPHome component to monitor and control a Jikong Battery Management System (JK-BMS) via UART-TTL or BLE

描述取自 GitHub 官方 API,保持仓库作者书写的原文。

简要分析

热度分
1591
价值分
706
活跃状态
活跃

语言占比

C++
Python
Shell

Release

README

esphome-jk-bms

GitHub actions GitHub stars GitHub forks GitHub watchers "Buy Me A Coffee"

ESPHome component to monitor a Jikong Battery Management System (JK-BMS) via UART-TTL or BLE

Lovelace entities card

Supported devices

All JK-BMS models with software version >=6.0 are using the implemented protocol and should be supported.

  • JK-BD4A8S4P, hw 11.xw, sw 11.24, using JK02_32S (reported by @austin202220)
  • JK-BD6A17S6P, hw 7.2, sw 7.1.0H
  • JK-BD6A17S8P, hw 9.x, sw 9.01G (reported by @jonadis)
  • JK-BD6A20S10P, hw 10.XW, sw 10.07 (reported by @adadrag)
  • JK-BD6A20S12P, hw 11.XW, sw 11.281, using UART-TTL (reported by @asiridissa)
  • JK-BD6A20S6P, hw 11.XW, sw 11.42, using UART-TTL (reported by @parumsancto)
  • JK-BD6A24S6P, hw 6.x, sw 6.10S (reported by @ziporah)
  • JK-BD6A24S10P, hw 8.x, sw 8.0.6G (reported by @spoonwzd)
  • JK-BD6A24S10P, hw 10.xw, sw 10.09 (reported by @PMPoulsen)
  • JK-BD6A24S12P, hw 11.XW, sw 11.36, using JK02_32S (BLE) (reported by @hackmannbr)
  • JK-BD6A24S12P, hw 11.XW, sw 11.42, using JK02_32S (BLE) (reported by @Viper7000)
  • JK-BD4A17S4P, hw 11.xw, sw 11.01 (reported by @Condor-XYZ)
  • JK-BD4A17S4P, hw 11.xw, sw 11.27, using JK02_32S and/or UART-TTL (reported by @hemskgren)
  • JK-B1A8S10P, hw 11.XW, sw 11.261, using JK02_32S (reported by @Chickenbreast0)
  • JK-B1A8S20P, hw 19.h, sw 19.31, using JK02_32S (reported by @aurelius1688)
  • JK-B1A16S15P, hw 11.5, sw 11.261, using JK02_32S (reported by @delboy711)
  • JK-B1A24S15P, hw 8.x, sw 8.1.0H (reported by @killee)
  • JK-B1A20S15P, hw 8.x, sw 8.14U (reported by @trippfam07)
  • JK-B1A20S15P, hw 10.xw, sw 10.07 (reported by @romeox44)
  • JK-B1A20S15P, hw 10.xw, sw 10.10, using JK02_24S (reported by @austin202220)
  • JK-B1A20S15P, hw 11.xw, sw 11.26, using UART-TTL (reported by @Tesla72PL)
  • JK-B2A24S15P, hw 6.x, sw 6.1.3S (reported by @miguel300477)
  • JK-B2A24S15P, hw 8.x, sw 8.21W (reported by @mariusvaida)
  • JK-B2A24S15P, hw 10.xw, sw 10.07, using JK02_24S (BLE) and UART-TTL
  • JK-B2A24S15P, hw 10.xw, sw 10.08 (reported by @meccip)
  • JK-B2A24S15P, hw 10.xw, sw 10.10, using UART-TTL (reported by @nayias)
  • JK-B2A24S20P, hw 8.x, sw 8.1.2H, using JK02_24S (reported by @KlausLi)
  • JK-B2A24S20P, hw 8.x, sw 8.20G, using JK02_24S (reported by @rob-oravec)
  • JK-B2A24S20P, hw 10.X-W, sw 10.02, using JK02_24S (reported by @SeByDocKy)
  • JK-B2A24S20P, hw 10.XG, sw 10.07D30, using JK02_24S (reported by @TheSmartGerman)
  • JK-B2A24S20P, hw 10.XW, sw 10.07, using JK02_24S (reported by @amagr0)
  • JK-B2A24S20P, hw 10.XW, sw 10.09, using JK02_24S (reported by @Ghilm1986)
  • JK-B2A8S20P, hw 9.x, sw 9.01M3, using JK02_24S (reported by @EasilyBoredEngineer)
  • JK-B2A8S20P, hw 9.x, sw 9.08W (reported by @vrabi-cv)
  • JK-B2A8S20P, hw 11.XW, sw 11.17, using JK02_32S (reported by @senfkorn)
  • JK-B2A8S20P, hw 11.XW, sw 11.26, using JK02_32S (reported by @riker65)
  • JK-B2A8S20P, hw 11.XA, sw 11.48, using UART-TTL (reported by @BytEvil)
  • JK-B2A20S20P, hw 10.XW, sw 10.09 (reported by @markusgg84)
  • JK-B2A20S20P, hw 10.XW, sw 10.10, using JK02_24S (reported by @cygeus)
  • JK-B2A20S20P, hw 10.XW, sw 11.21h, using JK02_32S (reported by @Salve87)
  • JK-B2A20S20P, hw 11.XW, sw 11.24H, using JK02_32S (reported by @austin202220)
  • JK-B2A20S20P, hw 11.XW, sw 11.25H, using JK02_32S (reported by @iovcharyk)
  • JK-B2A20S20P, hw 11.XW, sw 11.284, using JK02_32S (BLE) and UART-TTL (reported by @martinSezman)
  • JK-B2A20S20P, hw 11.XA, sw 11.48, using JK02_32S (BLE) (reported by @DadasupR)
  • JK-B2A20S20P, hw 11.U, sw 11.54, using JK02_32S (BLE) (reported by @DadasupR)
  • JK-B5A24S, hw 8.x, sw 8.0.3M, using JK04 (reported by @JSladen)
  • JK-B2A16S, hw 3.0, sw 3.3.0, using JK04 (reported by @magnetus26)
  • GW-24S4EB (NEEY/Heltec 4A Smart Active Balancer), hw HW-2.8.0, sw ZH-1.2.3 (reported by @cristi2005)
  • GW-24S4EB (NEEY 4A Smart Active Balancer 4th generation), hw HW-3.2.0, sw ZH-1.2.4 (reported by @fabhund)
  • EK-24S15EB (NEEY 15A Smart Active Balancer), (reported by @msevestre31)
  • EK-24S10EB (NEEY 10A Smart Active Balancer), hw HW-1.1.5, sw SW-1.1.1, (reported by @chipsi)

Requirements

Schematics

                UART-TTL
┌──────────┐                ┌─────────┐
│          │<----- RX ----->│         │
│  JK-BMS  │<----- TX ----->│ ESP32/  │
│          │<----- GND ---->│ ESP8266 │<-- 3.3V
│          │                │         │<-- GND
└──────────┘                └─────────┘

# UART-TTL socket (4 Pin, JST 1.25mm pitch)
┌─── ─────── ────┐
│                │
│ O   O   O   O  │
│GND  RX  TX VBAT│
└────────────────┘
  │   │   │
  │   │   └─── GPIO17 (`rx_pin`)
  │   └─────── GPIO16 (`tx_pin`)
  └─────────── GND

The UART-TTL (labeled as RS485) socket of the BMS can be attached to any UART pins of the ESP. A hardware UART should be preferred because of the high baudrate (115200 baud). The connector is called 4 Pin JST with 1.25mm pitch.

Installation

You can install this component with ESPHome external components feature like this:

external_components:
  - source: github://syssi/esphome-jk-bms@main

or just use the esp32-example.yaml as proof of concept:

# Install esphome
pip3 install esphome

# Clone this external component
git clone https://github.com/syssi/esphome-jk-bms.git
cd esphome-jk-bms

# Create a secrets.yaml containing some setup specific secrets
cat > secrets.yaml <

评论

暂无评论