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.

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.
| Caratteristica | Valore |
|---|---|
| Tensione di ingresso | 4,0–8 V (consigliati 5 V; micro USB o USB-C) |
| Tensione di fine carica | 4,2 V (±1,5%) |
| Corrente di carica | Fino a 1 A; 1 A di default sui moduli (Rprog = 1,2 kΩ) |
| Precarica | Sotto 2,9 V circa 1/10 della corrente impostata |
| Fine carica | Quando la corrente scende a 1/10 del valore impostato (C/10) |
| Ricarica | Automatica quando la batteria scende a circa 4,05 V |
| Uscite di stato | LED CHRG (in carica) e STDBY (carica completa) |
| Batterie adatte | Solo 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.
| Caratteristica | Modulo non protetto | Modulo protetto (DW01A + 8205A) |
|---|---|---|
| Pad | IN+, IN-, BAT+, BAT- | IN+, IN-, B+, B-, OUT+, OUT- |
| Protezione da sovraccarica | Solo il limite di 4,2 V del TP4056 | Interviene in più a circa 4,25–4,3 V |
| Protezione da scarica profonda | Nessuna | Stacca a circa 2,4 V, riattacca intorno a 3,0 V |
| Sovracorrente e cortocircuito | Nessuna | Stacca a circa 3 A e in caso di cortocircuito |
| Quando sceglierlo? | Se la batteria ha già il suo circuito di protezione | Con celle nude non protette, cioè in quasi tutti i progetti |
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.
| Stato | Tensione | Spiegazione |
|---|---|---|
| Carica completa | 4,20 V | Qui il TP4056 termina la carica |
| Nominale | 3,6–3,7 V | Il valore in etichetta, tensione media di lavoro |
| Considerata scarica | 3,0–3,3 V | Fermare il progetto qui allunga la vita della batteria |
| Stacco della protezione | 2,4–2,5 V | Il DW01A spegne l'uscita; cerca di non scendere così in basso |
| Zona pericolosa | Sotto 2,0 V | Non caricare una cella rimasta a lungo così; sostituiscila |

Collegamento del TP4056: i pin IN, B+/B- e OUT+/OUT-
| Pad | Si collega a | Nota |
|---|---|---|
| Ingresso USB | Alimentatore da 5 V o computer | Micro USB o USB-C; il modo più semplice |
| IN+ / IN- | Positivo e negativo di una sorgente esterna da 5 V | Per alimentare tramite saldatura invece che via USB; non usarli insieme |
| B+ / B- | Positivo e negativo della batteria 18650 | Qui 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 insieme | Nessuna protezione; il carico va in parallelo alla batteria |
- Salda il filo rosso del portabatterie su B+ e quello nero su B-. Non inserire ancora la batteria.
- 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.
- Controlla le saldature e verifica con il multimetro che non ci sia un cortocircuito tra B+ e B-.
- 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.
- 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.
- Quando il multimetro mostra la tensione della batteria (3,0–4,2 V) tra OUT+ e OUT-, puoi accendere il tuo circuito.
Cosa indicano i LED del TP4056?
| LED rosso (CHRG) | LED blu o verde (STDBY) | Significato |
|---|---|---|
| Acceso | Spento | In carica |
| Spento | Acceso | Carica completata (4,2 V) |
| Lampeggia o sfarfalla | Acceso | Batteria assente o falso contatto |
| Spento | Spento | Ingresso sotto 4 V o nessuna alimentazione USB |
| Acceso per ore | Spento | Il 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.
| Rprog | Corrente di carica | Batteria adatta |
|---|---|---|
| 10 kΩ | 130 mA | LiPo piccola da 200–300 mAh |
| 5 kΩ | 250 mA | LiPo da 300–500 mAh |
| 4 kΩ | 300 mA | LiPo da 500–600 mAh |
| 3 kΩ | 400 mA | Circa 800 mAh |
| 2 kΩ | 580 mA | 1000–1200 mAh |
| 1,5 kΩ | 780 mA | 1500 mAh e oltre |
| 1,2 kΩ | 1000 mA | 18650 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).
| Componente | Collegamento | Funzione |
|---|---|---|
| Diodo Schottky (1N5817, SS14) | Anodo ai 5 V dell'USB (IN+), catodo all'ingresso positivo del circuito | Alimenta direttamente il circuito quando c'è l'USB |
| MOSFET a canale P (AO3401, DMG2305) | Drain alla batteria (OUT+), source all'ingresso positivo del circuito | Collega la batteria al circuito quando manca l'USB |
| Gate del MOSFET | Direttamente 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 GND | Tolto l'USB porta il gate a 0 V e il MOSFET conduce |
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.
- Collega gli ingressi VIN+ e VIN- dell'MT3608 a OUT+ e OUT- del TP4056.
- Senza collegare ancora nulla all'uscita, metti il multimetro tra VOUT+ e VOUT-.
- 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.
- Finita la regolazione, collega il pin 5V della tua scheda a VOUT+ e il pin GND a VOUT-.
- 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.
| Scheda | Come alimentarla con una sola 18650 | Nota |
|---|---|---|
| Arduino Uno / Nano | 5,0 V dall'MT3608 → pin 5V | Il pin 5V salta il regolatore; non superare mai 5,5 V |
| Arduino Pro Mini 3,3 V (8 MHz) | OUT+ direttamente al pin RAW | Il suo regolatore a bassa caduta funziona con la tensione della batteria |
| ESP32 DevKit | 5 V dall'MT3608 → pin VIN (5V) | L'AMS1117 sulla scheda perde circa 1 V; non collegare la batteria direttamente |
| Raspberry Pi Pico | OUT+ → diodo Schottky → VSYS (pin 39) | VSYS accetta 1,8–5,5 V; non serve lo step-up |
| Modulo GSM SIM800L | OUT+ e OUT- direttamente | Vuole 3,4–4,4 V; ideale per il Li-ion |
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.
| Collegamento | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| Resistenza superiore (100 kΩ) | OUT+ → punto centrale | OUT+ → punto centrale | OUT+ → punto centrale |
| Resistenza inferiore (100 kΩ) | Punto centrale → GND | Punto centrale → GND | Punto centrale → GND |
| Punto centrale (misura) | A0 | GPIO 34 (ADC1) | GP26 (ADC0) |
| Condensatore da 100 nF | Facoltativo | Punto centrale → GND | Punto centrale → GND |
| OUT- del TP4056 | GND | GND | GND |
| Intervallo ADC | 0–5 V, 10 bit | Circa 0–3,1 V, 12 bit | 0–3,3 V, 12 bit |
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.
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.
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 batteria | Carica approssimativa |
|---|---|
| 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% (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.
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
| Problema | Causa probabile | Soluzione |
|---|---|---|
| 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 ore | Il carico assorbe più di 100 mA o la batteria è esausta | Realizza un circuito di condivisione del carico e prova la batteria da sola |
| Entrambi i LED spenti | Meno di 4 V in ingresso: cavo difettoso o alimentatore debole | Prova un altro cavo e un alimentatore da almeno 1 A |
| Non carica con un cavo USB-C/USB-C | Ad alcuni moduli economici mancano le resistenze CC | Usa un cavo da USB-A a USB-C |
| Il modulo scalda molto | Perdita 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 continuo | Batteria debole o brownout per la caduta dell'AMS1117 | Fornisci 5 V con uno step-up e controlla la tensione della batteria |
| La tensione misurata è diversa da quella del multimetro | Rapporto del partitore o tensione di riferimento sbagliati | Confronta con il multimetro e correggi il fattore nel codice |
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.
Progetti da realizzare dopo questo articolo
Vedi tutti i progetti
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.

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.

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,

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

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

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

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

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
Altri articoli
App BlueGrays
Costruisci questo circuito passo passo sul telefono
Schema, codice ed elenco componenti in un’unica schermata. Oltre 200 progetti Arduino, ESP32 e Pico da realizzare.
Inquadra con il telefono
Punta la fotocamera sul codice: si apre lo store del tuo telefono.
oppure apri lo store

