Skip to content
Bernhard Kirchen edited this page Aug 29, 2023 · 17 revisions

Work In Progress

This feature is nearly mature, but still work in progress, see the respective pull request.

JK (Jikong) BMS support

This project supports communication with the JK BMS using a wired medium. Parameters are polled at customizable intervals and displayed in the Web UI. The main benefit is usage of the battery State of Charge (SoC) value to control the Dynamic Power Limiter.

Wiring

Multiple wiring methods are supported. The battery.rx and battery.tx pins must be defined in the pin mapping for all methods. When using the "RS-485 Transceiver on MCU" interface type, battery.rxen and battery.txen pins must also be defined. See the device profile documentation for more details.

Untested: UART-TTL

The BMS may be connected directly to two ESP32 pins. For the UART receive pin on the ESP32 an input-only pin may be used.

NOTE: Do NOT connect the fourth pin (VBAT) of the JK BMS, as it pushes the unregulated full battery voltage.

Use this setup only over short distances as it is not robust against interference.

          UART-TTL
┌────────┐         ┌───────┐
│        │<TX---RX>│       │
│ JK-BMS │<RX---TX>│ ESP32 │
│        │<--GND-->│       │
│        │   3V3-->│       │
└────────┘         └───────┘

Use the "TTL-UART on MCU" interface type in the OpenDTU-OnBattery settings for this setup.

Untested: RS485 with Transceiver and UART-TTL

Using the original JK BMS RS485 adapter, the wiring can be completed using an RS485 to UART-TTL converter board. Search for DEBO TTL-RS485 on reichelt.de for an example. For the UART receive pin on the ESP32 an input-only pin may be used.

This setup also works over long distances for the RS485 lines.

           UART-TTL              RS485           RS485-TTL
┌────────┐         ┌───────────┐       ┌────────┐         ┌───────┐
│        │<--TX--->│Y    JK   Y│<A---A>│        │<TX---RX>│       │
│ JK-BMS │<--RX--->│W  RS485  W│<B---B>│ RS485  │<RX---TX>│ ESP32 │
│        │<--GND-->│B Adaptor B│<-GND->│ to 3V3 │<--GND-->│       │
│        │<-Bat V->│R          │       │        │<--3V3-->│       │
└────────┘         └───────────┘       └────────┘         └───────┘

Use the "TTL-UART on MCU" interface type in the OpenDTU-OnBattery settings for this setup. The ESP32 will talk UART to the converter board. The RS485 transceiver is transparent to the ESP32. That also means it has no explicit control over the transmitter or receiver.

RS485 with Transceiver only

Using the original JK BMS RS485 adapter, the wiring can be completed using only an RS485 transceiver chip that is connected to the ESP32 directly. This is the case for the OpenDTU-FUSION board, where an ISL3178E transceiver is in use. There are also breakout-boards available that only have a RS485 transceiver (search for MAX485 Module).

This setup requires four pins on the ESP32: Two for data (one input, one output), one that controls the receiver, and another that controls the transmitter. The latter two are outputs.

          RS485-TTL               RS485
                                    ┌──────────────────────────────┐
┌────────┐         ┌───────────┐    │    ┌───────────┐   ┌───────┐ │
│        │<--TX--->│Y    JK   Y│<A--+--A>│A      RXEN│<->│15     │ │
│ JK-BMS │<--RX--->│W  RS485  W│<B--+--B>│B        RX│<->│16 ESP │ │
│        │<--GND-->│B Adaptor  │    │    │       TXEN│<->│46  32 │ │
│        │<-Bat V->│R         B│<-->│GND │ISL3178E EN│<->│45     │ │
└────────┘         └───────────┘    │    └───────────┘   └───────┘ │
                                    │       OpenDTU Fusion v2      │
                                    └──────────────────────────────┘

Use the "RS485-Transceiver on MCU" interface type in the OpenDTU-OnBattery settings for this setup.

Clone this wiki locally