

The TP4056 is a lithium-ion battery charger IC that provides a constant current/constant voltage (CC/CV) charging profile. It is specifically designed for charging single-cell lithium-ion batteries with high efficiency and reliability. The IC integrates several safety features, including thermal regulation, over-voltage protection, and automatic charge termination, making it a popular choice for portable electronics and DIY projects.








The TP4056 is a compact and efficient charging IC with the following key specifications:
| Parameter | Value |
|---|---|
| Input Voltage Range | 4.0V to 8.0V |
| Charging Voltage | 4.2V ± 1% |
| Maximum Charging Current | 1A (adjustable via external resistor) |
| Charging Method | Constant Current / Constant Voltage (CC/CV) |
| Operating Temperature Range | -40°C to +85°C |
| Standby Current | < 55µA |
| Battery Overvoltage Protection | 4.3V |
| Thermal Regulation | 120°C (reduces charging current to prevent overheating) |
The TP4056 is typically available in an 8-pin SOP package. Below is the pin configuration and description:
| Pin Name | Pin Number | Description |
|---|---|---|
| BAT | 1 | Battery connection pin. Connect directly to the positive terminal of the battery. |
| GND | 2 | Ground pin. Connect to the system ground. |
| VCC | 3 | Input voltage pin. Connect to a DC supply (4.0V to 8.0V). |
| PROG | 4 | Charging current programming pin. Connect a resistor to set the charging current. |
| TEMP | 5 | Temperature monitoring pin. Connect to an NTC thermistor for battery temperature sensing. |
| STAT1 | 6 | Status indicator pin 1. Used with STAT2 to indicate charging status. |
| STAT2 | 7 | Status indicator pin 2. Used with STAT1 to indicate charging status. |
| CE | 8 | Chip enable pin. Pull low to enable charging, pull high to disable. |
The TP4056 can be used with an Arduino UNO to monitor the charging status. Below is an example code to read the status pins:
// TP4056 Status Monitoring with Arduino UNO
// Connect STAT1 to Arduino pin 2 and STAT2 to pin 3
const int stat1Pin = 2; // STAT1 pin connected to Arduino digital pin 2
const int stat2Pin = 3; // STAT2 pin connected to Arduino digital pin 3
void setup() {
pinMode(stat1Pin, INPUT); // Set STAT1 as input
pinMode(stat2Pin, INPUT); // Set STAT2 as input
Serial.begin(9600); // Initialize serial communication
}
void loop() {
int stat1 = digitalRead(stat1Pin); // Read STAT1 pin
int stat2 = digitalRead(stat2Pin); // Read STAT2 pin
if (stat1 == HIGH && stat2 == LOW) {
Serial.println("Charging in progress...");
} else if (stat1 == LOW && stat2 == HIGH) {
Serial.println("Charging complete.");
} else if (stat1 == LOW && stat2 == LOW) {
Serial.println("No battery connected or charging disabled.");
} else {
Serial.println("Unknown status.");
}
delay(1000); // Wait for 1 second before checking again
}
Battery Not Charging
Overheating
Status LEDs Not Working
Charging Stops Prematurely
Q1: Can the TP4056 charge multiple batteries in series?
A1: No, the TP4056 is designed for single-cell lithium-ion batteries only. Charging multiple cells in series requires a specialized multi-cell charger.
Q2: How do I adjust the charging current?
A2: Use a resistor (RPROG) connected to the PROG pin. The charging current is calculated as ( I_{CHG} = \frac{1200}{R_{PROG}} ).
Q3: Is the TP4056 safe for unattended charging?
A3: Yes, the TP4056 includes safety features like thermal regulation and over-voltage protection. However, it is recommended to use a battery with a protection circuit for added safety.
Q4: Can I disable charging temporarily?
A4: Yes, pull the CE pin high to disable charging. Pull it low to enable charging.