Cómo conectar el TP4056: cargador de batería 18650 y ESP32
Cómo conectar el TP4056: pines B+/B- y OUT+/OUT-, versión con protección DW01, LEDs, corriente de carga con Rprog, 5 V con MT3608 y medir la batería con ESP32.
Conectar el TP4056 es la forma más barata de cargar de manera segura por USB una batería 18650 o LiPo de una celda y alimentar con esa misma batería un proyecto con Arduino, ESP32 o Raspberry Pi Pico: el cable USB va a la entrada del módulo, la batería a B+ y B- y, en los módulos con protección, tu circuito a OUT+ y OUT-. El módulo carga la batería hasta 4,2 V con el método de corriente constante y tensión constante, corta la carga por sí solo cuando la batería está llena y muestra el estado con dos LEDs. Esta placa del tamaño de una uña es el corazón de proyectos que funcionan lejos del enchufe, como estaciones meteorológicas portátiles, robots, lámparas recargables y sensores inalámbricos.
Pero este módulo barato tiene algunas trampas: las versiones con y sin protección se conectan de forma distinta, la corriente de carga de 1 A que trae de fábrica es demasiada para baterías pequeñas, alimentar el circuito mientras carga puede impedir que la carga termine y dos celdas en serie nunca se pueden cargar con este módulo. En esta guía aprenderás paso a paso para qué sirve cada pin, qué significan los LEDs, cómo ajustar la corriente de carga con la resistencia Rprog, cómo añadir un elevador MT3608 para placas que necesitan 5 V y cómo medir la tensión de la batería con un ESP32 para convertirla en porcentaje.

¿Qué es el TP4056 y cómo funciona?
El TP4056 es un circuito integrado cargador lineal pensado para baterías de iones de litio (Li-ion) y de polímero de litio (LiPo) de una sola celda. Las baterías de litio no se pueden cargar con cualquier adaptador; necesitan un perfil de carga concreto, y el TP4056 lo aplica él solo. Si la batería está por debajo de 2,9 V, primero la carga con suavidad en la fase de precarga (trickle) con aproximadamente una décima parte de la corriente ajustada, unos 130 mA con el ajuste de 1 A. Cuando la tensión supera 2,9 V, pasa a la fase de corriente constante (CC) y entrega toda la corriente ajustada. Al llegar la batería a 4,2 V empieza la fase de tensión constante (CV): la tensión se mantiene en 4,2 V y la corriente va bajando poco a poco. La carga termina cuando la corriente cae a una décima parte del valor ajustado (100 mA con el ajuste de 1 A). Si después la batería baja a unos 4,05 V, el módulo vuelve a cargar automáticamente. Si el chip se calienta mucho, reduce la corriente de carga por su cuenta, así que es normal que el módulo esté caliente mientras carga.
| Característica | Valor |
|---|---|
| Tensión de entrada | 4,0–8 V (recomendado 5 V; micro USB o USB-C) |
| Tensión de fin de carga | 4,2 V (±1,5 %) |
| Corriente de carga | Hasta 1 A; 1 A por defecto en los módulos (Rprog = 1,2 kΩ) |
| Precarga | Por debajo de 2,9 V, aproximadamente 1/10 de la corriente ajustada |
| Fin de carga | Cuando la corriente baja a 1/10 del valor ajustado (C/10) |
| Recarga | Automática cuando la batería baja a unos 4,05 V |
| Salidas de estado | LEDs CHRG (cargando) y STDBY (llena) |
| Baterías compatibles | Solo una celda (1S) Li-ion o LiPo de 3,7 V; no LiFePO4 |
Diferencia entre el módulo TP4056 con protección (DW01) y sin protección
Con el mismo nombre se venden dos placas distintas. El módulo sin protección solo lleva el chip TP4056 y tiene cuatro puntos de conexión: IN+/IN- y BAT+/BAT-. Carga la batería, pero no vigila nada mientras se descarga. El módulo con protección añade el circuito de protección DW01A y el doble MOSFET 8205A, y tiene seis pads: IN+/IN-, B+/B- y OUT+/OUT-. El circuito de protección actúa como un interruptor entre el negativo de la batería y el negativo de tu circuito (OUT-). Cuando la batería se descarga o se carga en exceso, cuando el circuito consume demasiada corriente o cuando hay un cortocircuito en la salida, abre ese interruptor y desconecta la batería del circuito.
| Característica | Módulo sin protección | Módulo con protección (DW01A + 8205A) |
|---|---|---|
| Pads | IN+, IN-, BAT+, BAT- | IN+, IN-, B+, B-, OUT+, OUT- |
| Protección contra sobrecarga | Solo el límite de 4,2 V del TP4056 | Además corta hacia 4,25–4,3 V |
| Protección contra sobredescarga | No | Corta hacia 2,4 V y vuelve a conectar sobre 3,0 V |
| Sobrecorriente y cortocircuito | No | Corta hacia 3 A y ante un cortocircuito |
| ¿Cuándo elegirlo? | Si la batería ya tiene su propio circuito de protección | Con celdas sin protección, es decir, en casi todos los proyectos |
Batería 18650: las tensiones que debes conocer
El nombre 18650 viene de sus medidas: 18 mm de diámetro y 65 mm de largo. Su tensión nominal es de 3,6–3,7 V, pero es un promedio; una celda llena está a 4,2 V y una descargada a unos 3,0 V. Las capacidades reales van de 2000 a 3500 mAh; las que dicen 6800 o 9900 mAh son falsas y a menudo no llegan ni a 1000 mAh. Las 18650 protegidas, con su propio circuito de protección, son unos milímetros más largas y pueden no caber en todos los portapilas. Puedes calcular cuánto durará tu proyecto con una batería con la calculadora de duración de batería y leer sobre las unidades de capacidad en qué significan mAh y Wh.
| Estado | Tensión | Explicación |
|---|---|---|
| Carga completa | 4,20 V | Aquí termina la carga el TP4056 |
| Nominal | 3,6–3,7 V | El valor de la etiqueta, tensión media de trabajo |
| Se considera descargada | 3,0–3,3 V | Detener el proyecto aquí alarga la vida de la batería |
| Corte de protección | 2,4–2,5 V | El DW01A apaga la salida; intenta no llegar tan bajo |
| Zona peligrosa | Menos de 2,0 V | No cargues una celda que ha estado así mucho tiempo; cámbiala |

Conexión del TP4056: pines IN, B+/B- y OUT+/OUT-
| Pad | Se conecta a | Nota |
|---|---|---|
| Entrada USB | Adaptador de 5 V u ordenador | Micro USB o USB-C; la forma más sencilla |
| IN+ / IN- | Positivo y negativo de una fuente externa de 5 V | Para alimentar soldando en lugar de por USB; no uses ambas a la vez |
| B+ / B- | Positivo y negativo de la batería 18650 | Aquí solo va la batería |
| OUT+ / OUT- | Positivo y negativo de tu circuito (la carga) | En el módulo con protección la carga siempre va aquí |
| BAT+ / BAT- (sin protección) | Batería y carga juntas | Sin protección; la carga va en paralelo con la batería |
- Suelda el cable rojo del portapilas a B+ y el negro a B-. Todavía no pongas la batería.
- Suelda el cable positivo de tu circuito a OUT+ y el negativo (GND) a OUT-. Si vas a alimentar una placa que necesita 5 V, entre medias irá un elevador MT3608.
- Revisa las soldaduras y comprueba con el multímetro que no haya cortocircuito entre B+ y B-.
- Coloca la batería respetando la polaridad. En algunos módulos con protección la salida puede estar apagada al principio; conectar el USB una vez reinicia la protección y activa la salida.
- Conecta el cable USB: si el LED rojo se enciende, la carga ha empezado. Cuando la batería se llena, el rojo se apaga y se enciende el azul o el verde.
- Cuando el multímetro marque la tensión de la batería (3,0–4,2 V) entre OUT+ y OUT-, ya puedes poner en marcha tu circuito.
¿Qué indican los LEDs del TP4056?
| LED rojo (CHRG) | LED azul o verde (STDBY) | Significado |
|---|---|---|
| Encendido | Apagado | Cargando |
| Apagado | Encendido | Carga completa (4,2 V) |
| Parpadea o titila | Encendido | No hay batería o hace mal contacto |
| Apagado | Apagado | Entrada por debajo de 4 V o sin alimentación USB |
| Encendido durante horas | Apagado | La carga conectada impide terminar o la batería está gastada |
Sin batería es normal que el LED azul esté encendido y el rojo parpadee: el módulo carga y descarga continuamente el condensador del terminal de batería vacío. Puedes estimar el tiempo de carga con capacidad / corriente × 1,2. Una celda de 2600 mAh se carga en unas 3 horas a 1 A; como la corriente va bajando en la última fase, tarda algo más de lo que da la simple división.
Ajustar la corriente de carga: la resistencia Rprog
La corriente de carga la fija una sola resistencia entre el pin PROG (pin 2) del TP4056 y GND. En la mayoría de los módulos está marcada como R3 y lleva el código 122, es decir, 1,2 kΩ, que equivale a 1 A. Para descifrar estos códigos puedes usar la herramienta código SMD. La fórmula aproximada es I (mA) = 1200 / Rprog (kΩ). Para cambiar la corriente, desueldas la resistencia SMD y sueldas el valor que quieras; si no encuentras una SMD del tamaño adecuado, también puedes soldar una pequeña resistencia de patillas sobre los dos pads.
| Rprog | Corriente de carga | Batería adecuada |
|---|---|---|
| 10 kΩ | 130 mA | LiPo pequeña de 200–300 mAh |
| 5 kΩ | 250 mA | LiPo de 300–500 mAh |
| 4 kΩ | 300 mA | LiPo de 500–600 mAh |
| 3 kΩ | 400 mA | Unos 800 mAh |
| 2 kΩ | 580 mA | 1000–1200 mAh |
| 1,5 kΩ | 780 mA | 1500 mAh o más |
| 1,2 kΩ | 1000 mA | 18650 de 2000 mAh o más (valor por defecto del módulo) |
La regla general es mantener la corriente de carga en torno a la mitad de la capacidad (0,5C): 250 mA van bien para una LiPo de 500 mAh y 1 A para una 18650 de 2600 mAh. Ten en cuenta también el calor: como el TP4056 es lineal, la diferencia de tensión entre la entrada y la batería se convierte en calor. Al cargar una celda de 3,6 V a 1 A desde 5 V, el chip disipa (5 − 3,6) × 1 = 1,4 W; por eso el módulo se calienta mucho y puede reducir la corriente por sí mismo. Este tipo de cálculos de potencia también los puedes hacer con la calculadora de la ley de Ohm. El puerto USB 2.0 de un ordenador solo da 500 mA, así que si vas a cargar a menudo desde el ordenador conviene bajar la corriente a unos 500 mA.
Alimentar el circuito mientras carga (load sharing)
Si quieres que tu proyecto siga funcionando con el USB conectado, lo más sencillo es dejar el circuito conectado a OUT+ y OUT-; así el TP4056 carga la batería y alimenta el circuito a la vez. Pero el chip no distingue la corriente que va a la batería de la que va al circuito. Si tu circuito consume siempre más de 100 mA, la corriente total nunca baja del umbral de fin de carga, la carga no termina nunca y la batería se queda horas a 4,2 V, lo que acorta su vida. Si tu circuito consume cerca de 1 A, la batería ni siquiera llega a llenarse. Con un ESP32 en sueño profundo o circuitos pequeños de pocos mA, la conexión directa no da problemas en la práctica; para proyectos Wi-Fi siempre encendidos, motores y tiras LED, monta un circuito de reparto de carga (load sharing).
| Componente | Conexión | Función |
|---|---|---|
| Diodo Schottky (1N5817, SS14) | Ánodo a los 5 V del USB (IN+), cátodo a la entrada positiva del circuito | Alimenta el circuito directamente cuando hay USB |
| MOSFET de canal P (AO3401, DMG2305) | Drenador a la batería (OUT+), fuente a la entrada positiva del circuito | Conecta la batería al circuito cuando no hay USB |
| Conexión de la puerta del MOSFET | Directamente a los 5 V del USB (IN+) | Con el USB conectado el MOSFET queda en corte y la batería solo se carga |
| Resistencia de 100 kΩ | Entre la puerta del MOSFET y GND | Al quitar el USB lleva la puerta a 0 V y el MOSFET conduce |
¿Necesitas 5 V? Añade un elevador MT3608
La tensión de una 18650 va de 3,0 a 4,2 V; no basta para un Arduino Uno, módulos de relé, servomotores o LEDs WS2812B que piden 5 V. La solución es un convertidor elevador (step-up o boost). El más común es el módulo MT3608: da una salida ajustable de hasta 28 V con una entrada de 2–24 V, conmuta a 1,2 MHz y su interruptor interno tiene un límite de corriente de 4 A. En la práctica puedes sacar con seguridad unos 0,5–1 A a 5 V de una sola 18650; por encima, el módulo se calienta y baja el rendimiento. Cuando lo que necesitas es bajar la tensión, usas el módulo reductor LM2596, que hace justo lo contrario.
- Conecta las entradas VIN+ y VIN- del MT3608 a OUT+ y OUT- del TP4056.
- Sin conectar todavía nada a la salida, pon el multímetro entre VOUT+ y VOUT-.
- Gira el trimpot azul con un destornillador pequeño hasta que la salida marque 5,0–5,1 V. Es un trimpot multivuelta, así que la tensión puede tardar varias vueltas en empezar a cambiar; ten paciencia.
- Cuando esté ajustado, conecta el pin 5V de tu placa a VOUT+ y el pin GND a VOUT-.
- Vuelve a medir la tensión con el circuito funcionando; si con carga baja de 4,8 V, acorta los cables o reduce el consumo.
| Placa | Cómo alimentarla con una sola 18650 | Nota |
|---|---|---|
| Arduino Uno / Nano | 5,0 V del MT3608 → pin 5V | El pin 5V se salta el regulador; nunca superes 5,5 V |
| Arduino Pro Mini 3,3 V (8 MHz) | OUT+ directamente al pin RAW | Su regulador de baja caída funciona con la tensión de la batería |
| ESP32 DevKit | 5 V del MT3608 → pin VIN (5V) | El AMS1117 de la placa pierde cerca de 1 V; no conectes la batería directamente |
| Raspberry Pi Pico | OUT+ → diodo Schottky → VSYS (pin 39) | VSYS admite 1,8–5,5 V; no hace falta elevador |
| Módulo GSM SIM800L | OUT+ y OUT- directamente | Pide 3,4–4,4 V; ideal para Li-ion |
Si conectas la placa al USB para subir código con la salida del elevador todavía conectada, estás uniendo dos fuentes de alimentación. Lo más seguro es desconectar la salida del elevador mientras subes el código. Por qué pin y cómo se alimenta un Arduino lo tienes explicado en detalle en cómo alimentar un Arduino.
Las baterías en serie no se cargan con el TP4056
El TP4056 solo carga una celda (1S) hasta 4,2 V. Un pack de dos 18650 en serie (2S), muy usado en coches robot, tiene 7,4 V nominales y 8,4 V cargado; si lo conectas a un solo TP4056 no se carga, y el módulo y las celdas pueden dañarse. Poner un TP4056 distinto en cada celda tampoco sirve: los negativos de entrada de los módulos se unen en la misma fuente USB y, como el negativo del módulo de arriba está en el positivo de la celda de abajo, esa celda queda en cortocircuito. Y como su tensión final está fijada en 4,2 V, el TP4056 tampoco se usa con baterías LiFePO4, cuya carga debe terminar a 3,6 V.
- Conéctalas en paralelo (1S2P): con dos celdas en paralelo la tensión sigue en 3,7 V, la capacidad se duplica y puedes cargarlas con un TP4056. Antes de unirlas, asegúrate de que tienen la misma tensión.
- Elévala con un boost: si necesitas 7–12 V, eleva la salida de las celdas en paralelo con un MT3608.
- Usa un circuito de carga 2S: un pack en serie necesita un cargador CC/CV de 8,4 V y una placa BMS 2S con balanceo.
- Saca las celdas para cargarlas: puedes quitar las celdas del pack en serie de su portapilas y cargarlas una a una en un cargador de 18650 aparte.
Medir la tensión de la batería: conexión del divisor de tensión
Para saber cuánta carga le queda a la batería basta con medir su tensión. Pero una batería de 4,2 V no puede ir directamente a un pin analógico del ESP32 o de la Pico, porque sus entradas ADC aguantan como máximo 3,3 V. La solución es un divisor de tensión con dos resistencias iguales: 100 kΩ + 100 kΩ bajan 4,2 V a 2,1 V y solo consumen 21 µA de la batería. Puedes calcular los valores con la calculadora de divisor de tensión y leer cómo funciona el circuito en el divisor de tensión. Añadir un condensador de 100 nF entre el punto de medida y GND estabiliza bastante las lecturas hechas con resistencias de valor alto.
| Conexión | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| Resistencia superior (100 kΩ) | OUT+ → punto medio | OUT+ → punto medio | OUT+ → punto medio |
| Resistencia inferior (100 kΩ) | Punto medio → GND | Punto medio → GND | Punto medio → GND |
| Punto medio (medida) | A0 | GPIO 34 (ADC1) | GP26 (ADC0) |
| Condensador de 100 nF | Opcional | Punto medio → GND | Punto medio → GND |
| OUT- del TP4056 | GND | GND | GND |
| Rango del ADC | 0–5 V, 10 bits | Aprox. 0–3,1 V, 12 bits | 0–3,3 V, 12 bits |
El ADC del Arduino Uno trabaja con una referencia de 5 V; gracias al divisor, una batería de 4,2 V aparece en A0 como 2,1 V y la lectura de 10 bits da un valor entre 0 y 1023. Cuando la placa se alimenta por USB o desde un elevador, el pin 5V puede no estar exactamente a 5,00 V; si lo mides con el multímetro y lo escribes como VREF en el código, la precisión mejora bastante.
1// Arduino Uno: 18650 pil voltajı, A0'da 100k + 100k bölücü / battery voltage, 100k + 100k divider on A0
2const float VREF = 5.0; // 5V pinini multimetreyle ölçüp yaz / measure the 5V pin and enter it
3const float DIVIDER = 2.0; // bölücü oranı / divider ratio
4
5void setup() {
6 Serial.begin(9600);
7}
8
9void loop() {
10 long sum = 0;
11 for (int i = 0; i < 16; i++) { // 16 ölçümün ortalaması / average of 16 readings
12 sum += analogRead(A0); // 0-1023
13 delay(2);
14 }
15 float v = (sum / 16.0) * VREF / 1024.0 * DIVIDER;
16 Serial.print(F("Pil / Battery: "));
17 Serial.print(v, 2);
18 Serial.println(F(" V"));
19 if (v < 3.3) Serial.println(F("Pil zayif / Battery low"));
20 delay(1000);
21}Medir la tensión de la batería y mostrar el porcentaje con el ESP32
El ADC del ESP32 no es del todo lineal y varía de una placa a otra. Por eso, en lugar del analogRead en bruto, es más preciso usar analogReadMilliVolts, que aplica la calibración de fábrica del chip y devuelve directamente milivoltios. El código siguiente promedia 16 lecturas, multiplica por la relación del divisor para obtener la tensión de la batería, la convierte en porcentaje con una tabla y, si la batería baja de 3,3 V, manda el ESP32 a sueño profundo durante 10 minutos.
1// TP4056 + 18650: ESP32 ile pil voltajı ve yüzdesi / battery voltage and percentage with ESP32
2const int BAT_PIN = 34; // ADC1 pini, Wi-Fi açıkken de çalışır / ADC1 pin, works with Wi-Fi on
3const float DIVIDER = 2.0; // 100k + 100k bölücü: pil / 2 / 100k + 100k divider: battery / 2
4const float LOW_BAT = 3.30; // bu değerin altında uykuya geç / go to sleep below this voltage
5
6// Yaklaşık gerilim-yüzde tablosu (dinlenen pil) / approximate voltage-percent table (resting cell)
7const float volts[] = {3.30, 3.60, 3.70, 3.80, 3.85, 3.90, 4.00, 4.10, 4.20};
8const int percent[] = { 0, 5, 12, 40, 55, 63, 78, 89, 100};
9const int POINTS = 9;
10
11float readBattery() {
12 uint32_t sum = 0;
13 for (int i = 0; i < 16; i++) { // 16 ölçümün ortalaması / average of 16 readings
14 sum += analogReadMilliVolts(BAT_PIN); // kalibre edilmiş mV / calibrated millivolts
15 delay(2);
16 }
17 return (sum / 16.0) * DIVIDER / 1000.0; // pil gerilimi (V) / battery voltage (V)
18}
19
20int toPercent(float v) {
21 if (v <= volts[0]) return 0;
22 if (v >= volts[POINTS - 1]) return 100;
23 for (int i = 1; i < POINTS; i++) {
24 if (v < volts[i]) { // iki nokta arasında doğrusal / linear between two points
25 float k = (v - volts[i - 1]) / (volts[i] - volts[i - 1]);
26 return (int)(percent[i - 1] + k * (percent[i] - percent[i - 1]));
27 }
28 }
29 return 100;
30}
31
32void setup() {
33 Serial.begin(115200);
34 analogReadResolution(12); // 0-4095 aralığı / 0-4095 range
35}
36
37void loop() {
38 float v = readBattery();
39 Serial.printf("Pil / Battery: %.2f V %%%d\n", v, toPercent(v));
40
41 if (v < LOW_BAT) { // yazılımla derin deşarj koruması / software deep-discharge guard
42 Serial.println("Pil zayif, uyku / Battery low, sleeping");
43 esp_sleep_enable_timer_wakeup(10ULL * 60 * 1000000); // 10 dakika sonra tekrar bak / check again in 10 min
44 esp_deep_sleep_start();
45 }
46 delay(5000);
47}| Tensión de la batería | Carga aproximada |
|---|---|
| 4,20 V | 100 % |
| 4,10 V | 89 % |
| 4,00 V | 78 % |
| 3,90 V | 63 % |
| 3,80 V | 40 % |
| 3,70 V | 12 % |
| 3,60 V | 5 % |
| 3,30 V | 0 % (detén el proyecto) |
Estos valores son para una batería en reposo. Cuando el ESP32 consume picos de corriente al transmitir por Wi-Fi, la tensión de la batería baja un poco, y durante la carga el TP4056 la sube artificialmente; por eso la lectura más precisa la obtienes antes de activar el Wi-Fi y sin el cargador conectado. Para que la batería dure mucho, mide cada pocos minutos y entre medias usa el sueño profundo del ESP32. Ten en cuenta también que las placas DevKit con chip USB-serie y LED de encendido gastan varios mA incluso dormidas; para proyectos que deben funcionar meses con batería, conviene elegir placas de bajo consumo.
Medir la batería con la Raspberry Pi Pico (MicroPython)
La Pico lo tiene fácil: su pin VSYS alimenta un regulador buck-boost interno que admite 1,8–5,5 V, así que funciona con una sola 18650 sin elevador. Conecta OUT+ del TP4056 a VSYS (pin 39) a través de un diodo Schottky (1N5817) y OUT- a GND (pin 38); el diodo evita que, con el USB conectado, los 5 V de la Pico vuelvan hacia la batería. Puedes medir la tensión de la batería con un divisor de 100k + 100k en GP26. En la Pico normal, el pin GP29 ya mide un tercio de VSYS, pero ese valor sale más bajo por la caída del diodo; en la Pico W ese pin se comparte con el chip Wi-Fi, así que un divisor externo es el camino más seguro.
1from machine import ADC
2import time
3
4adc = ADC(26) # GP26 = ADC0, 100k + 100k bölücü / divider
5CONV = 3.3 / 65535 # read_u16 değerini volta çevirir / converts read_u16 to volts
6DIVIDER = 2 # bölücü oranı / divider ratio
7
8while True:
9 total = 0
10 for _ in range(16): # 16 ölçümün ortalaması / average of 16 readings
11 total += adc.read_u16()
12 time.sleep_ms(2)
13 v = total / 16 * CONV * DIVIDER
14 print("Pil / Battery: {:.2f} V".format(v))
15 if v < 3.3:
16 print("Pil zayif / Battery low") # projeyi durdur / stop the project
17 time.sleep(2)read_u16 devuelve un valor de 0 a 65535; al multiplicarlo por 3,3 / 65535 obtienes la tensión en el pin, y al multiplicarlo por la relación del divisor, 2, la tensión de la batería. Si es tu primera vez con la Pico, ¿Qué es la Raspberry Pi Pico? te explica paso a paso cómo instalar MicroPython.
Ideas de proyectos con el TP4056 y una 18650
- Estación meteorológica portátil: alimenta un ESP32, un sensor de temperatura y una pantalla OLED con una sola 18650 y muestra el porcentaje de batería en una esquina de la pantalla.
- Sensor solar: conecta a IN+/IN- un panel solar pequeño de 6 V cuya tensión en vacío no pase de 8 V y mantén un ESP32 funcionando durante días con el sueño profundo.
- Caja de alarma por SMS: el SIM800L pide 3,4–4,4 V, así que se alimenta directamente con una 18650 y envía un SMS al detectar movimiento.
- Luz nocturna recargable: haz una lámpara que se encienda en la oscuridad con un LDR y se cargue por USB-C.
- Coche robot: carga dos 18650 en paralelo con un TP4056 y eleva la tensión para los motores con un módulo boost; tienes los detalles en cómo hacer un coche robot con Arduino.
- Aviso de batería en el móvil: cuando la batería baje del 20 %, que el ESP32 te envíe un mensaje mediante un bot de Telegram.
Errores frecuentes y cómo solucionarlos
| Problema | Causa probable | Solución |
|---|---|---|
| No hay tensión entre OUT+ y OUT- | La protección se ha bloqueado (sobredescarga o primera colocación de la batería) | Conecta el USB unos segundos; la protección se reinicia |
| El LED rojo sigue encendido durante horas | La carga conectada consume más de 100 mA o la batería está gastada | Monta un circuito de reparto de carga y prueba la batería por separado |
| Los dos LEDs apagados | Menos de 4 V en la entrada: cable defectuoso o adaptador débil | Prueba otro cable y un adaptador de al menos 1 A |
| No carga con un cable USB-C a USB-C | A algunos módulos baratos les faltan las resistencias CC | Usa un cable de USB-A a USB-C |
| El módulo se calienta mucho | Pérdida normal de la carga lineal a 1 A (unos 1,4 W) | Baja la corriente con una Rprog mayor y ventila la placa |
| El ESP32 se reinicia continuamente | Batería baja o brownout por la caída del AMS1117 | Dale 5 V con un elevador y revisa la tensión de la batería |
| La tensión medida no coincide con el multímetro | Relación del divisor o tensión de referencia incorrecta | Compara con el multímetro y corrige el factor en el código |
Bien conectado, el TP4056 es una pieza fiable y barata que libera tus proyectos del cable: la batería a B+ y B-, el circuito a OUT+ y OUT-, la corriente ajustada a la batería, un elevador para 5 V y la tensión de la batería vigilada por software. En la app BlueGrays puedes ver paso a paso, con esquemas y código listo, proyectos que funcionan bien con batería, como el ahorro de energía con el sueño profundo del ESP32, un voltímetro digital con LCD y un registrador de temperatura.
Preguntas frecuentes
¿Qué diferencia hay entre B+ y OUT+ en el módulo TP4056?
B+ y B- son solo para conectar la batería; OUT+ y OUT- son la salida que pasa por el circuito de protección, y ahí va tu circuito. En el módulo con protección, OUT+ es en realidad el mismo punto que B+. La diferencia está en el lado negativo, porque entre OUT- y B- están los MOSFET que desconectan la batería cuando hace falta.
¿Cuánto tarda el TP4056 en cargar una batería 18650?
Con el 1 A de fábrica, una 18650 de 2500–3000 mAh se carga en unas 3–3,5 horas. Como la corriente va bajando en la última fase, tarda un 20 % más de lo que sale al dividir la capacidad entre la corriente. Si has bajado la corriente, el tiempo aumenta en la misma proporción.
¿El TP4056 puede alimentar un circuito mientras carga?
Sí, el circuito conectado a los terminales OUT sigue alimentado durante la carga. Pero si consume siempre más de 100 mA, la carga puede no terminar nunca y la batería se queda todo el tiempo a 4,2 V. Para consumos grandes es mejor montar un circuito de reparto de carga con un diodo Schottky y un MOSFET de canal P.
¿Se pueden cargar dos baterías 18650 con un TP4056?
Dos celdas en paralelo (3,7 V) se cargan sin problema; solo tarda más. Dos celdas en serie (7,4 V) no se pueden cargar con un TP4056, porque el módulo se detiene en 4,2 V para una sola celda. Los packs en serie necesitan un cargador 2S de 8,4 V y una placa BMS con balanceo.
¿Qué significan los LEDs rojo y azul del TP4056?
El LED rojo indica que la batería se está cargando y el azul o verde que la carga ha terminado. Sin batería, el azul se enciende y el rojo parpadea. Si los dos están apagados, al módulo no le llega suficiente tensión de entrada.
¿Se puede alimentar un ESP32 directamente con una batería 18650?
El chip ESP32 funciona a 3,3 V, así que una batería de 4,2 V no puede ir directa al chip. El regulador AMS1117 de las placas DevKit pierde cerca de 1 V, por lo que cuando la batería baja a 3,7 V la tensión ya no alcanza. Lo más fácil es generar 5 V con un MT3608 para el pin VIN o usar un regulador de 3,3 V de baja caída.
Proyectos para hacer después de leer esto
Ver todos los proyectos
LED Parpadeante con ESP32
Enseña el uso básico de la salida GPIO con ESP32. Conseguimos un efecto de parpadeo encendiendo y apagando un LED desde el pin digital. Versión para ESP32 del clásico proyecto blink en Arduino UNO; los comandos básicos de blink en el entorno Arduino son los mismos, pero la distribución de pines y los niveles GPIO de 3,3 V del ESP32 difieren de los del Arduino UNO.

Lectura de la intensidad luminosa con el módulo LDR del ESP32
Visualización en tiempo real en el monitor serie del valor bruto del ADC del módulo LDR y del porcentaje relativo de luz calculado a partir de referencias de oscuridad y claridad. Este porcentaje no es una medición en lux. Explica el funcionamiento de la calibración del módulo. Es recomendable realizarlo antes del Proyecto 10, ya que se utiliza para determinar el valor umbral.

Modo de suspensión profunda del ESP32 — Ahorro de batería (OLED + contador en RTC RAM)
El modo «Deep Sleep» del ESP32 reduce el consumo de corriente a unos 10 µA al desactivar la CPU y la mayoría de los periféricos, lo cual es de vital importancia para los dispositivos IoT que funcionan con pilas. En este proyecto utilizamos tres fuentes de activación diferentes: el temporizador (15 s), un pin externo (EXT0 — botón GPIO 33) y el sensor táctil (T0/GPIO 4). Las variables marcadas con RTC_DATA_ATTR se conservan durante el modo Deep Sleep: el contador de arranque, el contador de act

Voltímetro digital con pantalla LCD
Descubre cuánto voltaje da una pila o un adaptador con un medidor hecho por ti. Un divisor de dos resistencias baja la tensión alta a un nivel que la placa puede leer, y el Arduino calcula el valor re

Registrador de Temperatura ESP32 (DHT22 + DS1307 RTC + microSD + OLED)
¡Construye un registrador de temperatura con marca de tiempo con ESP32! Lee temperatura/humedad del DHT22 cada minuto, obtén la hora real del DS1307 RTC y registra en tarjeta microSD como CSV. El OLED muestra en vivo la temperatura (fuente grande), porcentaje de humedad, marca de tiempo y contador de registros. El archivo /temp_log.csv en la tarjeta SD se abre en Excel, Google Sheets o Python pandas para análisis — perfecto para monitoreo de invernadero, seguimiento de temperatura del hog

ESP32 HTTPClient + API del tiempo (con pantalla OLED SSD1306)
En este proyecto, utilizamos el ESP32 para realizar una llamada a la API REST de la información meteorológica (wttr.in) a través de Internet, utilizando HTTPClient.h. A diferencia de la versión anterior con pantalla LCD I2C, aquí utilizamos una pantalla OLED SSD1306 (128×64), lo que permite utilizar fuentes grandes, iconos vectoriales y una presentación visual muy rica en una sola pantalla. Para indicar el tiempo, se dibujan en tiempo de ejecución 7 iconos vectoriales diferentes (soleado, parc

Sistema de Alarma de Movimiento ESP32 (PIR + Buzzer + LED + Telegram)
Un sistema inteligente de alarma de seguridad que activa el buzzer y el LED cuando el sensor PIR detecta movimiento, y envía simultáneamente una notificación instantánea al propietario vía Telegram. Cuenta con un tiempo de espera de 30 segundos para limitar la frecuencia de las alarmas repetidas; este mecanismo no comprueba la validez de las detecciones del sensor PIR ni elimina las falsas detecciones. Ideal para seguridad del hogar, vigilancia de garajes, almacenes o salas de trabajo. Con ESP32

Coche controlado por Bluetooth con L298N
Convierte tu móvil en un mando y conduce tu propio coche robot. El Arduino recibe por un módulo Bluetooth las órdenes de una app de control remoto en el móvil y mueve las ruedas con un controlador de
Más artículos
App BlueGrays
Monta este circuito paso a paso en tu teléfono
Esquema, código y lista de piezas en una sola pantalla. Más de 200 proyectos de Arduino, ESP32 y Pico listos para montar.
Escanea con tu teléfono
Apunta la cámara al código y se abrirá la tienda de apps de tu teléfono.
o ábrela en la tienda

