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.

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ística | Valor |
|---|---|
| Tensão de entrada | 4,0–8 V (5 V recomendado; micro USB ou USB-C) |
| Tensão de fim de carga | 4,2 V (±1,5%) |
| Corrente de carga | Até 1 A; 1 A por padrão nos módulos (Rprog = 1,2 kΩ) |
| Pré-carga | Cerca de 1/10 da corrente ajustada abaixo de 2,9 V |
| Fim da carga | Quando a corrente cai para 1/10 do valor ajustado (C/10) |
| Recarga | Automática quando a bateria cai para cerca de 4,05 V |
| Saídas de estado | LEDs CHRG (carregando) e STDBY (cheia) |
| Baterias compatíveis | Só 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ística | Módulo sem proteção | Módulo protegido (DW01A + 8205A) |
|---|---|---|
| Pads | IN+, IN-, BAT+, BAT- | IN+, IN-, B+, B-, OUT+, OUT- |
| Proteção contra sobrecarga | Só o limite de 4,2 V do TP4056 | Também corta em cerca de 4,25–4,3 V |
| Proteção contra descarga excessiva | Nenhuma | Corta em cerca de 2,4 V e libera por volta de 3,0 V |
| Sobrecorrente e curto-circuito | Nenhuma | Corta em cerca de 3 A e em curto-circuito |
| Quando escolher | Se a bateria tiver o próprio circuito de proteção | Com células nuas, sem proteção, ou seja, em quase todo projeto |
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.
| Estado | Tensão | Observações |
|---|---|---|
| Totalmente carregada | 4,20 V | O TP4056 termina a carga aqui |
| Nominal | 3,6–3,7 V | O valor do rótulo, a tensão média de trabalho |
| Considerada vazia | 3,0–3,3 V | Desligar o projeto aqui prolonga a vida da bateria |
| Corte da proteção | 2,4–2,5 V | O DW01A desliga a saída; evite descer até aqui |
| Zona de perigo | Abaixo de 2,0 V | Não carregue uma célula que ficou muito tempo nesse nível; troque-a |

Como ligar o TP4056: os pinos IN, B+/B- e OUT+/OUT-
| Pad | Onde ligar | Observações |
|---|---|---|
| Entrada USB | Fonte de 5 V ou computador | Micro USB ou USB-C; o jeito mais fácil |
| IN+ / IN- | Positivo e negativo de uma fonte externa de 5 V | Para alimentação soldada em vez de USB; não use os dois ao mesmo tempo |
| B+ / B- | Positivo e negativo da bateria 18650 | Aqui 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 juntas | Sem proteção; a carga fica em paralelo com a bateria |
- Solde o fio vermelho do suporte da bateria em B+ e o fio preto em B-. Ainda não coloque a bateria.
- 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.
- Confira as soldas e use um multímetro para ter certeza de que não há curto entre B+ e B-.
- 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.
- 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.
- 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 que significam os LEDs do TP4056?
| LED vermelho (CHRG) | LED azul ou verde (STDBY) | Significado |
|---|---|---|
| Aceso | Apagado | Carregando |
| Apagado | Aceso | Carga concluída (4,2 V) |
| Piscando ou tremulando | Aceso | Sem bateria ou com mau contato |
| Apagado | Apagado | Entrada abaixo de 4 V ou sem alimentação USB |
| Aceso por horas | Apagado | O 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.
| Rprog | Corrente de carga | Bateria adequada |
|---|---|---|
| 10 kΩ | 130 mA | LiPo pequena 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 | Por volta de 800 mAh |
| 2 kΩ | 580 mA | 1000–1200 mAh |
| 1,5 kΩ | 780 mA | 1500 mAh ou mais |
| 1,2 kΩ | 1000 mA | 18650 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ça | Ligação | Função |
|---|---|---|
| Diodo Schottky (1N5817, SS14) | Ânodo no 5 V da USB (IN+), cátodo na entrada positiva do circuito | Alimenta o circuito diretamente quando há USB |
| MOSFET de canal P (AO3401, DMG2305) | Dreno na bateria (OUT+), fonte (source) na entrada positiva do circuito | Liga a bateria ao circuito quando não há USB |
| Ligação do gate do MOSFET | Direto 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 GND | Puxa o gate para 0 V quando a USB é desconectada, ligando o MOSFET |
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.
- Ligue as entradas VIN+ e VIN- do MT3608 em OUT+ e OUT- do TP4056.
- Sem ligar nada na saída ainda, conecte o multímetro entre VOUT+ e VOUT-.
- 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.
- Depois de ajustar, ligue o pino 5V da placa em VOUT+ e o pino GND em VOUT-.
- 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.
| Placa | Como alimentar com uma 18650 | Observações |
|---|---|---|
| Arduino Uno / Nano | 5,0 V do MT3608 → pino 5V | O pino 5V pula o regulador; nunca passe de 5,5 V |
| Arduino Pro Mini 3,3 V (8 MHz) | OUT+ direto no pino RAW | O regulador de baixa queda (LDO) funciona com a tensão da bateria |
| ESP32 DevKit | 5 V do MT3608 → pino VIN (5V) | O AMS1117 da placa derruba cerca de 1 V; não ligue a bateria direto |
| Raspberry Pi Pico | OUT+ → diodo Schottky → VSYS (pino 39) | O VSYS aceita 1,8–5,5 V; não precisa de boost |
| Módulo GSM SIM800L | Direto em OUT+ e OUT- | Precisa de 3,4–4,4 V; ideal para Li-ion |
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ção | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| Resistor de cima (100 kΩ) | OUT+ → ponto médio | OUT+ → ponto médio | OUT+ → ponto médio |
| Resistor de baixo (100 kΩ) | Ponto médio → GND | Ponto médio → GND | Ponto médio → GND |
| Ponto médio (medição) | A0 | GPIO 34 (ADC1) | GP26 (ADC0) |
| Capacitor de 100 nF | Opcional | Ponto médio → GND | Ponto médio → GND |
| TP4056 OUT- | GND | GND | GND |
| Faixa do ADC | 0–5 V, 10 bits | Cerca de 0–3,1 V, 12 bits | 0–3,3 V, 12 bits |
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.
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.
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 bateria | 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% (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.
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
| Problema | Causa provável | Soluçã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 horas | O circuito ligado puxa mais de 100 mA ou a bateria está desgastada | Monte um circuito de load sharing e teste a bateria sozinha |
| Os dois LEDs apagados | Menos de 4 V na entrada: cabo com defeito ou fonte fraca | Teste outro cabo e uma fonte de pelo menos 1 A |
| Não carrega com cabo USB-C para USB-C | Alguns módulos baratos não têm os resistores dos pinos CC | Use um cabo USB-A para USB-C |
| O módulo esquenta muito | Perda 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 parar | Bateria fraca ou brownout causado pela queda do AMS1117 | Forneça 5 V com um boost e confira a tensão da bateria |
| A tensão medida difere do multímetro | Razão do divisor ou tensão de referência errada | Compare com um multímetro e corrija o fator no código |
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).
Projetos para montar depois desta leitura
Ver todos os projetos
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.

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.

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.

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

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…

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.

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.

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
Mais artigos
App BlueGrays
Monte este circuito passo a passo pelo celular
Esquema do circuito, código e lista de componentes em uma só tela. Mais de 200 projetos com Arduino, ESP32 e Pico prontos para montar.
Escaneie com seu celular
Aponte a câmera para o código para abrir a loja de aplicativos do seu celular.
ou abrir a loja

