Componentes · 16 min de leitura

Como ligar o TP4056: módulo carregador de 18650, proteção e ESP32

Como ligar um carregador TP4056: pinos B+/B- e OUT+/OUT-, versão protegida com DW01, significado dos LEDs, ajuste da corrente com Rprog, 5 V com MT3608 e leitura da bateria no ESP32.

Ligar o TP4056 é a forma mais barata de carregar com segurança, pela USB, uma bateria 18650 ou LiPo de uma única célula e alimentar com essa mesma bateria um projeto com Arduino, ESP32 ou Raspberry Pi Pico: o cabo USB vai na entrada do módulo, a bateria vai em B+ e B- e, nos módulos protegidos, o seu circuito vai em OUT+ e OUT-. O módulo carrega a bateria até 4,2 V pelo método de corrente constante/tensão constante, para sozinho quando a bateria está cheia e mostra o estado com dois LEDs. Essa plaquinha do tamanho de uma unha é o coração de projetos que funcionam longe da tomada, como estações meteorológicas portáteis, robôs, luminárias recarregáveis e sensores sem fio.

Mas esse módulo barato tem algumas armadilhas: as versões protegida e sem proteção são ligadas de forma diferente, a corrente de carga padrão de 1 A é alta demais para baterias pequenas, alimentar o circuito durante a carga pode impedir que ela termine e duas células em série nunca podem ser carregadas com esse módulo. Neste guia você vai aprender, passo a passo, o que faz cada pino, o que significam os LEDs, como ajustar a corrente de carga com o resistor Rprog, como adicionar um módulo boost MT3608 para placas que precisam de 5 V e como medir a tensão da bateria com um ESP32 e convertê-la em porcentagem.

Módulo carregador TP4056 protegido para 18650 com entrada USB-C
Módulo TP4056 protegido: a entrada USB-C e os pads IN+/IN- à esquerda, os pads B+/B- (bateria) e OUT+/OUT- (saída) à direita. O chip grande no meio é o TP4056; os chips pequenos ao lado são o CI de proteção DW01A e o MOSFET duplo 8205A.

O que é o TP4056 e como ele funciona?

O TP4056 é um CI carregador linear feito para baterias de íon de lítio (Li-ion) e de polímero de lítio (LiPo) de uma única célula. Baterias de lítio não podem ser carregadas com qualquer fonte; elas precisam de um perfil de carga específico, e o TP4056 aplica esse perfil inteiro sozinho. Se a bateria estiver abaixo de 2,9 V, ele primeiro carrega devagar na fase de pré-carga (trickle), com cerca de um décimo da corrente ajustada, ou seja, uns 130 mA no ajuste de 1 A. Quando a tensão passa de 2,9 V, ele entra na fase de corrente constante (CC) e fornece toda a corrente ajustada. Quando a bateria chega a 4,2 V, começa a fase de tensão constante (CV): a tensão é mantida em 4,2 V e a corrente cai aos poucos. A carga termina quando a corrente cai para um décimo do valor ajustado (100 mA no ajuste de 1 A). Se depois a bateria cair para cerca de 4,05 V, o módulo reinicia a carga automaticamente. Se o chip esquentar muito, ele mesmo reduz a corrente de carga; por isso é normal o módulo ficar quente durante a carga.

CaracterísticaValor
Tensão de entrada4,0–8 V (5 V recomendado; micro USB ou USB-C)
Tensão de fim de carga4,2 V (±1,5%)
Corrente de cargaAté 1 A; 1 A por padrão nos módulos (Rprog = 1,2 kΩ)
Pré-cargaCerca de 1/10 da corrente ajustada abaixo de 2,9 V
Fim da cargaQuando a corrente cai para 1/10 do valor ajustado (C/10)
RecargaAutomática quando a bateria cai para cerca de 4,05 V
Saídas de estadoLEDs CHRG (carregando) e STDBY (cheia)
Baterias compatíveisSó Li-ion e LiPo de 3,7 V de uma célula (1S); não LiFePO4

Módulos TP4056 com proteção (DW01) e sem proteção

Duas placas diferentes são vendidas com o mesmo nome. O módulo sem proteção tem apenas o chip TP4056 e quatro pontos de ligação: IN+/IN- e BAT+/BAT-. Ele carrega a bateria, mas não supervisiona nada enquanto a bateria descarrega. O módulo protegido acrescenta um CI de proteção DW01A e um MOSFET duplo 8205A, e tem seis pads: IN+/IN-, B+/B- e OUT+/OUT-. O circuito de proteção fica como uma chave entre o terminal negativo da bateria e o terminal negativo do seu circuito (OUT-). Quando a bateria é descarregada demais ou sobrecarregada, quando o circuito puxa corrente demais ou quando a saída entra em curto, ele abre essa chave e desconecta a bateria do circuito.

CaracterísticaMódulo sem proteçãoMódulo protegido (DW01A + 8205A)
PadsIN+, IN-, BAT+, BAT-IN+, IN-, B+, B-, OUT+, OUT-
Proteção contra sobrecargaSó o limite de 4,2 V do TP4056Também corta em cerca de 4,25–4,3 V
Proteção contra descarga excessivaNenhumaCorta em cerca de 2,4 V e libera por volta de 3,0 V
Sobrecorrente e curto-circuitoNenhumaCorta em cerca de 3 A e em curto-circuito
Quando escolherSe a bateria tiver o próprio circuito de proteçãoCom células nuas, sem proteção, ou seja, em quase todo projeto
É fácil saber qual você tem: se você vê seis pads do lado da bateria (B+, B-, OUT+, OUT-) e mais dois chips pequenos ao lado do TP4056, o módulo é protegido. Se só estiver escrito BAT+ e BAT-, ele é sem proteção. A diferença de preço é mínima, então escolha sempre a versão protegida.

Bateria 18650: as tensões que você precisa conhecer

O nome 18650 vem do tamanho da célula: 18 mm de diâmetro e 65 mm de comprimento. A tensão nominal é de 3,6–3,7 V, mas isso é uma média; uma célula cheia fica em 4,2 V e uma vazia por volta de 3,0 V. As capacidades reais vão de 2000 a 3500 mAh; células com 6800 ou 9900 mAh no rótulo são falsificadas e muitas vezes não entregam nem 1000 mAh. As 18650 protegidas, com circuito de proteção próprio, são alguns milímetros mais compridas e podem não caber em qualquer suporte. Você pode calcular quanto tempo o seu projeto vai funcionar com uma bateria usando a calculadora de autonomia da bateria e ler sobre as unidades de capacidade em mAh e Wh explicados.

EstadoTensãoObservações
Totalmente carregada4,20 VO TP4056 termina a carga aqui
Nominal3,6–3,7 VO valor do rótulo, a tensão média de trabalho
Considerada vazia3,0–3,3 VDesligar o projeto aqui prolonga a vida da bateria
Corte da proteção2,4–2,5 VO DW01A desliga a saída; evite descer até aqui
Zona de perigoAbaixo de 2,0 VNão carregue uma célula que ficou muito tempo nesse nível; troque-a
Bateria Li-ion 18650
Bateria Li-ion 18650: 18 mm de diâmetro, 65 mm de comprimento e 3,7 V nominais. Ligue-a com um suporte para bateria ou com fita de níquel soldada a ponto.
Nunca solde diretamente em uma célula 18650 com ferro de solda; o calor danifica o interior da célula e é perigoso. Use um suporte para bateria ou fita de níquel soldada a ponto. Não use células amassadas, estufadas ou com o invólucro rasgado, carregue sobre uma superfície não inflamável e nunca carregue abaixo de 0 °C. Nos módulos prontos, o pino TEMP fica ligado ao GND, então a temperatura da bateria não é monitorada; de vez em quando, toque na célula durante a carga para conferir se ela não está esquentando.

Como ligar o TP4056: os pinos IN, B+/B- e OUT+/OUT-

PadOnde ligarObservações
Entrada USBFonte de 5 V ou computadorMicro USB ou USB-C; o jeito mais fácil
IN+ / IN-Positivo e negativo de uma fonte externa de 5 VPara alimentação soldada em vez de USB; não use os dois ao mesmo tempo
B+ / B-Positivo e negativo da bateria 18650Aqui vai só a bateria
OUT+ / OUT-Positivo e negativo do seu circuito (a carga)No módulo protegido, a carga vai sempre aqui
BAT+ / BAT- (sem proteção)Bateria e carga juntasSem proteção; a carga fica em paralelo com a bateria
  1. Solde o fio vermelho do suporte da bateria em B+ e o fio preto em B-. Ainda não coloque a bateria.
  2. Solde o fio positivo de alimentação do seu circuito em OUT+ e o fio negativo (GND) em OUT-. Se você vai alimentar uma placa que precisa de 5 V, um módulo boost MT3608 entra no meio.
  3. Confira as soldas e use um multímetro para ter certeza de que não há curto entre B+ e B-.
  4. Coloque a bateria respeitando a polaridade. Em alguns módulos protegidos a saída pode estar desligada no início; ligar a USB uma vez reinicia a proteção e liga a saída.
  5. Ligue o cabo USB: se o LED vermelho acender, a carga começou. Quando a bateria estiver cheia, o LED vermelho apaga e o LED azul ou verde acende.
  6. Quando o multímetro mostrar a tensão da bateria (3,0–4,2 V) entre OUT+ e OUT-, você pode ligar o seu circuito.
O erro mais comum é ligar o circuito em B+ e B- num módulo protegido. Ligado assim, o circuito funciona, mas a proteção do DW01A fica de fora: a bateria pode descarregar abaixo de 2 V e, num curto-circuito, a corrente não tem limite. Ligar a bateria invertida destrói o módulo na hora; o TP4056 não tem proteção contra polaridade invertida.

O que significam os LEDs do TP4056?

LED vermelho (CHRG)LED azul ou verde (STDBY)Significado
AcesoApagadoCarregando
ApagadoAcesoCarga concluída (4,2 V)
Piscando ou tremulandoAcesoSem bateria ou com mau contato
ApagadoApagadoEntrada abaixo de 4 V ou sem alimentação USB
Aceso por horasApagadoO circuito ligado (a carga) está impedindo o fim da carga, ou a bateria está desgastada

Sem bateria, é normal o LED azul ficar aceso e o vermelho tremular: o módulo fica carregando e descarregando o capacitor no terminal vazio da bateria. Você pode estimar o tempo de carga, por alto, com capacidade / corrente × 1,2. Uma célula de 2600 mAh carrega em cerca de 3 horas a 1 A; como a corrente cai aos poucos na etapa final, leva um pouco mais do que a divisão simples sugere.

Como ajustar a corrente de carga: o resistor Rprog

A corrente de carga é definida por um único resistor entre o pino PROG do TP4056 (pino 2) e o GND. Na maioria dos módulos esse resistor está marcado como R3 e traz o código 122, que significa 1,2 kΩ e resulta em 1 A. Para decifrar marcações como essa, você pode usar o decodificador de código SMD. A fórmula é aproximadamente I (mA) = 1200 / Rprog (kΩ). Para mudar a corrente, dessolde o resistor SMD e solde no lugar o valor que você quer; se não encontrar um resistor SMD do tamanho certo, também dá para soldar um resistor PTH pequeno entre os dois pads.

RprogCorrente de cargaBateria adequada
10 kΩ130 mALiPo pequena de 200–300 mAh
5 kΩ250 mALiPo de 300–500 mAh
4 kΩ300 mALiPo de 500–600 mAh
3 kΩ400 mAPor volta de 800 mAh
2 kΩ580 mA1000–1200 mAh
1,5 kΩ780 mA1500 mAh ou mais
1,2 kΩ1000 mA18650 de 2000 mAh ou mais (padrão do módulo)

A regra geral é manter a corrente de carga em torno de metade da capacidade da bateria (0,5C): 250 mA servem para uma LiPo de 500 mAh e 1 A serve para uma 18650 de 2600 mAh. Leve o calor em conta também: como o TP4056 é linear, a diferença de tensão entre a entrada e a bateria vira calor. Carregando uma célula de 3,6 V a 1 A com entrada de 5 V, o chip dissipa (5 − 3,6) × 1 = 1,4 W; é por isso que o módulo esquenta bastante e pode reduzir a corrente sozinho. Você também pode fazer cálculos de potência como esse com a calculadora da lei de Ohm. A porta USB 2.0 de um computador fornece só 500 mA; então, se você vai carregar com frequência pelo computador, vale a pena baixar a corrente para uns 500 mA.

Alimentar o circuito durante a carga (load sharing)

Se você quer que o projeto continue funcionando com a USB ligada, o jeito mais simples é deixar o circuito ligado em OUT+ e OUT-; o TP4056 então carrega a bateria e alimenta o circuito ao mesmo tempo. Mas o chip não consegue distinguir a corrente que vai para a bateria da corrente que vai para o circuito. Se o seu circuito puxa constantemente mais de 100 mA, a corrente total nunca cai abaixo do limiar de fim de carga, a carga nunca termina e a bateria fica horas parada em 4,2 V, o que encurta a vida dela. Se o circuito puxa perto de 1 A, a bateria nem chega a encher. Com um ESP32 em deep sleep ou circuitos pequenos que puxam poucos mA, a ligação direta não causa problema real na prática; para projetos Wi-Fi sempre ligados, motores e fitas de LED, monte um circuito de compartilhamento de carga (load sharing).

PeçaLigaçãoFunção
Diodo Schottky (1N5817, SS14)Ânodo no 5 V da USB (IN+), cátodo na entrada positiva do circuitoAlimenta o circuito diretamente quando há USB
MOSFET de canal P (AO3401, DMG2305)Dreno na bateria (OUT+), fonte (source) na entrada positiva do circuitoLiga a bateria ao circuito quando não há USB
Ligação do gate do MOSFETDireto no 5 V da USB (IN+)Com a USB ligada, o MOSFET fica desligado e a bateria só carrega
Resistor de 100 kΩEntre o gate do MOSFET e o GNDPuxa o gate para 0 V quando a USB é desconectada, ligando o MOSFET
Com esse circuito, enquanto a USB está ligada, o seu circuito funciona com cerca de 4,7 V através do diodo e o TP4056 só carrega a bateria, então a carga termina na hora certa. Quando você desconecta, o MOSFET liga muito rápido e o circuito continua funcionando pela bateria quase sem interrupção. Você encontra como os MOSFETs funcionam em Como usar um MOSFET com Arduino e como escolher um diodo em O que é um diodo?.

Precisa de 5 V? Adicionando um módulo boost MT3608

A tensão de uma 18650 varia entre 3,0 e 4,2 V; isso não basta para um Arduino Uno, módulos relé, servo motores ou LEDs WS2812B, que querem 5 V. A solução é um conversor boost (elevador de tensão, step-up), que aumenta a tensão. O mais comum é o módulo MT3608: ele dá uma saída ajustável de até 28 V a partir de uma entrada de 2–24 V, chaveia a 1,2 MHz e a chave interna tem limite de corrente de 4 A. Na prática, dá para puxar com segurança uns 0,5–1 A em 5 V de uma única 18650; acima disso o módulo esquenta e a eficiência cai. Quando você precisa baixar uma tensão, usa o módulo buck LM2596, que faz exatamente o contrário.

  1. Ligue as entradas VIN+ e VIN- do MT3608 em OUT+ e OUT- do TP4056.
  2. Sem ligar nada na saída ainda, conecte o multímetro entre VOUT+ e VOUT-.
  3. Gire o trimpot azul com uma chave de fenda pequena para ajustar a saída em 5,0–5,1 V. O trimpot é multivoltas, então a tensão pode começar a mudar só depois de várias voltas; continue girando com paciência.
  4. Depois de ajustar, ligue o pino 5V da placa em VOUT+ e o pino GND em VOUT-.
  5. Meça a tensão de novo com o circuito funcionando; se ela cair abaixo de 4,8 V com carga, encurte os fios ou reduza o consumo de corrente.
PlacaComo alimentar com uma 18650Observações
Arduino Uno / Nano5,0 V do MT3608 → pino 5VO pino 5V pula o regulador; nunca passe de 5,5 V
Arduino Pro Mini 3,3 V (8 MHz)OUT+ direto no pino RAWO regulador de baixa queda (LDO) funciona com a tensão da bateria
ESP32 DevKit5 V do MT3608 → pino VIN (5V)O AMS1117 da placa derruba cerca de 1 V; não ligue a bateria direto
Raspberry Pi PicoOUT+ → diodo Schottky → VSYS (pino 39)O VSYS aceita 1,8–5,5 V; não precisa de boost
Módulo GSM SIM800LDireto em OUT+ e OUT-Precisa de 3,4–4,4 V; ideal para Li-ion
Nunca ligue o MT3608 à placa antes de ajustá-lo: os módulos vêm de fábrica com uma saída desconhecida, muitas vezes bem acima de 5 V, e isso pode queimar um Arduino ou um ESP32 na hora. Além disso, conversores boost não desconectam a saída; mesmo quando o módulo não está chaveando, a tensão da bateria passa para a saída pelo indutor e pelo diodo. Para desligar o projeto de verdade, coloque uma chave entre a bateria e o módulo.

Se você liga a placa na USB para carregar o código com a saída do boost ainda conectada, está juntando duas fontes de alimentação. O mais seguro é desconectar a saída do boost durante o carregamento. Você encontra em detalhes qual pino alimenta o Arduino, e como, em Como alimentar um Arduino.

Células em série não podem ser carregadas com o TP4056

O TP4056 só carrega uma única célula (1S) até 4,2 V. Um pack de duas 18650 em série (2S), comum em carrinhos robô, tem 7,4 V nominais e 8,4 V quando cheio; ligue-o a um único TP4056 e ele não carrega, e o módulo e as células podem ser danificados. Colocar um TP4056 separado em cada célula também não funciona: as entradas negativas dos módulos se juntam na mesma fonte USB e, como o negativo do módulo de cima fica no positivo da célula de baixo, a célula de baixo entra em curto. Como a tensão final é fixa em 4,2 V, o TP4056 também não é usado com células LiFePO4, cuja carga precisa parar em 3,6 V.

  • Ligue em paralelo (1S2P): com duas células em paralelo, a tensão continua em 3,7 V, a capacidade dobra e você pode carregá-las com um TP4056. Confira se as células estão com a mesma tensão antes de juntá-las.
  • Use um boost: se você precisa de 7–12 V, eleve a saída das células em paralelo com um MT3608.
  • Use um circuito de carga 2S: um pack em série precisa de um carregador CC/CV de 8,4 V e de uma placa BMS 2S com balanceamento.
  • Tire as células para carregar: você pode tirar as células de um pack em série do suporte e carregá-las uma a uma em um carregador de 18650 separado.

Como medir a tensão da bateria: ligação do divisor de tensão

Para saber o quanto a bateria está cheia, basta medir a tensão dela. Mas uma bateria de 4,2 V não pode ir direto num pino analógico do ESP32 ou do Pico, porque as entradas do ADC deles aguentam no máximo 3,3 V. A solução é um divisor de tensão feito com dois resistores iguais: 100 kΩ + 100 kΩ baixam 4,2 V para 2,1 V e puxam só 21 µA da bateria. Você pode calcular os valores com a calculadora de divisor de tensão e ler como o circuito funciona em O circuito divisor de tensão. Colocar um capacitor de 100 nF entre o ponto de medição e o GND deixa bem mais estáveis as leituras feitas com resistores de valor alto.

LigaçãoArduino UnoESP32Raspberry Pi Pico
Resistor de cima (100 kΩ)OUT+ → ponto médioOUT+ → ponto médioOUT+ → ponto médio
Resistor de baixo (100 kΩ)Ponto médio → GNDPonto médio → GNDPonto médio → GND
Ponto médio (medição)A0GPIO 34 (ADC1)GP26 (ADC0)
Capacitor de 100 nFOpcionalPonto médio → GNDPonto médio → GND
TP4056 OUT-GNDGNDGND
Faixa do ADC0–5 V, 10 bitsCerca de 0–3,1 V, 12 bits0–3,3 V, 12 bits
No ESP32, use só pinos ADC1 (GPIO 32–39) para medir a bateria. Os pinos ADC2 não podem ser lidos com o Wi-Fi ligado e retornam valores errados. Os GPIO 34–39 são pinos só de entrada e servem perfeitamente para essa tarefa.

O ADC do Arduino Uno usa uma referência de 5 V; graças ao divisor, uma bateria de 4,2 V aparece como 2,1 V no A0 e a leitura de 10 bits dá um valor entre 0 e 1023. Quando a placa é alimentada pela USB ou por um módulo boost, o pino 5V pode não estar exatamente em 5,00 V; meça-o com um multímetro e coloque o valor como VREF no código, e a precisão melhora bastante.

C++ (Arduino IDE)
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}

Como medir a tensão da bateria e mostrar a porcentagem com o ESP32

O ADC do ESP32 não é perfeitamente linear e varia de placa para placa. Por isso, em vez do analogRead bruto, é mais preciso usar o analogReadMilliVolts, que aplica a calibração de fábrica do chip e retorna milivolts diretamente. O código abaixo tira a média de 16 leituras, multiplica pela razão do divisor para obter a tensão da bateria, converte em porcentagem usando uma tabela e, se a bateria cair abaixo de 3,3 V, coloca o ESP32 em deep sleep por 10 minutos.

C++ (Arduino IDE)
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}
Tensão da bateriaCarga aproximada
4,20 V100%
4,10 V89%
4,00 V78%
3,90 V63%
3,80 V40%
3,70 V12%
3,60 V5%
3,30 V0% (desligue o projeto)

Esses valores valem para uma célula em repouso. Quando o ESP32 puxa picos de corrente alta ao transmitir por Wi-Fi, a tensão da bateria cai um pouco, e durante a carga o TP4056 a eleva artificialmente; por isso a leitura mais precisa sai antes de ligar o Wi-Fi e com o carregador desconectado. Para uma bateria que dure muito, faça uma leitura a cada poucos minutos e use o deep sleep do ESP32 entre elas. Lembre também que placas DevKit com chip USB-serial e LED de alimentação gastam vários mA mesmo dormindo; para projetos que precisam funcionar meses com bateria, placas de baixo consumo são a melhor escolha.

Como medir a bateria com um Raspberry Pi Pico (MicroPython)

O Pico leva vantagem aqui: o pino VSYS alimenta um regulador buck-boost na própria placa que aceita 1,8–5,5 V, então ele funciona com uma única 18650 sem módulo boost. Ligue o OUT+ do TP4056 ao VSYS (pino 39) através de um diodo Schottky (1N5817) e o OUT- ao GND (pino 38); o diodo impede que os 5 V do Pico voltem para a bateria quando a USB está ligada. Você pode medir a tensão da bateria com um divisor de 100k + 100k no GP26. No Pico comum, o GP29 já mede um terço do VSYS, mas esse valor sai mais baixo pela queda do diodo; no Pico W esse pino é compartilhado com o chip Wi-Fi, então um divisor externo é o caminho mais seguro.

MicroPython
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)

O read_u16 retorna um valor de 0 a 65535; multiplicando por 3,3 / 65535 você obtém a tensão no pino e, multiplicando pela razão do divisor, 2, obtém a tensão da bateria. Se você está começando com o Pico, O que é o Raspberry Pi Pico? mostra a instalação do MicroPython passo a passo.

Ideias de projetos com o TP4056 e uma 18650

  • Estação meteorológica portátil: alimente um ESP32, um sensor de temperatura e um display OLED com uma única 18650 e mostre a porcentagem da bateria num canto da tela.
  • Sensor com energia solar: ligue em IN+/IN- um painel solar pequeno de 6 V cuja tensão de circuito aberto fique abaixo de 8 V e mantenha um ESP32 funcionando por dias com deep sleep.
  • Caixa de alarme por SMS: o SIM800L precisa de 3,4–4,4 V, então funciona direto com uma 18650 e envia um SMS quando detecta movimento.
  • Luz noturna recarregável: monte uma luminária que acende no escuro com um LDR e carrega pela USB-C.
  • Carrinho robô: carregue duas 18650 em paralelo com um TP4056 e eleve a tensão dos motores com um módulo boost; detalhes em Como fazer um carrinho robô com Arduino.
  • Aviso de bateria fraca no celular: quando a bateria cair abaixo de 20%, faça o ESP32 mandar uma mensagem para você por um bot do Telegram.

Erros comuns e como resolver

ProblemaCausa provávelSolução
Sem tensão entre OUT+ e OUT-O circuito de proteção travou (descarga excessiva ou primeira vez que a bateria foi colocada)Ligue a USB por alguns segundos; a proteção é reiniciada
LED vermelho aceso por horasO circuito ligado puxa mais de 100 mA ou a bateria está desgastadaMonte um circuito de load sharing e teste a bateria sozinha
Os dois LEDs apagadosMenos de 4 V na entrada: cabo com defeito ou fonte fracaTeste outro cabo e uma fonte de pelo menos 1 A
Não carrega com cabo USB-C para USB-CAlguns módulos baratos não têm os resistores dos pinos CCUse um cabo USB-A para USB-C
O módulo esquenta muitoPerda normal da carga linear a 1 A (cerca de 1,4 W)Reduza a corrente com um Rprog maior e deixe o ar circular pela placa
O ESP32 reinicia sem pararBateria fraca ou brownout causado pela queda do AMS1117Forneça 5 V com um boost e confira a tensão da bateria
A tensão medida difere do multímetroRazão do divisor ou tensão de referência erradaCompare com um multímetro e corrija o fator no código
Medir cada ponto com um multímetro antes de ligar evita a maioria dos erros: a bateria deve marcar 3–4,2 V, os terminais OUT a tensão da bateria e a saída do MT3608, 5,0 V. Se você está começando com multímetros, Como usar um multímetro vai ajudar; e se o seu ESP32 reinicia sem parar quando a bateria está fraca, veja Erro de brownout no ESP32.

Ligado corretamente, o TP4056 é uma peça confiável e barata que livra os seus projetos do cabo: ligue a bateria em B+ e B-, o circuito em OUT+ e OUT-, ajuste a corrente de acordo com a bateria, adicione um boost para 5 V e monitore a tensão da bateria pelo software. No app BlueGrays você pode explorar passo a passo, com esquemas do circuito e código pronto, projetos que combinam com bateria, como economia de energia com deep sleep no ESP32, um voltímetro digital com LCD e um registrador de temperatura.

Perguntas frequentes

Qual é a diferença entre B+ e OUT+ num módulo TP4056?

B+ e B- são só o lugar onde a bateria é ligada; OUT+ e OUT- são a saída que passa pelo circuito de proteção, e é ali que o seu circuito vai. Num módulo protegido, OUT+ na verdade é o mesmo ponto que B+. A diferença está do lado negativo, porque os MOSFETs que desconectam a bateria quando necessário ficam entre OUT- e B-.

Quanto tempo o TP4056 leva para carregar uma 18650?

Com o padrão de 1 A, uma 18650 de 2500–3000 mAh carrega em cerca de 3–3,5 horas. Como a corrente cai aos poucos na etapa final, leva uns 20% a mais do que a capacidade dividida pela corrente. Se você baixou a corrente, o tempo aumenta na mesma proporção.

O TP4056 consegue alimentar um circuito enquanto carrega?

Sim, um circuito ligado aos terminais OUT continua funcionando durante a carga. Mas, se ele puxar constantemente mais de 100 mA, a carga pode nunca terminar e a bateria fica o tempo todo em 4,2 V. Para consumos maiores, é melhor montar um circuito de load sharing com um diodo Schottky e um MOSFET de canal P.

O TP4056 consegue carregar duas baterias 18650?

Duas células em paralelo (3,7 V) carregam sem problema; só demora mais. Duas células em série (7,4 V) não podem ser carregadas com um TP4056, porque o módulo para em 4,2 V, para uma única célula. Packs em série precisam de um carregador 2S de 8,4 V e de uma placa BMS com balanceamento.

O que significam os LEDs vermelho e azul do TP4056?

O LED vermelho mostra que a bateria está carregando, e o LED azul ou verde mostra que a carga terminou. Sem bateria, o LED azul fica aceso e o vermelho tremula. Se os dois estiverem apagados, o módulo não está recebendo tensão de entrada suficiente.

O ESP32 pode funcionar direto com uma bateria 18650?

O chip ESP32 funciona com 3,3 V, então uma bateria de 4,2 V não pode ir direto no chip. O regulador AMS1117 das placas DevKit derruba cerca de 1 V, então, quando a bateria cai para 3,7 V, a tensão já não é suficiente. O caminho mais fácil é gerar 5 V com um MT3608 e alimentar o pino VIN, ou usar um regulador de 3,3 V de baixa queda (LDO).

Ver todos os projetos
LED piscando com ESP32
#103Iniciante

LED piscando com ESP32

Ensina o uso básico de uma saída GPIO no ESP32. Fazemos um LED piscar ligando e desligando um pino digital. É a versão para ESP32 do clássico projeto blink do Arduino UNO: os comandos básicos de blink no ambiente Arduino são os mesmos, mas a disposição dos pinos e os níveis de 3,3 V dos GPIOs do ESP32 diferem dos do Arduino UNO.

4.7(37)
99
Leitura da intensidade da luz com módulo LDR e ESP32
#113Iniciante

Leitura da intensidade da luz com módulo LDR e ESP32

Acompanhe em tempo real no Monitor Serial o valor bruto do ADC do módulo LDR e a porcentagem relativa de luz calculada a partir de referências de escuridão e claridade. Essa porcentagem não é uma medida em lux. O projeto ensina a lógica de calibração do módulo. É ideal fazê-lo antes do projeto 10, pois ajuda a determinar o valor do limiar.

4.6(36)
55
ESP32 em sono profundo — Economia de bateria (OLED + contador na RAM RTC)
#135Avançado
Premium

ESP32 em sono profundo — Economia de bateria (OLED + contador na RAM RTC)

O modo de sono profundo do ESP32 reduz o consumo de corrente para ~10 µA ao desligar a CPU e a maioria dos periféricos, sendo essencial para dispositivos IoT alimentados por bateria. Neste projeto, usamos três fontes de despertar: um temporizador (15 segundos), um pino externo (EXT0 — botão no GPIO 33) e toque (T0/GPIO 4). As variáveis marcadas com RTC_DATA_ATTR são preservadas durante o sono profundo, mantendo os contadores de inicializações e de despertares por temporizador e botão.

4.3(10)
16
Voltímetro digital com display LCD
#56Intermediário
Premium

Voltímetro digital com display LCD

Descubra a tensão de uma pilha ou de um adaptador de alimentação com um medidor feito por você. Um divisor formado por dois resistores reduz a tensão alta a um nível que a placa consegue ler, e o Ardu

4.5(27)
36
Registrador de temperatura com ESP32 (DHT22 + DS1307 RTC + microSD + OLED)
#144Avançado
Premium

Registrador de temperatura com ESP32 (DHT22 + DS1307 RTC + microSD + OLED)

Monte um registrador de temperatura com data e hora usando ESP32! Leia a temperatura e a umidade do DHT22 a cada minuto, obtenha a hora real do DS1307 RTC e grave os dados em CSV no cartão microSD. O OLED exibe a temperatura atual em letras grandes, a porcentagem de umidade, a data e a hora e o contador de registros. O arquivo /temp_log.csv no cartão SD pode ser aberto no Excel, Google Sheets ou pandas do Python para análise — ideal para monitorar estufas, acompanhar a temperatura de casa ou…

4.7(7)
12
ESP32 HTTPClient + API de clima (com display OLED SSD1306)
#134Avançado
Premium

ESP32 HTTPClient + API de clima (com display OLED SSD1306)

Neste projeto, usamos o ESP32 para fazer uma chamada REST à API de clima wttr.in pela internet com HTTPClient.h. Diferentemente da versão anterior com LCD I2C, aqui usamos um display OLED SSD1306 (128×64), que permite usar fontes grandes, ícones vetoriais e uma apresentação visual rica em uma única tela. Sete ícones vetoriais de condições do tempo (ensolarado, parcialmente nublado, nublado, chuvoso, com neve, com tempestade e com neblina) são desenhados durante a execução, sem arquivos bitmap.

4.3(10)
19
Alarme de movimento com ESP32 (PIR + buzzer + LED + Telegram)
#145Avançado
Premium

Alarme de movimento com ESP32 (PIR + buzzer + LED + Telegram)

Um sistema de alarme de segurança inteligente que aciona o buzzer e o LED quando o sensor PIR detecta movimento e, ao mesmo tempo, envia uma notificação instantânea ao proprietário pelo Telegram. Inclui um intervalo de espera de 30 segundos para limitar a frequência dos alarmes repetidos; esse mecanismo não valida as detecções do PIR nem elimina disparos falsos. Pode ser usado na segurança de casas, no monitoramento de garagens, depósitos ou salas de trabalho.

0.0(0)
9
Carrinho controlado por Bluetooth com L298N
#80Avançado
Premium

Carrinho controlado por Bluetooth com L298N

Transforme seu celular em um controle remoto e dirija seu próprio carrinho robô. O Arduino recebe os comandos de um aplicativo de controle remoto no celular por meio de um módulo Bluetooth e aciona as

5.0(38)
65