Componenti · 15 min di lettura

Collegamento TP4056: ricarica batteria 18650, protezione ed ESP32

Come collegare il TP4056: pin B+/B- e OUT+/OUT-, versione protetta DW01, LED, corrente di carica con Rprog, 5 V con MT3608 e misura della batteria con ESP32.

Il collegamento del TP4056 è il modo più economico per caricare in sicurezza via USB una batteria 18650 o LiPo a cella singola e alimentare con la stessa batteria un progetto con Arduino, ESP32 o Raspberry Pi Pico: il cavo USB va all'ingresso del modulo, la batteria ai pad B+ e B- e, nei moduli protetti, il tuo circuito ai pad OUT+ e OUT-. Il modulo carica la batteria fino a 4,2 V con il metodo a corrente costante e tensione costante, interrompe da solo la carica quando la batteria è piena e mostra lo stato con due LED. Questa schedina grande come un'unghia è il cuore dei progetti che funzionano lontano dalla presa, come stazioni meteo portatili, robot, lampade ricaricabili e sensori wireless.

Ma questo modulo economico nasconde qualche trappola: le versioni protetta e non protetta si collegano in modo diverso, la corrente di carica di 1 A impostata di fabbrica è troppo alta per le batterie piccole, alimentare il circuito durante la carica può impedire che la carica termini e due celle in serie non si possono mai caricare con questo modulo. In questa guida imparerai passo passo a cosa serve ogni pin, cosa significano i LED, come regolare la corrente di carica con la resistenza Rprog, come aggiungere uno step-up MT3608 per le schede che vogliono 5 V e come misurare la tensione della batteria con un ESP32 per convertirla in percentuale.

Modulo di ricarica TP4056 protetto con ingresso USB-C per batteria 18650
Modulo TP4056 protetto: a sinistra l'ingresso USB-C e i pad IN+/IN-, a destra i pad B+/B- (batteria) e OUT+/OUT- (uscita). Il chip grande al centro è il TP4056; i chip piccoli accanto sono l'integrato di protezione DW01A e il doppio MOSFET 8205A.

Che cos'è il TP4056 e come funziona?

Il TP4056 è un integrato caricabatterie lineare pensato per batterie agli ioni di litio (Li-ion) e ai polimeri di litio (LiPo) a cella singola. Le batterie al litio non si caricano con un alimentatore qualsiasi; hanno bisogno di un profilo di carica preciso, e il TP4056 lo applica da solo. Se la batteria è sotto i 2,9 V, prima la carica dolcemente nella fase di precarica (trickle) con circa un decimo della corrente impostata, cioè circa 130 mA con l'impostazione da 1 A. Superati i 2,9 V passa alla fase a corrente costante (CC) e fornisce tutta la corrente impostata. Quando la batteria arriva a 4,2 V inizia la fase a tensione costante (CV): la tensione resta a 4,2 V e la corrente cala lentamente. La carica termina quando la corrente scende a un decimo del valore impostato (100 mA con l'impostazione da 1 A). Se poi la batteria scende a circa 4,05 V, il modulo riavvia la carica in automatico. Se il chip si scalda troppo, riduce da solo la corrente di carica; per questo è normale che il modulo sia caldo durante la carica.

CaratteristicaValore
Tensione di ingresso4,0–8 V (consigliati 5 V; micro USB o USB-C)
Tensione di fine carica4,2 V (±1,5%)
Corrente di caricaFino a 1 A; 1 A di default sui moduli (Rprog = 1,2 kΩ)
PrecaricaSotto 2,9 V circa 1/10 della corrente impostata
Fine caricaQuando la corrente scende a 1/10 del valore impostato (C/10)
RicaricaAutomatica quando la batteria scende a circa 4,05 V
Uscite di statoLED CHRG (in carica) e STDBY (carica completa)
Batterie adatteSolo cella singola (1S) Li-ion e LiPo da 3,7 V; non LiFePO4

TP4056 protetto (DW01) e non protetto: la differenza

Con lo stesso nome si vendono due schede diverse. Il modulo non protetto ha solo il chip TP4056 e quattro punti di collegamento: IN+/IN- e BAT+/BAT-. Carica la batteria, ma non controlla nulla durante la scarica. Il modulo protetto aggiunge l'integrato di protezione DW01A e il doppio MOSFET 8205A, e ha sei pad: IN+/IN-, B+/B- e OUT+/OUT-. Il circuito di protezione si comporta come un interruttore tra il polo negativo della batteria e il negativo del tuo circuito (OUT-). Quando la batteria è troppo scarica o troppo carica, quando il circuito assorbe troppa corrente o quando l'uscita va in cortocircuito, apre questo interruttore e scollega la batteria dal circuito.

CaratteristicaModulo non protettoModulo protetto (DW01A + 8205A)
PadIN+, IN-, BAT+, BAT-IN+, IN-, B+, B-, OUT+, OUT-
Protezione da sovraccaricaSolo il limite di 4,2 V del TP4056Interviene in più a circa 4,25–4,3 V
Protezione da scarica profondaNessunaStacca a circa 2,4 V, riattacca intorno a 3,0 V
Sovracorrente e cortocircuitoNessunaStacca a circa 3 A e in caso di cortocircuito
Quando sceglierlo?Se la batteria ha già il suo circuito di protezioneCon celle nude non protette, cioè in quasi tutti i progetti
Capire quale hai è facile: se sul lato batteria vedi sei pad (B+, B-, OUT+, OUT-) e due chip piccoli in più accanto al TP4056, il modulo è protetto. Se c'è scritto solo BAT+ e BAT-, non lo è. La differenza di prezzo è minima, quindi scegli sempre la versione protetta.

Batteria 18650: le tensioni da conoscere

Il nome 18650 viene dalle dimensioni della cella: 18 mm di diametro e 65 mm di lunghezza. La tensione nominale è di 3,6–3,7 V, ma è una media; una cella carica è a 4,2 V e una scarica a circa 3,0 V. Le capacità reali vanno da 2000 a 3500 mAh; le celle con scritto 6800 o 9900 mAh sono false e spesso non arrivano nemmeno a 1000 mAh. Le 18650 protette, con un proprio circuito di protezione, sono qualche millimetro più lunghe e non entrano in tutti i portabatterie. Puoi calcolare quanto durerà il tuo progetto con una batteria con lo strumento durata batteria e leggere le unità di capacità in mAh e Wh spiegati.

StatoTensioneSpiegazione
Carica completa4,20 VQui il TP4056 termina la carica
Nominale3,6–3,7 VIl valore in etichetta, tensione media di lavoro
Considerata scarica3,0–3,3 VFermare il progetto qui allunga la vita della batteria
Stacco della protezione2,4–2,5 VIl DW01A spegne l'uscita; cerca di non scendere così in basso
Zona pericolosaSotto 2,0 VNon caricare una cella rimasta a lungo così; sostituiscila
Batteria Li-ion 18650
Batteria Li-ion 18650: 18 mm di diametro, 65 mm di lunghezza e 3,7 V nominali. Si collega con un portabatterie o con lamelle di nichel saldate a punti.
Non saldare mai direttamente su una cella 18650 con il saldatore; il calore danneggia l'interno della batteria ed è pericoloso. Usa un portabatterie o lamelle di nichel saldate a punti. Non usare celle schiacciate, gonfie o con l'involucro rovinato, carica su una superficie non infiammabile e mai sotto 0 °C. Nei moduli già pronti il pin TEMP è collegato a GND, quindi la temperatura della batteria non viene controllata; toccala ogni tanto durante la carica per verificare che non si scaldi.

Collegamento del TP4056: i pin IN, B+/B- e OUT+/OUT-

PadSi collega aNota
Ingresso USBAlimentatore da 5 V o computerMicro USB o USB-C; il modo più semplice
IN+ / IN-Positivo e negativo di una sorgente esterna da 5 VPer alimentare tramite saldatura invece che via USB; non usarli insieme
B+ / B-Positivo e negativo della batteria 18650Qui va solo la batteria
OUT+ / OUT-Positivo e negativo del tuo circuito (il carico)Nel modulo protetto il carico va sempre qui
BAT+ / BAT- (non protetto)Batteria e carico insiemeNessuna protezione; il carico va in parallelo alla batteria
  1. Salda il filo rosso del portabatterie su B+ e quello nero su B-. Non inserire ancora la batteria.
  2. Salda il filo positivo del tuo circuito su OUT+ e quello negativo (GND) su OUT-. Se devi alimentare una scheda che vuole 5 V, in mezzo andrà uno step-up MT3608.
  3. Controlla le saldature e verifica con il multimetro che non ci sia un cortocircuito tra B+ e B-.
  4. Inserisci la batteria rispettando la polarità. In alcuni moduli protetti l'uscita può essere spenta all'inizio; collegare una volta l'USB resetta la protezione e attiva l'uscita.
  5. Collega il cavo USB: se il LED rosso si accende, la carica è iniziata. Quando la batteria è carica, il rosso si spegne e si accende quello blu o verde.
  6. Quando il multimetro mostra la tensione della batteria (3,0–4,2 V) tra OUT+ e OUT-, puoi accendere il tuo circuito.
L'errore più comune è collegare il circuito a B+ e B- su un modulo protetto. Così il circuito funziona, ma la protezione del DW01A viene scavalcata: la batteria può scaricarsi sotto i 2 V e in caso di cortocircuito la corrente non ha limiti. Collegare la batteria al contrario brucia il modulo all'istante; il TP4056 non ha protezione contro l'inversione di polarità.

Cosa indicano i LED del TP4056?

LED rosso (CHRG)LED blu o verde (STDBY)Significato
AccesoSpentoIn carica
SpentoAccesoCarica completata (4,2 V)
Lampeggia o sfarfallaAccesoBatteria assente o falso contatto
SpentoSpentoIngresso sotto 4 V o nessuna alimentazione USB
Acceso per oreSpentoIl carico impedisce la fine della carica o la batteria è esausta

Senza batteria è normale che il LED blu sia acceso e quello rosso lampeggi: il modulo carica e scarica di continuo il condensatore sul terminale della batteria vuoto. Puoi stimare il tempo di carica con capacità / corrente × 1,2. Una cella da 2600 mAh si carica in circa 3 ore a 1 A; dato che nell'ultima fase la corrente cala sempre di più, ci vuole un po' più di quanto dica la semplice divisione.

Regolare la corrente di carica: la resistenza Rprog

La corrente di carica è stabilita da un'unica resistenza tra il pin PROG (pin 2) del TP4056 e GND. Sulla maggior parte dei moduli è siglata R3 e riporta il codice 122, cioè 1,2 kΩ, che corrisponde a 1 A. Per decifrare questi codici puoi usare lo strumento codice SMD. La formula è all'incirca I (mA) = 1200 / Rprog (kΩ). Per cambiare la corrente dissaldi la resistenza SMD e saldi il valore che vuoi; se non trovi una SMD della misura giusta, puoi anche saldare una piccola resistenza a foro passante sui due pad.

RprogCorrente di caricaBatteria adatta
10 kΩ130 mALiPo piccola da 200–300 mAh
5 kΩ250 mALiPo da 300–500 mAh
4 kΩ300 mALiPo da 500–600 mAh
3 kΩ400 mACirca 800 mAh
2 kΩ580 mA1000–1200 mAh
1,5 kΩ780 mA1500 mAh e oltre
1,2 kΩ1000 mA18650 da 2000 mAh in su (default del modulo)

La regola generale è tenere la corrente di carica intorno a metà della capacità (0,5C): 250 mA vanno bene per una LiPo da 500 mAh e 1 A per una 18650 da 2600 mAh. Considera anche il calore: siccome il TP4056 è lineare, la differenza di tensione tra ingresso e batteria si trasforma in calore. Caricando una cella da 3,6 V a 1 A con 5 V in ingresso, il chip dissipa (5 − 3,6) × 1 = 1,4 W; per questo il modulo scalda molto e può ridurre da solo la corrente. Questi calcoli di potenza puoi farli anche con lo strumento legge di Ohm. La porta USB 2.0 di un computer fornisce solo 500 mA, quindi se caricherai spesso dal computer conviene abbassare la corrente a circa 500 mA.

Alimentare il circuito durante la carica (load sharing)

Se vuoi che il progetto continui a funzionare con l'USB collegato, la soluzione più semplice è lasciare il circuito collegato a OUT+ e OUT-; in questo modo il TP4056 carica la batteria e alimenta il circuito contemporaneamente. Il chip però non distingue la corrente che va nella batteria da quella che va al circuito. Se il tuo circuito assorbe sempre più di 100 mA, la corrente totale non scende mai sotto la soglia di fine carica, la carica non finisce mai e la batteria resta per ore a 4,2 V, accorciando la sua vita. Se il circuito assorbe quasi 1 A, la batteria non si carica nemmeno. Con un ESP32 in deep sleep o piccoli circuiti da pochi mA, il collegamento diretto in pratica non crea problemi; per progetti Wi-Fi sempre accesi, motori e strisce LED, realizza un circuito di condivisione del carico (load sharing).

ComponenteCollegamentoFunzione
Diodo Schottky (1N5817, SS14)Anodo ai 5 V dell'USB (IN+), catodo all'ingresso positivo del circuitoAlimenta direttamente il circuito quando c'è l'USB
MOSFET a canale P (AO3401, DMG2305)Drain alla batteria (OUT+), source all'ingresso positivo del circuitoCollega la batteria al circuito quando manca l'USB
Gate del MOSFETDirettamente ai 5 V dell'USB (IN+)Con l'USB collegato il MOSFET resta interdetto e la batteria si carica soltanto
Resistenza da 100 kΩTra il gate del MOSFET e GNDTolto l'USB porta il gate a 0 V e il MOSFET conduce
Con questo circuito, finché l'USB è collegato il tuo circuito è alimentato a circa 4,7 V attraverso il diodo e il TP4056 carica solo la batteria, così la carica termina al momento giusto. Quando stacchi la spina, il MOSFET entra in conduzione molto rapidamente e il circuito continua a funzionare a batteria quasi senza interruzioni. Come funziona un MOSFET lo trovi in usare un MOSFET con Arduino, come scegliere il diodo in cos'è un diodo?.

Servono 5 V? Aggiungere uno step-up MT3608

La tensione di una 18650 varia tra 3,0 e 4,2 V; non basta per Arduino Uno, moduli relè, servomotori o LED WS2812B che vogliono 5 V. La soluzione è un convertitore step-up (boost) che alza la tensione. Il più diffuso è il modulo MT3608: fornisce un'uscita regolabile fino a 28 V con un ingresso da 2 a 24 V, lavora a 1,2 MHz e il suo interruttore interno ha un limite di corrente di 4 A. In pratica da una sola 18650 puoi prelevare in sicurezza circa 0,5–1 A a 5 V; oltre, il modulo scalda e il rendimento cala. Quando invece devi abbassare una tensione, usi il modulo step-down LM2596, che fa esattamente il contrario.

  1. Collega gli ingressi VIN+ e VIN- dell'MT3608 a OUT+ e OUT- del TP4056.
  2. Senza collegare ancora nulla all'uscita, metti il multimetro tra VOUT+ e VOUT-.
  3. Gira il trimmer blu con un cacciavite piccolo fino a portare l'uscita a 5,0–5,1 V. Il trimmer è multigiro, quindi la tensione potrebbe iniziare a cambiare solo dopo diversi giri; gira con pazienza.
  4. Finita la regolazione, collega il pin 5V della tua scheda a VOUT+ e il pin GND a VOUT-.
  5. Misura di nuovo la tensione con il circuito in funzione; se sotto carico scende sotto i 4,8 V, accorcia i fili o riduci l'assorbimento.
SchedaCome alimentarla con una sola 18650Nota
Arduino Uno / Nano5,0 V dall'MT3608 → pin 5VIl pin 5V salta il regolatore; non superare mai 5,5 V
Arduino Pro Mini 3,3 V (8 MHz)OUT+ direttamente al pin RAWIl suo regolatore a bassa caduta funziona con la tensione della batteria
ESP32 DevKit5 V dall'MT3608 → pin VIN (5V)L'AMS1117 sulla scheda perde circa 1 V; non collegare la batteria direttamente
Raspberry Pi PicoOUT+ → diodo Schottky → VSYS (pin 39)VSYS accetta 1,8–5,5 V; non serve lo step-up
Modulo GSM SIM800LOUT+ e OUT- direttamenteVuole 3,4–4,4 V; ideale per il Li-ion
Non collegare mai l'MT3608 alla scheda prima di averlo regolato: i moduli escono di fabbrica con una tensione sconosciuta, spesso molto più alta di 5 V, che può bruciare all'istante un Arduino o un ESP32. Inoltre gli step-up non scollegano l'uscita; anche quando il modulo non lavora, la tensione della batteria arriva all'uscita attraverso l'induttore e il diodo. Per spegnere davvero il progetto, metti un interruttore tra batteria e modulo.

Se colleghi la scheda all'USB per caricare il codice mentre l'uscita dello step-up è ancora collegata, metti in contatto due alimentazioni. La cosa più sicura è scollegare l'uscita dello step-up durante il caricamento. Da quale pin e come si alimenta un Arduino lo trovi spiegato in dettaglio in come alimentare Arduino.

Le batterie in serie non si caricano con il TP4056

Il TP4056 carica solo una cella (1S) fino a 4,2 V. Un pacco di due 18650 in serie (2S), molto usato nelle auto robot, ha 7,4 V nominali e 8,4 V a piena carica; se lo colleghi a un solo TP4056 non si carica, e modulo e celle possono danneggiarsi. Mettere un TP4056 diverso su ogni cella non funziona nemmeno: i negativi di ingresso dei moduli si uniscono sulla stessa sorgente USB e, poiché il negativo del modulo in alto è collegato al positivo della cella in basso, la cella in basso va in cortocircuito. E poiché la sua tensione di fine carica è fissa a 4,2 V, il TP4056 non si usa nemmeno con le batterie LiFePO4, la cui carica deve terminare a 3,6 V.

  • Collegale in parallelo (1S2P): con due celle in parallelo la tensione resta 3,7 V, la capacità raddoppia e puoi caricarle con un TP4056. Prima di unirle, assicurati che abbiano la stessa tensione.
  • Alza la tensione con uno step-up: se ti servono 7–12 V, alza l'uscita delle celle in parallelo con un MT3608.
  • Usa un circuito di carica 2S: un pacco in serie richiede un caricatore CC/CV da 8,4 V e una scheda BMS 2S con bilanciamento.
  • Togli le celle per caricarle: puoi estrarre le celle del pacco in serie dal portabatterie e caricarle una alla volta in un caricatore per 18650 separato.

Misurare la tensione della batteria: collegamento del partitore di tensione

Per sapere quanto è carica la batteria basta misurarne la tensione. Però una batteria da 4,2 V non può andare direttamente su un pin analogico dell'ESP32 o del Pico, perché i loro ingressi ADC reggono al massimo 3,3 V. La soluzione è un partitore di tensione con due resistenze uguali: 100 kΩ + 100 kΩ portano 4,2 V a 2,1 V e assorbono dalla batteria solo 21 µA. Puoi calcolare i valori con lo strumento partitore di tensione e leggere come funziona il circuito in il partitore di tensione. Aggiungere un condensatore da 100 nF tra il punto di misura e GND stabilizza parecchio le letture fatte con resistenze di valore alto.

CollegamentoArduino UnoESP32Raspberry Pi Pico
Resistenza superiore (100 kΩ)OUT+ → punto centraleOUT+ → punto centraleOUT+ → punto centrale
Resistenza inferiore (100 kΩ)Punto centrale → GNDPunto centrale → GNDPunto centrale → GND
Punto centrale (misura)A0GPIO 34 (ADC1)GP26 (ADC0)
Condensatore da 100 nFFacoltativoPunto centrale → GNDPunto centrale → GND
OUT- del TP4056GNDGNDGND
Intervallo ADC0–5 V, 10 bitCirca 0–3,1 V, 12 bit0–3,3 V, 12 bit
Sull'ESP32 usa solo i pin dell'ADC1 (GPIO 32–39) per misurare la batteria. I pin dell'ADC2 non si possono leggere con il Wi-Fi attivo e restituiscono valori sbagliati. I GPIO 34–39 sono pin di solo ingresso e sono perfetti proprio per questo compito.

L'ADC di Arduino Uno usa un riferimento di 5 V; grazie al partitore, una batteria da 4,2 V compare su A0 come 2,1 V e la lettura a 10 bit dà un valore tra 0 e 1023. Quando la scheda è alimentata da USB o da uno step-up, il pin 5V potrebbe non essere esattamente a 5,00 V; se lo misuri con il multimetro e lo scrivi come VREF nel codice, la precisione migliora parecchio.

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}

Misurare la tensione della batteria e mostrare la percentuale con l'ESP32

L'ADC dell'ESP32 non è perfettamente lineare e varia da scheda a scheda. Per questo, invece di un analogRead grezzo, è più preciso usare analogReadMilliVolts, che applica la calibrazione di fabbrica del chip e restituisce direttamente i millivolt. Il codice qui sotto fa la media di 16 letture, moltiplica per il rapporto del partitore per ottenere la tensione della batteria, la converte in percentuale con una tabella e, se la batteria scende sotto 3,3 V, manda l'ESP32 in deep sleep per 10 minuti.

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}
Tensione della batteriaCarica approssimativa
4,20 V100%
4,10 V89%
4,00 V78%
3,90 V63%
3,80 V40%
3,70 V12%
3,60 V5%
3,30 V0% (ferma il progetto)

Questi valori valgono per una batteria a riposo. Quando l'ESP32 assorbe picchi di corrente trasmettendo in Wi-Fi, la tensione della batteria cala un po', mentre durante la carica il TP4056 la alza artificialmente; per questo la lettura più precisa si ottiene prima di accendere il Wi-Fi e con il caricatore scollegato. Per una lunga autonomia, misura ogni pochi minuti e nel frattempo usa il deep sleep dell'ESP32. Ricorda anche che le schede DevKit con chip USB-seriale e LED di accensione consumano diversi mA anche in sleep; per progetti che devono durare mesi a batteria è meglio scegliere schede a basso consumo.

Misurare la batteria con il Raspberry Pi Pico (MicroPython)

Il Pico qui è fortunato: il suo pin VSYS alimenta un regolatore buck-boost interno che accetta 1,8–5,5 V, quindi funziona con una sola 18650 senza step-up. Collega OUT+ del TP4056 a VSYS (pin 39) tramite un diodo Schottky (1N5817) e OUT- a GND (pin 38); il diodo impedisce che, con l'USB collegato, i 5 V del Pico tornino verso la batteria. Puoi misurare la tensione della batteria con un partitore 100k + 100k su GP26. Sul Pico normale il pin GP29 misura già un terzo di VSYS, ma il valore risulta più basso per via della caduta sul diodo; sul Pico W quel pin è condiviso con il chip Wi-Fi, quindi un partitore esterno è la strada più sicura.

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)

read_u16 restituisce un valore da 0 a 65535; moltiplicandolo per 3,3 / 65535 ottieni la tensione sul pin e moltiplicandolo per il rapporto del partitore, 2, la tensione della batteria. Se usi il Pico per la prima volta, cos'è il Raspberry Pi Pico? ti spiega passo passo come installare MicroPython.

Idee di progetto con TP4056 e batteria 18650

  • Stazione meteo portatile: alimenta un ESP32, un sensore di temperatura e un display OLED con una sola 18650 e mostra la percentuale della batteria in un angolo dello schermo.
  • Sensore a energia solare: collega a IN+/IN- un piccolo pannello solare da 6 V con tensione a vuoto sotto gli 8 V e tieni acceso un ESP32 per giorni grazie al deep sleep.
  • Centralina d'allarme via SMS: il SIM800L vuole 3,4–4,4 V, quindi si alimenta direttamente con una 18650 e invia un SMS quando rileva un movimento.
  • Luce notturna ricaricabile: costruisci una lampada che si accende al buio grazie a un LDR e si ricarica via USB-C.
  • Auto robot: carica due 18650 in parallelo con un TP4056 e alza la tensione per i motori con uno step-up; i dettagli sono in costruire un'auto robot con Arduino.
  • Avviso batteria sul telefono: quando la batteria scende sotto il 20%, fai in modo che l'ESP32 ti mandi un messaggio tramite un bot Telegram.

Errori comuni e soluzioni

ProblemaCausa probabileSoluzione
Nessuna tensione tra OUT+ e OUT-La protezione è intervenuta (scarica profonda o primo inserimento della batteria)Collega l'USB per qualche secondo; la protezione si resetta
Il LED rosso resta acceso per oreIl carico assorbe più di 100 mA o la batteria è esaustaRealizza un circuito di condivisione del carico e prova la batteria da sola
Entrambi i LED spentiMeno di 4 V in ingresso: cavo difettoso o alimentatore deboleProva un altro cavo e un alimentatore da almeno 1 A
Non carica con un cavo USB-C/USB-CAd alcuni moduli economici mancano le resistenze CCUsa un cavo da USB-A a USB-C
Il modulo scalda moltoPerdita normale della carica lineare a 1 A (circa 1,4 W)Riduci la corrente con una Rprog più grande e arieggia la scheda
L'ESP32 si riavvia di continuoBatteria debole o brownout per la caduta dell'AMS1117Fornisci 5 V con uno step-up e controlla la tensione della batteria
La tensione misurata è diversa da quella del multimetroRapporto del partitore o tensione di riferimento sbagliatiConfronta con il multimetro e correggi il fattore nel codice
Misurare ogni punto con il multimetro prima di accendere evita la maggior parte degli errori: la batteria deve segnare 3–4,2 V, i terminali OUT la tensione della batteria e l'uscita dell'MT3608 5,0 V. Se sei alle prime armi con il multimetro, come usare il multimetro ti aiuterà; se invece il tuo ESP32 si riavvia continuamente con la batteria scarica, leggi errore brownout dell'ESP32.

Collegato bene, il TP4056 è un componente affidabile ed economico che libera i tuoi progetti dal cavo: batteria su B+ e B-, circuito su OUT+ e OUT-, corrente regolata in base alla batteria, uno step-up per i 5 V e la tensione della batteria controllata via software. Nell'app BlueGrays puoi seguire passo passo, con schemi e codice pronto, progetti adatti al funzionamento a batteria come il risparmio energetico con il deep sleep dell'ESP32, un voltmetro digitale con LCD e un registratore di temperatura.

Domande frequenti

Che differenza c'è tra B+ e OUT+ nel modulo TP4056?

B+ e B- servono solo a collegare la batteria; OUT+ e OUT- sono l'uscita che passa dal circuito di protezione, ed è lì che va il tuo circuito. Nel modulo protetto OUT+ è in realtà lo stesso punto di B+. La differenza sta sul lato negativo, perché tra OUT- e B- ci sono i MOSFET che scollegano la batteria quando serve.

Quanto tempo impiega il TP4056 a caricare una 18650?

Con 1 A di fabbrica, una 18650 da 2500–3000 mAh si carica in circa 3–3,5 ore. Siccome nell'ultima fase la corrente cala sempre di più, ci vuole circa il 20% in più rispetto alla capacità divisa per la corrente. Se hai abbassato la corrente, il tempo aumenta nella stessa proporzione.

Il TP4056 può alimentare un circuito mentre carica?

Sì, il circuito collegato ai terminali OUT resta alimentato anche durante la carica. Ma se assorbe sempre più di 100 mA, la carica potrebbe non finire mai e la batteria resta sempre a 4,2 V. Per carichi grandi è meglio realizzare un circuito di condivisione del carico con un diodo Schottky e un MOSFET a canale P.

Si possono caricare due batterie 18650 con un TP4056?

Due celle in parallelo (3,7 V) si caricano senza problemi, ci vuole solo più tempo. Due celle in serie (7,4 V) non si possono caricare con un TP4056, perché il modulo si ferma a 4,2 V per una sola cella. I pacchi in serie richiedono un caricatore 2S da 8,4 V e una scheda BMS con bilanciamento.

Cosa significano i LED rosso e blu del TP4056?

Il LED rosso indica che la batteria è in carica, quello blu o verde che la carica è terminata. Senza batteria il LED blu è acceso e il rosso lampeggia. Se sono spenti entrambi, al modulo non arriva abbastanza tensione in ingresso.

Si può alimentare un ESP32 direttamente con una batteria 18650?

Il chip ESP32 lavora a 3,3 V, quindi una batteria da 4,2 V non può andare direttamente al chip. Il regolatore AMS1117 delle schede DevKit perde circa 1 V, perciò quando la batteria scende a 3,7 V la tensione non basta più. La via più semplice è generare 5 V con un MT3608 per il pin VIN oppure usare un regolatore da 3,3 V a bassa caduta.

Vedi tutti i progetti
LED Lampeggiante con ESP32
#103Principiante

LED Lampeggiante con ESP32

Insegna l'uso di base delle uscite GPIO con l'ESP32. Otteniamo un effetto lampeggiante accendendo e spegnendo un LED dal pin digitale. Versione ESP32 del classico progetto blink su Arduino UNO; i comandi di base di blink nell'ambiente Arduino sono gli stessi, ma la disposizione dei pin e i livelli GPIO a 3,3 V dell'ESP32 sono diversi da quelli di Arduino UNO.

4.7(37)
99
Lettura dell'intensità luminosa con il modulo LDR ESP32
#113Principiante

Lettura dell'intensità luminosa con il modulo LDR ESP32

Monitoraggio in tempo reale sul Serial Monitor del valore grezzo dell'ADC del modulo LDR e della percentuale relativa di luce calcolata dai valori di riferimento al buio e alla luce. Questa percentuale non è una misurazione in lux. Spiega il principio di calibrazione del modulo. È consigliabile eseguirlo prima del Progetto 10, poiché serve a determinare il valore di soglia.

4.6(36)
55
ESP32 Deep Sleep — Risparmio della batteria (OLED + contatore in RTC RAM)
#135Avanzato
Premium

ESP32 Deep Sleep — Risparmio della batteria (OLED + contatore in RTC RAM)

La modalità Deep Sleep dell'ESP32 riduce il consumo di corrente a circa 10 µA spegnendo la CPU e la maggior parte dei dispositivi periferici ed è di fondamentale importanza per i dispositivi IoT alimentati a batteria. In questo progetto utilizziamo tre diverse fonti di risveglio: il timer (15 secondi), un pin esterno (EXT0 — pulsante GPIO 33) e il sensore tattile (T0/GPIO 4). Le variabili contrassegnate con RTC_DATA_ATTR vengono preservate durante la modalità Deep Sleep: il contatore di avvio,

4.3(10)
16
Voltmetro digitale con display LCD
#56Intermedio
Premium

Voltmetro digitale con display LCD

Scopri quanta tensione dà una pila o un alimentatore con uno strumento costruito da te. Un partitore fatto di due resistenze abbassa la tensione alta a un livello che la scheda può leggere, e l'Arduin

4.5(27)
36
Data Logger di Temperatura ESP32 (DHT22 + DS1307 RTC + microSD + OLED)
#144Avanzato
Premium

Data Logger di Temperatura ESP32 (DHT22 + DS1307 RTC + microSD + OLED)

Costruisci un data logger di temperatura con timestamp usando ESP32! Leggi temperatura/umidità dal DHT22 ogni minuto, ottieni l'ora reale dal DS1307 RTC e registra su scheda microSD in formato CSV. L'OLED mostra dal vivo temperatura (font grande), percentuale di umidità, timestamp e contatore di log. Il file /temp_log.csv sulla scheda SD si apre in Excel, Google Sheets o Python pandas per l'analisi — perfetto per il monitoraggio di serre, tracciamento della temperatura domestica, raccolta

4.7(7)
12
ESP32 HTTPClient + API meteo (con display OLED SSD1306)
#134Avanzato
Premium

ESP32 HTTPClient + API meteo (con display OLED SSD1306)

In questo progetto, utilizzando l'ESP32, effettuiamo una chiamata REST all'API meteo (wttr.in) tramite Internet utilizzando HTTPClient.h. A differenza della precedente versione con LCD I2C, qui utilizziamo un display OLED SSD1306 (128×64), che consente di utilizzare caratteri di grandi dimensioni, icone vettoriali e una ricca presentazione visiva su un unico schermo. Per le condizioni meteorologiche, 7 diverse icone vettoriali (soleggiato, parzialmente nuvoloso, nuvoloso, piovoso, nevoso, temp

4.3(10)
19
Sistema di Allarme Movimento ESP32 (PIR + Buzzer + LED + Telegram)
#145Avanzato
Premium

Sistema di Allarme Movimento ESP32 (PIR + Buzzer + LED + Telegram)

Un sistema di allarme di sicurezza intelligente che attiva buzzer e LED quando il sensore PIR rileva movimento, inviando contemporaneamente una notifica istantanea al proprietario tramite Telegram. Dispone di un tempo di attesa di 30 secondi per limitare la frequenza degli allarmi ripetuti; questo meccanismo non verifica la validità dei rilevamenti del sensore PIR né elimina le false attivazioni. Adatto a sicurezza domestica, monitoraggio di garage, magazzini o studi. Con l'ESP32-CAM è possibile

0.0(0)
9
Auto controllata via Bluetooth con L298N
#80Avanzato
Premium

Auto controllata via Bluetooth con L298N

Trasforma il telefono in un telecomando e guida la tua auto robot. L'Arduino riceve tramite un modulo Bluetooth i comandi di un'app di controllo remoto sul telefono e fa girare le ruote con un driver

5.0(38)
65