IP2366 Display Board

Versatile IP2366 Board With Optional Display and I²C

This compact board comes in two flavors:

  • As a simple base board with an IP2366, XT30 jack, NTC temperature probe, and 10-switch configuration panel.
  • Or with an enhanced base board (I²C-capable), plus a pluggable Arm Cortex microcontroller daughter board with TFT display, three push buttons and NTC-controlled fan connector.

Overview

This board is currently sold in two variants and two screen sizes:

  • Base board only, configurable via DIP switch, with four white status LED
  • Base board with display daughter board, configurable on-screen via I²C
    • 0.96-inch, 80×160 ST7735 TFT
    • 1.47-inch, 170x320 ST7789 TFT

Without Display

Base board with a non-I²C IP2366 and DIP switch for configuration plus unpopulated R17-R20 (next to the NTC sensor) for fine-tuning.

Four white LEDs for status indication and state-of-charge. Enable-push button can be soldered but is not populated.

Battery can be connected via female XT30 plug (board comes with male XT30 connector).

With Display

Base board with a I²C-enabled IP2366 and 6-pin header in order to piggy-back the display board.

The daughter board uses an Arm Cortex microcontroller (Puya PY32F030K28) to control the base board via I²C, three push buttons marked S1 - S3, and a second NTC temperature probe as part of a 2-wire 5 V fan control.

The fan can be connected to the two contacts marked + - on the fron side next to the push buttons.

Hardware Revisions (Differences)

There are multiple base board versions available. The board version is printed on the front side.

Version 1.00 and version 1.1 are almost identical, whereas version 1.3 marks a significant hardware revision. Its most prominent change is the unpopulated DIP switch:

  • JTYJ-2366-C-V1.00:
    Stand-alone board with an IP2366 that has no I²C capabilities. The 6-pin header used to plug in the display daughter board is unpopulated. Four white LEDs and two LED resistors are populated.

    DIP switch is present, resistors R17-R20 are unpopulated, resistor bank for DIP switch is populated.

  • JTYJ-2366-C-V1.1:
    Like version 1.00, but instead of the LEDs, a 6-pin header is populated that connects to the display daughter board. The IP2366 on this board supports I²C.

  • JTYJ-2366-C-V1.3:
    No DIP switch, resistors R17-R20 are populated (273, 27 kΩ), resistor bank for DIP switch is not populated.

Default Configuration

V1.00 can only run stand-alone as it uses a non-I²C IP2366. The DIP switches and on-board resistors are the only option to configure battery and maximum power.

V1.1 and V1.3 can theoretically run stand-alone as well. Without the daughter board connected, V1.1 can be configured identically to V1.0 via DIP switches. V1.3 has fixed defaults defined via the populated R17 - R19, setting these defaults:

  • 6S battery
  • 140W maximum power
  • LiIon chemistry

Both V1.1 and V1.3 are designed to operate with the display daughter board and its microcontroller, which overrides the default values via I²C as soon as it boots. That’s why setting the configuration via resistors isn’t really important here, and most probably the reason why the makers decided to remove the DIP switch for the display version starting in V1.3.

Caveats

Here are the most important caveats when working with this board:

  • Cooling Required:
    Anything above 30 W requires efficient cooling. For 140 W, you need both adequate heat sinks and a fan.
  • Dangerous Contacts:
    Be careful when plugging in the USB-C connector when using the display board. If you accidentally touch the rim of the display daughter-board, you may cause a fulminant short-circuit and permanently destroy the base board. Apparently, directly at the rim - in close proximity of the USB-C port - there are critical blank contacts carrying full power.
  • Gauging:
    The original firmware settings support two options for determining the battery state-of-charge (SOC): derived from battery voltage (Voltage), and active gauging (Gauge). Gauge mode requires a learning cycle to produce accurate values.

Firmware Flaw

There appears to be a concerning flaw in the original firmware source code that may limit the lifespan of this module (or at least the display daughter-board): Regardless of gauging mode or other settings, the firmware always saves information to flash memory in very short intervals, even when no values have changed:

  • Every 60 seconds: erase and rewrite the settings flash page.
  • While full or empty is detected: additionally erase and rewrite it approximately every 400 ms.

This was observed with a firmware marked 08-20-2026 (no version number found).

For the PY32F030K28 microcontroller, Puya specifies minimum flash endurance of:

  • 100,000 erase/write cycles at −40 to +85 °C.

These figures appear in Table 5-19 of Puya’s PY32F030 datasheet.

Given these figures, after about 69 days of continuous operation, the flash memory may become unreliable or stop working.

The repeated full/empty saves are a serious longevity defect in this source. Even the once-per-minute background saving warrants redesign for a charger expected to operate for years.

DISCLAIMER:
I analyzed the existing firmware best effort and may have overlooked things or drawn wrong conclusions, so take this with a grain of salt. If you find a way to get access to the Chinese QQ group 170681020, you may want to contact the developers and/or request a fixed firmware version. At minimum, unchanged values shouldn’t be re-written to flash.

Access to the QQ group would also get you the promised source code and documentation, so you could develop your very own firmware on the daughter board. In principle, the daughter board is reprogrammable, and the existing firmware is open-source. It’s currently just locked into a QQ group 170681020 that is inaccessible for non-Chinese users.

If all else fails, you can always use your own controller to control the IP2366 base board, and skip using the display daughter board altogether.

Resistor Configurations

IP2366 can be configured both with resistors, and via I²C. I²C can overrule the resistor settings.

Resistors R17-R20 configure the IP2366. The resistor labels are located on the front side, the resistors themselves are mounted on the flipside.

Resistor Description
R17 BAT_NUM - string count
R18 VSET - cell voltage
R19 PSET - maximum power
R20 CC_BDO - power direction

BAT_NUM (BATSET, R17)

Resistor value Cell count Remarks
3.6kΩ 2S  
6.2kΩ 3S  
9.1kΩ 4S  
13kΩ 5S  
18kΩ 6S  
27kΩ 6S (default for board V1.3)

VSET (R18)

Sets the cell voltage which depends on the cell chemistry:

Resistor value Cell voltage Remarks
3.6kΩ 3.65V (LiFePO₄)
6.2kΩ 4.1V  
9.1kΩ 4.2V (standard Li-ion)
13kΩ 4.35V  
18kΩ 4.4V  
27kΩ 4.2V plus diagnostic output (default for board V1.3)

The 27 kΩ setting additionally enables diagnostic serial output on the VSET pin after configuration is detected.

PSET (R19)

Sets the maximum power the board can deliver. This setting applies to both charging and discharging.

Resistor value Max power Fan/Heat Sink required
3.6 kΩ 30W no
6.2kΩ 45W no
9.1kΩ 60W yes
13kΩ 65W yes
18kΩ 100W yes
27kΩ 140W yes; (default for board V1.3)

Warning: Setting the power incorrectly can be dangerous:

  • Charging Current:
    The setting sets both charging and discharging current. If you set power to i.e. 140 W, then your battery will be charged with up to 140 W. A two-string LiIon battery would therefore receive a charging current of roughly up to 23.5 A.

    With the display versions only, you can limit the charging current separately using Batt Cur (I²C register 0x03/SYS_CTL3, field Iset).

    On non-display versions, some IP2366 use a default value of 9.7A, so they cap charging current at this value. However, this is not guaranteed, so you should double-check.

  • Excessive Heat:
    Starting at roughly 45-60 W, the MOSFETs on the board can no longer passively dissipate the heat. At 45 W, they stabilize at around 50 degrees celsius. Make sure you add a fan and/or heat sink and monitor the temperature if you want to use higher power levels.

With higher power levels, use higher-string batteries to keep the currents manageable.

Here is a table with maximum currents when using 140 W:

LiFePO₄ Cells

Assumed low voltage cutoff at 2.5 V:

String Count Maximum Current (roughly)
2S 28 A
3S 18.7 A
4S 14 A
5S 11.2 A
6S 9.4 A

LiIon/LiPo Cells

Assumed low voltage cutoff at 3.0 V:

String Count Maximum Current (roughly)
2S 23.4 A
3S 15.6 A
4S 11.7 A
5S 9.4 A
6S 7.8 A

CC_BDO (R20)

Affects how two USB PD devices negotiate power direction.

USB PD can both sink and source power:

  • Sink:
    Accepts power via USB-C and charges the battery
  • Source:
    Provides power to connected devices on the USB-C port

IP2366 supports both (dual mode, DRP), so you can both power devices and charge the battery via the same USB-C connector. Issues can arise, though, when two DRP devices are connected, i.e. when you connect a powerbank or a notebook to this board.

Since now both devices - this board as well as the connected device - can deliver or accept charge, CC_BDO (R20) can resolve ambiguity.

By default, the board wakes up in sink mode, and when you connect a DRP device, the board may request power to charge its battery. So when you connect a powerbank, it charges the battery of this board, and when you connect a notebook, the notebook battery will drain to charge the battery connected to this board.

Via R20, you can change its default to source mode. Now the board would try to deliver power.

In reality, CC_BDO does not always resolve ambiguity and does not permanently restrict the IP2366 to charging or discharging. It just determines the initial USB-C role in low-power mode, not necessarily the role after the device wakes up and negotiates a connection.

So if the notebook or powerbank default is also set to sink, power direction would still depend on USB PD negotiation, and you might even see power direction change back and forth.

Resistor value Initial Role Remarks
open Sink (UFP) board charges the battery via USB-C by default
1kΩ Source (DFP) board provides power to devices connected via USB-C by default

Base Board Configuration

Before use, adjust the ten DIP switches to your needs:

If you use the display board, you can still use the DIP switches to set your default values: carefully pull off the daughter board with the display to gain access to the base board DIP switches. Newer hardware revisions however lack the DIP switch for display boards.

  • Battery:

    Switches 1 - 5 set the string count to 2 - 6, so the minimum string count is 2S.

  • Power:

    Set the maximum power using switches 6 - 8. Keep in mind that even with the lowest setting of 65 W, the board can already warm up significantly. To be able to use 140 W, you must add a fan and heat sink.

  • Battery Chemistry:

    Take special care with switches 9 and 10: they set the battery chemistry and determine whether the charger charges to 3.65 V (LiFePo4) or 4.2 V (LiIon). Apparently, there is an error in the original documentation: all boards I tested used switch 9 for LiIon/LiPo and switch 10 for LiFePo4. The vendors’ documentation claims it is the other way around. If in doubt, measure the battery connector’s open-circuit voltage.

Only one switch per group may be in the ON position, so make sure there are exactly three switches in ON position.

Wiring

Here is the fundamental setup:

1. Connect Charger Only

Initially, connect only a USB charger to the board. Do not yet connect the battery. Then check this:

  • Screen broken?
    Does the screen come up at all? Is it broken? The screen is fragile, and the units are often shipped with poor protection, so checking for damages should be done immediately after arrival to not miss return windows.

  • Charging Voltage Correct?
    Next, measure the voltage at the battery connector. While it may fluctuate a bit as the chip is trying to identify the battery, make sure the highest voltage does not exceed the intended charging voltage.

    If it does, power off the unit, and revisit the configuration of the DIP switches. Make sure you configured string count and battery chemistry correctly. Make also sure you did not accidentally put more than one switch to ON per configuration group.

    Note that the description of switches 9 and 10 (battery chemistry) may be reversed in the original vendor documentation. Always check the output voltage before you connect a battery.

On newer firmware, the display will show a Chinese message until you both connect a charger and a battery.

2. Disconnect Charger, and Connect Battery

Next, remove the USB charger, and connect the battery. This is important because in the default settings, charging current may be way too high for your battery.

With only the battery connected, the screen should come to live, and you can now review the settings and make any adjustments necessary (see below). One of the first things you may want to do is change the UI language from Chinese to English.

In newer firmware revisions, this no longer works and isn’t necessary anymore. Instead, to get rid of the Chinese nag screen, connect both the battery and the charger. Then, in an initial quick setup screen, configure the battery. The charger won’t operate until this configuration is completed.

Warning: High Battery Current

Depending on how you operate the board, there may be high currents on the battery side (which is why the board uses XT30 high-current connectors that can handle up to 30 A).

If, for example, you use a 2S battery and have enabled the full 140 W, then a load on the USB PD side could draw a maximum of 28 V 5 A (140 W). At a nominal 7.4 V on the 2S battery side, this would require roughly 21 A (including converter losses).

The maximum battery current is controlled in two ways:

  • Charge:
    IP2366 supports a maximum charging current of 9.7 A which can be controlled in 100 mA steps through I²C register 0x03 (SYS_CTL3, Iset), available in the display settings as Batt Cur.
  • Discharge:
    The maximum battery current during discharge is controlled by the power setting, which can be set by the DIP switch as well as I²C register 0x0C, available in the display settings as In/Out Power.

    The DIP switch allows for 65/100/140 W, and I²C/display settings can control power in the range of 30-140 W in steps of 30/45/60/65/100/140 W.

The output power setting also governs charging and cannot be exceeded. So for example, if you set Batt Cur to i.e. 8 A and In/Out Power to 30 W, the charging current is capped at 30 W. A 4S battery would charge with currents limited to 2-3 A.

Enable Button

The base board does not come with an installed Enable push button, so by default, the USB PD power output is activated automatically when a sufficiently large load is plugged in.

If you want to be able to manually enable the output via a push button - like many power banks do - there are already three through-holes on the PCB, next to the USB-C connector, that let you solder on a push button or wires.

The single through-hole towards the side with the USB-C connector is GND. You need the other two through-holes that are lined up: when you short these for a few milliseconds, the output is activated.

Display Board Configuration

If you opted for a board with a TFT-display daughter board, you should first configure the base board exactly as described above. Carefully pull off the daughter board to gain access to the 10-switch DIP panel, and set your defaults.

After this, you continue with the software configuration. Unfortunately, that’s not trivial since the firmware uses Chinese characters by default. Once you have completed the initial setup, though, the UI is in English.

Navigation for this board is done through the three push buttons:

Button Description
S1 move up
S2 short press: select
long press: confirm and exit
S3 move down

Configuration

When you connect the display board to a USB charger, the display turns on. Unfortunately, the firmware initially runs with Chinese language settings.

  1. Unlocking IP2366:

    If you see a screen with Chinese characters that does not respond to button presses, then you need to connect a USB charger to the board, at least for a few seconds. By default, IP2366 is in locked mode. Connecting a charger unlocks it.

    Generally, this Chinese screen appears whenever the microcontroller cannot access the IP2366 I²C interface.

  2. Pre-Setup:

    Next, you see a setup page with only the most important settings, such as string count and battery voltages.

    This screen, too, is initially in Chinese, and there is no way to change the language at this point. Later, once you have changed the language, this screen will also be translated. I have included the English screens here for better orientation.

    Setup Next controls whether you want to see this setup screen the next time you power on the chip. If you plan to experiment, keep Yes. If you permanently attach the board to a particular battery that will not require changes later, choose No.

    Accept the values by long-pressing the middle button (S2).

  3. Operations Screen:

    This brings you to the regular operations screen, where you see a varying number of monitoring and operation-related properties.

    Pressing the upper button switches between screen layouts.





  4. Settings:

    Long-pressing the middle button (S2) opens the settings menu.

    • Gauging, Battery, Max Power, and State of Charge:

      Battery state-of-charge can be based on voltage or on coloumb counting, controlled by Batt Percent.

      Coloumb counting (set to Gauge) is much more accurate but requires that you set the accurate battery capacity in Capacity. It also requires a full discharge/charge cycle. So initially, in this setting the battery gauge is not working properly.

      Use the setting Voltage instead of Gauge to derive the state of charge from the battery voltage. This works immediately, but it can provide only a rough estimate with a high margin of error.

      In/Out Power controls the maximum power available. Make sure this fits your battery (both charging and discharging current at battery voltage), and ensure a fan and heat sinks are in place before you select any rating above 65 W.

    • Maximum Battery Charging Current:

      Batt Cur limits the charging battery current.

      This is different from In/Out Power which controls the discharge current.

    • Fan Control and Bidirectional Operation:

      Fan Temp sets the temperature at which the attached fan activates. This is controlled by the NTC Sensor attached to the daughter board. You need to connect a 5 V two-wire fan to the daughter board yourself; a fan is not included.

      Connect it to the through-holes marked + - next to the push buttons:

      The second NTC sensor connected to the base board is controlled via Batt NTC and should remain ON and placed close to the battery to ensure charging stops on overheating.

      With C Mode, you control whether the IP2366 should work bidirectional (charge and discharge), or just one way.

    • Auto Sleep and Screen Rotation:

      Auto Sleep is important: by default, it is set to OFF, meaning the display will stay on forever, eventually draining a battery. You can set it to Auto or specify a time in the range of 5-120 seconds. This turns off the display and puts the MCU in sleep until you press any button.

      With Rotation you can rotate the screen in order to adjust it to the way you mount this board.

    • UI Language:

      Finally, at the very end you find the setting Language. Press the middle button S2 to enter the setting, press S3 to select English, and press S2 again to confirm. Long-press S2 to save and exit the menu.

Fan Control

The display version comes with built-in temperature-controlled fan support. You just need to supply a two-wire 5 V fan.

Connect the fan to the two solder pads marked + -, and make sure you use the correct polarity.

In the settings (discussed above), you can set the temperature at which the fan should start spinning. The fan is controlled by the NTC temperature probe soldered to the daughter board. The other NTC probe is soldered to the base board and controls the IP2366.

Attention: Heat!

While this board supports up to 140 W, it needs excessive cooling for this. Without additional cooling, it can only be operated at up to 30 W.

In a test setup, charging a 4S LiFePo4 with 2 A (roughly 30 W), the IP2366 and the four MOSFETs heated up to around 50 degrees celsius.

The inductor on the opposite board side was less of a problem:

If you intend to use this board with more than 30 W power, add efficient cooling:

  • Heat Sink:
    Add heat sinks to both the IP2366 and the four MOSFETs
  • Active Cooling:
    For high power output, heat sinks will not be enough. Add a fan. The display board comes with built-in support for a 5 V two-wire fan.

I²C Connector

Versions with a display feature a 6-pin connector on the base board:

Pin assignment from left to right:

Pin Description
1 GND
2 ENABLE
3 INT
4 SDA
5 SCL
6 BAT+

The base board that comes without a display has no connector and instead four LEDs. The through-holes for the connector are nonetheless present.

Exercice extreme care when working with these pins. GND and VBAT pins are the outer pins, and VBAT can carry a high voltage with full battery power, so confusing these pins has desastrous effects.

Testing I²C

If you want to test whether your display-less board may possibly have an I²C-enabled IP2366, you must remove the two tiny LED resistors (or better yet: lift them up just on one side so you can later solder them back in place).

This requires a fine solder tip and some soldering skills. You may as well skip it. I have tested a number of display-less boards from different shipments and vendors, and they all did not support I²C.

The picture below shows both methods: on the left, the resistor is removed, and on the right, it is lifted up on one side only:

Next, add pull-up resistors to 4 (SDA) and 5 (SCL), and connect them to an I²C scanner (sketches for I²C scanners are available everywhere and are really simple). Do not forget to connect pin 1 (GND) to your scanner’s GND.

If your IP2366 supports I²C, it responds at address 0x75.

An even easier test: with the pull-ups in place, check the voltage on both I²C pins. When I²C is enabled, they should sit at around 3.3 V most of the time. With the non-I²C version of IP2366, the voltage is around 1.6 V despite the pull-ups.

Firmware and Updates

The display version of this board is especially interesting since it comes with its own dedicated microcontroller.

The programming interface for this Arm Cortex MCU can be found on the back side of the PCB.

The producer promises full open source code and access to the toolchain as well as future firmware updates.

This would place this board in the premier league: it would come with an I²C-enabled IP2366 that is already hooked up to a microcontroller and screen, potentially opening up an entire universe of useful applications.

When you scan the QR code on the board, it leads you to a Chinese QQ group:

All resources for this board are maintained in QQ group 170681020.

To access this group, though, you must sign up for QQ, and to be able to sign up for QQ, you must be Chinese (and have a Chinese phone number at hand). So these resources are unavailable outside China.

Anyone with a QQ account, please leave a comment below, and I will get in touch with you ASAP. I would really love to get the official firmware and play with it here.

Materials

Puya PY32F030 Datasheet

Slow Website?

This website is very fast, and pages should appear instantly. If this site is slow for you, then your routing may be messed up, and this issue does not only affect done.land, but potentially a few other websites and downloads as well. Here are simple steps to speed up your Internet experience and fix issues with slow websites and downloads..

Comments

Please do leave comments below. I am using utteran.ce, an open-source and ad-free light-weight commenting system.

Here is how your comments are stored

Whenever you leave a comment, a new github issue is created on your behalf.

  • All comments become trackable issues in the Github Issues section, and I (and you) can follow up on them.

  • There is no third-party provider, no disrupting ads, and everything remains transparent inside github.

Github Users Yes, Spammers No

To keep spammers out and comments attributable, all you do is log in using your (free) github account and grant utteranc.es the permission to submit issues on your behalf.

If you don’t have a github account yet, go get yourself one - it’s free and simple.

If for any reason you do not feel comfortable with letting the commenting system submit issues for you, then visit Github Issues directly, i.e. by clicking the red button Submit Issue at the bottom of each page, and submit your issue manually. You control everything.

Discussions

For chit-chat and quick questions, feel free to visit and participate in Discussions. They work much like classic forums or bulletin boards. Just keep in mind: your valued input isn’t equally well trackable there.

  Show on Github    Submit Issue

(content created Oct 05, 2026 - last updated Oct 25, 2026)