Panduan Pengkabelan TP4056: Modul Charger 18650, Proteksi, dan ESP32
Cara menyambungkan charger TP4056: pin B+/B- dan OUT+/OUT-, versi DW01 dengan proteksi, arti LED, mengatur arus dengan Rprog, 5 V lewat MT3608, dan membaca baterai dengan ESP32.
Pengkabelan TP4056 adalah cara termurah untuk mengisi baterai 18650 atau LiPo satu sel dengan aman dari USB, lalu menjalankan proyek Arduino, ESP32, atau Raspberry Pi Pico dari baterai yang sama: kabel USB masuk ke input modul, baterai ke B+ dan B-, dan pada modul berproteksi rangkaianmu ke OUT+ dan OUT-. Modul ini mengisi baterai sampai 4,2 V dengan metode arus konstan/tegangan konstan, berhenti sendiri ketika baterai penuh, dan menunjukkan statusnya lewat dua LED. Board seukuran kuku jari ini adalah jantung proyek yang bekerja jauh dari stopkontak, seperti stasiun cuaca portabel, robot, lampu isi ulang, dan sensor nirkabel.
Tapi modul murah ini punya beberapa jebakan: versi dengan proteksi dan tanpa proteksi disambung dengan cara berbeda, arus pengisian bawaan 1 A terlalu besar untuk baterai kecil, memberi daya ke rangkaian selama pengisian bisa membuat pengisian tidak pernah selesai, dan dua sel yang dirangkai seri sama sekali tidak bisa diisi dengan modul ini. Di panduan ini kamu akan mempelajari langkah demi langkah fungsi tiap pin, arti LED-nya, cara mengatur arus pengisian dengan resistor Rprog, cara menambahkan modul boost MT3608 untuk board yang butuh 5 V, serta cara mengukur tegangan baterai dengan ESP32 dan mengubahnya menjadi persentase.

Apa itu TP4056 dan bagaimana cara kerjanya?
TP4056 adalah IC charger linear yang dibuat untuk baterai lithium-ion (Li-ion) dan lithium-polymer (LiPo) satu sel. Baterai lithium tidak bisa diisi dengan sembarang adaptor; baterai ini butuh profil pengisian tertentu, dan TP4056 menjalankannya sendiri. Jika baterai di bawah 2,9 V, chip ini lebih dulu mengisi pelan-pelan dalam fase pre-charge (trickle) dengan sekitar sepersepuluh arus yang diatur, kira-kira 130 mA pada pengaturan 1 A. Begitu tegangan melewati 2,9 V, chip pindah ke fase arus konstan (CC) dan memberikan arus penuh sesuai pengaturan. Ketika baterai mencapai 4,2 V, fase tegangan konstan (CV) dimulai: tegangan ditahan di 4,2 V dan arusnya turun perlahan. Pengisian selesai ketika arus turun sampai sepersepuluh nilai yang diatur (100 mA pada pengaturan 1 A). Jika nanti baterai turun ke sekitar 4,05 V, modul otomatis mulai mengisi lagi. Jika chip menjadi sangat panas, chip ini menurunkan arus pengisian dengan sendirinya, jadi wajar kalau modul terasa hangat selama pengisian.
| Fitur | Nilai |
|---|---|
| Tegangan input | 4,0–8 V (disarankan 5 V; micro USB atau USB-C) |
| Tegangan akhir pengisian | 4,2 V (±1,5%) |
| Arus pengisian | Maksimal 1 A; bawaan modul 1 A (Rprog = 1,2 kΩ) |
| Pre-charge | Sekitar 1/10 arus yang diatur di bawah 2,9 V |
| Akhir pengisian | Ketika arus turun ke 1/10 nilai yang diatur (C/10) |
| Pengisian ulang | Otomatis ketika baterai turun ke sekitar 4,05 V |
| Output status | LED CHRG (sedang mengisi) dan STDBY (penuh) |
| Baterai yang cocok | Hanya Li-ion dan LiPo satu sel (1S) 3,7 V; bukan LiFePO4 |
Modul TP4056 dengan proteksi (DW01) vs tanpa proteksi
Ada dua board berbeda yang dijual dengan nama yang sama. Modul tanpa proteksi hanya punya chip TP4056 dan empat titik sambungan: IN+/IN- dan BAT+/BAT-. Modul ini mengisi baterai, tapi tidak mengawasi apa pun ketika baterai sedang dipakai. Modul dengan proteksi menambahkan IC proteksi DW01A dan dual MOSFET 8205A, dan punya enam pad: IN+/IN-, B+/B-, dan OUT+/OUT-. Rangkaian proteksi ini dipasang seperti saklar di antara kutub negatif baterai dan kutub negatif rangkaianmu (OUT-). Ketika baterai terlalu kosong atau terlalu penuh, ketika rangkaian menarik arus terlalu besar, atau ketika output korsleting, saklar ini dibuka dan baterai diputus dari rangkaian.
| Fitur | Modul tanpa proteksi | Modul dengan proteksi (DW01A + 8205A) |
|---|---|---|
| Pad | IN+, IN-, BAT+, BAT- | IN+, IN-, B+, B-, OUT+, OUT- |
| Proteksi overcharge | Hanya batas 4,2 V dari TP4056 | Juga memutus di sekitar 4,25–4,3 V |
| Proteksi over-discharge | Tidak ada | Memutus di sekitar 2,4 V, menyambung lagi di sekitar 3,0 V |
| Arus berlebih dan korsleting | Tidak ada | Memutus di sekitar 3 A dan ketika korsleting |
| Kapan dipilih | Jika baterainya sudah punya rangkaian proteksi sendiri | Dengan sel polos tanpa proteksi, artinya hampir di semua proyek |
Baterai 18650: tegangan yang perlu kamu tahu
Nama 18650 berasal dari ukuran selnya: diameter 18 mm dan panjang 65 mm. Tegangan nominalnya 3,6–3,7 V, tapi itu nilai rata-rata; sel yang penuh ada di 4,2 V dan sel yang kosong di sekitar 3,0 V. Kapasitas aslinya berkisar 2000 sampai 3500 mAh; sel berlabel 6800 atau 9900 mAh adalah palsu dan sering kali bahkan tidak sampai 1000 mAh. 18650 berproteksi yang punya rangkaian proteksi sendiri beberapa milimeter lebih panjang dan mungkin tidak muat di semua tempat baterai. Kamu bisa menghitung berapa lama proyekmu bertahan dengan satu baterai memakai kalkulator umur baterai, dan membaca tentang satuan kapasitas di Apa Arti mAh?.
| Kondisi | Tegangan | Catatan |
|---|---|---|
| Terisi penuh | 4,20 V | TP4056 mengakhiri pengisian di sini |
| Nominal (rata-rata) | 3,6–3,7 V | Nilai di label, tegangan kerja rata-rata |
| Dianggap kosong | 3,0–3,3 V | Menghentikan proyekmu di sini memperpanjang umur baterai |
| Batas putus proteksi | 2,4–2,5 V | DW01A mematikan output; usahakan jangan sampai serendah ini |
| Zona bahaya | Di bawah 2,0 V | Jangan mengisi sel yang lama dibiarkan serendah ini; ganti saja |

Pengkabelan TP4056: pin IN, B+/B-, dan OUT+/OUT-
| Pad | Disambung ke | Catatan |
|---|---|---|
| Input USB | Adaptor 5 V atau komputer | Micro USB atau USB-C; cara paling mudah |
| IN+ / IN- | Plus dan minus sumber 5 V eksternal | Untuk daya yang disolder sebagai ganti USB; jangan pakai keduanya bersamaan |
| B+ / B- | Plus dan minus baterai 18650 | Hanya baterai yang disambung di sini |
| OUT+ / OUT- | Plus dan minus rangkaianmu (beban) | Pada modul berproteksi, beban selalu disambung di sini |
| BAT+ / BAT- (tanpa proteksi) | Baterai dan beban bersama-sama | Tanpa proteksi; beban dipasang paralel dengan baterai |
- Solder kabel merah tempat baterai ke B+ dan kabel hitamnya ke B-. Jangan pasang baterainya dulu.
- Solder kabel catu positif rangkaianmu ke OUT+ dan kabel negatifnya (GND) ke OUT-. Kalau kamu memberi daya ke board yang butuh 5 V, modul boost MT3608 dipasang di antaranya.
- Periksa sambungan solder dan pakai multimeter untuk memastikan tidak ada korsleting antara B+ dan B-.
- Pasang baterai dengan memperhatikan polaritasnya. Pada beberapa modul berproteksi, output-nya mungkin mati di awal; mencolokkan USB sekali akan mereset proteksi dan menyalakan output.
- Colokkan kabel USB: jika LED merah menyala, pengisian sudah dimulai. Ketika baterai penuh, LED merah padam dan LED biru atau hijau menyala.
- Begitu multimeter menunjukkan tegangan baterai (3,0–4,2 V) di antara OUT+ dan OUT-, kamu bisa menyalakan rangkaianmu.
Apa arti LED pada TP4056?
| LED merah (CHRG) | LED biru atau hijau (STDBY) | Arti |
|---|---|---|
| Menyala | Mati | Sedang mengisi |
| Mati | Menyala | Pengisian selesai (4,2 V) |
| Berkedip atau berkelip | Menyala | Tidak ada baterai terpasang atau kontaknya buruk |
| Mati | Mati | Input di bawah 4 V atau tidak ada daya USB |
| Menyala berjam-jam | Mati | Beban menghalangi akhir pengisian, atau baterainya sudah aus |
Ketika tidak ada baterai terpasang, wajar kalau LED biru menyala dan LED merah berkelip: modul terus mengisi dan mengosongkan kapasitor di terminal baterai yang kosong. Kamu bisa memperkirakan waktu pengisian secara kasar dengan kapasitas / arus × 1,2. Sel 2600 mAh terisi dalam sekitar 3 jam pada 1 A; karena arusnya turun perlahan di tahap akhir, waktunya sedikit lebih lama daripada hasil pembagian sederhana.
Mengatur arus pengisian: resistor Rprog
Arus pengisian diatur oleh satu resistor di antara pin PROG TP4056 (pin 2) dan GND. Pada kebanyakan modul, resistor ini bertanda R3 dan bertuliskan kode 122, artinya 1,2 kΩ, yang menghasilkan 1 A. Untuk membaca tanda seperti ini kamu bisa memakai dekoder kode SMD. Rumusnya kira-kira I (mA) = 1200 / Rprog (kΩ). Untuk mengubah arus, lepaskan resistor SMD itu dengan solder lalu pasang nilai yang kamu mau; kalau tidak menemukan resistor SMD dengan ukuran yang pas, kamu juga bisa menyolder resistor kaki (through-hole) kecil di antara kedua pad.
| Rprog | Arus pengisian | Baterai yang cocok |
|---|---|---|
| 10 kΩ | 130 mA | LiPo kecil 200–300 mAh |
| 5 kΩ | 250 mA | LiPo 300–500 mAh |
| 4 kΩ | 300 mA | LiPo 500–600 mAh |
| 3 kΩ | 400 mA | Sekitar 800 mAh |
| 2 kΩ | 580 mA | 1000–1200 mAh |
| 1,5 kΩ | 780 mA | 1500 mAh ke atas |
| 1,2 kΩ | 1000 mA | 18650 dengan 2000 mAh ke atas (bawaan modul) |
Aturan umumnya, jaga arus pengisian di sekitar setengah kapasitas baterai (0,5C): 250 mA cocok untuk LiPo 500 mAh dan 1 A cocok untuk 18650 2600 mAh. Perhitungkan juga panasnya: karena TP4056 bekerja secara linear, selisih tegangan antara input dan baterai berubah menjadi panas. Ketika mengisi sel 3,6 V dengan 1 A dari input 5 V, chip membuang (5 − 3,6) × 1 = 1,4 W; itulah sebabnya modul menjadi sangat panas dan bisa menurunkan arusnya sendiri. Hitungan daya seperti ini juga bisa kamu lakukan dengan kalkulator hukum Ohm. Port USB 2.0 komputer hanya memberi 500 mA, jadi kalau kamu sering mengisi dari komputer, masuk akal untuk menurunkan arusnya ke sekitar 500 mA.
Memberi daya ke rangkaian selama pengisian (load sharing)
Kalau kamu ingin proyekmu tetap berjalan selama USB tercolok, cara paling sederhana adalah membiarkan rangkaian tersambung ke OUT+ dan OUT-; TP4056 lalu mengisi baterai sekaligus memberi daya ke rangkaian. Tapi chip ini tidak bisa membedakan arus yang masuk ke baterai dan arus yang menuju rangkaian. Jika rangkaianmu terus-menerus menarik lebih dari 100 mA, arus totalnya tidak pernah turun di bawah ambang akhir pengisian, pengisian tidak pernah selesai, dan baterai ditahan di 4,2 V selama berjam-jam, yang memperpendek umurnya. Jika rangkaianmu menarik hampir 1 A, baterainya bahkan tidak akan penuh. Dengan ESP32 dalam deep sleep atau rangkaian kecil yang menarik beberapa mA, sambungan langsung praktis tidak menimbulkan masalah; untuk proyek Wi-Fi yang selalu menyala, motor, dan LED strip, buat rangkaian load sharing (berbagi beban).
| Komponen | Sambungan | Fungsi |
|---|---|---|
| Dioda Schottky (1N5817, SS14) | Anoda ke USB 5 V (IN+), katoda ke input positif rangkaian | Memberi daya langsung ke rangkaian ketika ada USB |
| MOSFET kanal P (AO3401, DMG2305) | Drain ke baterai (OUT+), source ke input positif rangkaian | Menyambungkan baterai ke rangkaian ketika tidak ada USB |
| Sambungan gate MOSFET | Langsung ke USB 5 V (IN+) | Ketika USB tercolok, MOSFET tetap mati dan baterai hanya diisi |
| Resistor 100 kΩ | Di antara gate MOSFET dan GND | Menarik gate ke 0 V ketika USB dicabut, sehingga MOSFET menyala |
Butuh 5 V? Menambahkan modul boost MT3608
Tegangan sel 18650 berubah-ubah antara 3,0 dan 4,2 V; itu tidak cukup untuk Arduino Uno, modul relay, motor servo, atau LED WS2812B yang butuh 5 V. Solusinya adalah konverter boost (step-up) yang menaikkan tegangan. Yang paling umum adalah modul MT3608: modul ini memberi output yang bisa diatur sampai 28 V dari input 2–24 V, bekerja di frekuensi switching 1,2 MHz, dan saklar internalnya punya batas arus 4 A. Dalam praktiknya kamu bisa menarik sekitar 0,5–1 A pada 5 V dengan aman dari satu 18650; lebih dari itu modul memanas dan efisiensinya turun. Kalau kamu justru perlu menurunkan tegangan, kamu memakai buck converter LM2596, yang bekerja kebalikannya.
- Sambungkan input VIN+ dan VIN- MT3608 ke OUT+ dan OUT- TP4056.
- Tanpa menyambungkan apa pun ke output dulu, pasang multimeter di antara VOUT+ dan VOUT-.
- Putar trimpot biru dengan obeng kecil untuk mengatur output ke 5,0–5,1 V. Trimpot ini multi-putaran, jadi tegangannya mungkin baru mulai berubah setelah beberapa kali putaran; terus putar dengan sabar.
- Setelah diatur, sambungkan pin 5V board-mu ke VOUT+ dan pin GND-nya ke VOUT-.
- Ukur tegangannya lagi ketika rangkaian berjalan; jika turun di bawah 4,8 V di bawah beban, perpendek kabelnya atau kurangi arus yang ditarik.
| Board | Cara memberi daya dari satu 18650 | Catatan |
|---|---|---|
| Arduino Uno / Nano | 5,0 V dari MT3608 → pin 5V | Pin 5V melewati regulator; jangan pernah lebih dari 5,5 V |
| Arduino Pro Mini 3,3 V (8 MHz) | OUT+ langsung ke pin RAW | Regulator low-dropout-nya bisa bekerja dari tegangan baterai |
| ESP32 DevKit | 5 V dari MT3608 → pin VIN (5V) | AMS1117 di board menurunkan sekitar 1 V; jangan sambungkan baterai langsung |
| Raspberry Pi Pico | OUT+ → dioda Schottky → VSYS (pin 39) | VSYS menerima 1,8–5,5 V; tidak perlu boost |
| Modul GSM SIM800L | OUT+ dan OUT- langsung | Butuh 3,4–4,4 V; ideal untuk Li-ion |
Kalau kamu mencolokkan board ke USB untuk meng-upload kode sementara output boost masih tersambung, kamu sedang menyatukan dua sumber daya. Cara paling aman adalah melepas output boost selama upload. Pin mana yang memberi daya ke Arduino, dan bagaimana caranya, dibahas lengkap di Cara Memberi Daya ke Arduino.
Sel seri tidak bisa diisi dengan TP4056
TP4056 hanya mengisi satu sel (1S) sampai 4,2 V. Paket dua sel 18650 seri (2S), yang umum di mobil robot, bertegangan nominal 7,4 V dan 8,4 V ketika penuh; sambungkan ke satu TP4056 dan paket itu tidak akan terisi, bahkan modul dan selnya bisa rusak. Memasang TP4056 terpisah untuk tiap sel juga tidak berhasil: input negatif kedua modul bertemu di catu USB yang sama, dan karena negatif modul atas duduk di positif sel bawah, sel bawah jadi korsleting. Karena tegangan akhirnya tetap di 4,2 V, TP4056 juga tidak dipakai untuk sel LiFePO4, yang pengisiannya harus berhenti di 3,6 V.
- Sambung paralel (1S2P): Dengan dua sel paralel, tegangannya tetap 3,7 V, kapasitasnya jadi dua kali lipat, dan kamu bisa mengisinya dengan TP4056. Pastikan tegangan kedua sel sama sebelum menyatukannya.
- Naikkan dengan boost: Jika kamu butuh 7–12 V, naikkan output sel paralel dengan MT3608.
- Pakai rangkaian pengisian 2S: Paket seri butuh charger CC/CV 8,4 V dan board BMS 2S dengan balancing.
- Keluarkan sel untuk diisi: Kamu bisa melepas sel-sel paket seri dari tempat baterainya dan mengisinya satu per satu di charger 18650 terpisah.
Mengukur tegangan baterai: pengkabelan pembagi tegangan
Untuk tahu seberapa penuh baterai, cukup ukur tegangannya. Tapi baterai 4,2 V tidak bisa langsung masuk ke pin analog ESP32 atau Pico, karena input ADC-nya maksimal hanya 3,3 V. Solusinya adalah pembagi tegangan dari dua resistor yang sama: 100 kΩ + 100 kΩ menurunkan 4,2 V menjadi 2,1 V dan hanya menarik 21 µA dari baterai. Nilainya bisa kamu hitung dengan kalkulator pembagi tegangan dan cara kerja rangkaiannya bisa kamu baca di rangkaian pembagi tegangan. Menambahkan kapasitor 100 nF di antara titik ukur dan GND membuat pembacaan lewat resistor bernilai besar jauh lebih stabil.
| Sambungan | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| Resistor atas (100 kΩ) | OUT+ → titik tengah | OUT+ → titik tengah | OUT+ → titik tengah |
| Resistor bawah (100 kΩ) | Titik tengah → GND | Titik tengah → GND | Titik tengah → GND |
| Titik tengah (pengukuran) | A0 | GPIO 34 (ADC1) | GP26 (ADC0) |
| Kapasitor 100 nF | Opsional | Titik tengah → GND | Titik tengah → GND |
| TP4056 OUT- | GND | GND | GND |
| Rentang ADC | 0–5 V, 10-bit | Sekitar 0–3,1 V, 12-bit | 0–3,3 V, 12-bit |
ADC Arduino Uno memakai referensi 5 V; berkat pembagi tegangan, baterai 4,2 V terbaca sebagai 2,1 V di A0 dan pembacaan 10-bit memberi nilai antara 0 dan 1023. Ketika board diberi daya dari USB atau modul boost, pin 5V mungkin tidak tepat 5,00 V; ukur dengan multimeter lalu masukkan sebagai VREF di kode, dan akurasinya akan naik dengan jelas.
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}Mengukur tegangan baterai dan menampilkan persentase dengan ESP32
ADC ESP32 tidak sepenuhnya linear dan berbeda dari satu board ke board lain. Karena itu, daripada analogRead mentah, lebih akurat memakai analogReadMilliVolts, yang menerapkan kalibrasi pabrik chip dan langsung mengembalikan milivolt. Kode di bawah ini mengambil rata-rata 16 pembacaan, mengalikannya dengan rasio pembagi untuk mendapatkan tegangan baterai, mengubahnya menjadi persentase memakai tabel, dan jika baterai turun di bawah 3,3 V, mengirim ESP32 ke deep sleep selama 10 menit.
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}| Tegangan baterai | Perkiraan isi |
|---|---|
| 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% (hentikan proyek) |
Nilai-nilai ini berlaku untuk sel yang sedang istirahat. Ketika ESP32 menarik lonjakan arus besar selama mengirim lewat Wi-Fi, tegangan baterai sedikit turun, dan selama pengisian TP4056 mendorongnya naik secara semu; jadi pembacaan paling akurat kamu dapat sebelum menyalakan Wi-Fi dan ketika charger tidak tercolok. Untuk umur baterai yang panjang, ambil pembacaan setiap beberapa menit dan pakai deep sleep ESP32 di antaranya. Ingat juga bahwa board DevKit dengan chip USB-serial dan LED power tetap menarik beberapa mA bahkan ketika tidur; untuk proyek yang harus berjalan dengan baterai selama berbulan-bulan, board berdaya rendah adalah pilihan yang lebih baik.
Mengukur baterai dengan Raspberry Pi Pico (MicroPython)
Pico beruntung di sini: pin VSYS-nya terhubung ke regulator buck-boost di board yang menerima 1,8–5,5 V, jadi Pico bisa berjalan dari satu 18650 tanpa modul boost. Sambungkan OUT+ TP4056 ke VSYS (pin 39) melalui dioda Schottky (1N5817) dan OUT- ke GND (pin 38); dioda ini mencegah 5 V dari Pico mengalir balik ke baterai ketika USB tercolok. Tegangan baterai bisa kamu ukur dengan pembagi 100k + 100k di GP26. Pada Pico standar, GP29 sudah mengukur sepertiga VSYS, tapi nilainya terbaca lebih rendah sebesar drop dioda; pada Pico W pin ini dipakai bersama chip Wi-Fi, jadi pembagi eksternal adalah jalan yang lebih aman.
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 mengembalikan nilai dari 0 sampai 65535; mengalikannya dengan 3.3 / 65535 memberi tegangan di pin, dan mengalikannya dengan rasio pembagi 2 memberi tegangan baterai. Kalau kamu baru mengenal Pico, Apa Itu Raspberry Pi Pico? memandumu menginstal MicroPython langkah demi langkah.
Ide proyek dengan TP4056 dan 18650
- Stasiun cuaca portabel: Jalankan ESP32, sensor suhu, dan layar OLED dari satu 18650, lalu tampilkan persentase baterai di pojok layar.
- Sensor tenaga surya: Sambungkan panel surya kecil 6 V yang tegangan open-circuit-nya tetap di bawah 8 V ke IN+/IN-, dan biarkan ESP32 berjalan berhari-hari dengan deep sleep.
- Kotak alarm SMS: SIM800L butuh 3,4–4,4 V, jadi modul ini bisa langsung berjalan dari 18650 dan mengirim SMS ketika mendeteksi gerakan.
- Lampu tidur isi ulang: Buat lampu yang menyala dalam gelap dengan LDR dan diisi lewat USB-C.
- Mobil robot: Isi dua 18650 paralel dengan TP4056 dan naikkan tegangan untuk motor dengan modul boost; detailnya ada di Cara Membuat Mobil Robot Arduino.
- Peringatan baterai lemah di ponselmu: Ketika baterai turun di bawah 20%, biarkan ESP32 mengirim pesan kepadamu lewat bot Telegram.
Kesalahan umum dan cara mengatasinya
| Masalah | Kemungkinan penyebab | Solusi |
|---|---|---|
| Tidak ada tegangan antara OUT+ dan OUT- | Rangkaian proteksi terkunci (over-discharge atau baterai baru pertama kali dipasang) | Colokkan USB selama beberapa detik; proteksinya akan reset |
| LED merah tetap menyala berjam-jam | Beban menarik lebih dari 100 mA atau baterainya sudah aus | Buat rangkaian load sharing dan uji baterainya sendiri |
| Kedua LED mati | Input kurang dari 4 V: kabel rusak atau adaptor lemah | Coba kabel lain dan adaptor minimal 1 A |
| Tidak mau mengisi dengan kabel USB-C ke USB-C | Beberapa modul murah tidak punya resistor CC | Pakai kabel USB-A ke USB-C |
| Modul menjadi sangat panas | Rugi daya normal dari pengisian linear pada 1 A (sekitar 1,4 W) | Turunkan arus dengan Rprog yang lebih besar dan beri board aliran udara |
| ESP32 terus restart | Baterai lemah atau brownout karena drop AMS1117 | Beri 5 V lewat boost dan periksa tegangan baterai |
| Tegangan terukur berbeda dari multimeter | Rasio pembagi atau tegangan referensi salah | Bandingkan dengan multimeter dan koreksi faktornya di kode |
Kalau disambung dengan benar, TP4056 adalah komponen murah dan andal yang membebaskan proyekmu dari kabel: sambungkan baterai ke B+ dan B-, rangkaian ke OUT+ dan OUT-, atur arus sesuai baterai, tambahkan boost untuk 5 V, dan pantau tegangan baterai lewat software. Di aplikasi BlueGrays kamu bisa menjelajahi proyek yang ramah baterai, seperti hemat baterai dengan deep sleep ESP32, voltmeter digital dengan layar LCD, dan pencatat data suhu, langkah demi langkah lengkap dengan skema rangkaian dan kode siap pakai.
Pertanyaan umum
Apa bedanya B+ dan OUT+ pada modul TP4056?
B+ dan B- hanya tempat baterai disambung; OUT+ dan OUT- adalah output yang melewati rangkaian proteksi, dan di situlah rangkaianmu disambung. Pada modul berproteksi, OUT+ sebenarnya titik yang sama dengan B+. Perbedaannya ada di sisi negatif, karena MOSFET yang memutus baterai ketika diperlukan berada di antara OUT- dan B-.
Berapa lama TP4056 mengisi 18650?
Dengan arus bawaan 1 A, 18650 2500–3000 mAh terisi dalam sekitar 3–3,5 jam. Karena arusnya turun perlahan di tahap akhir, waktunya sekitar 20 persen lebih lama daripada kapasitas dibagi arus. Kalau kamu menurunkan arusnya, waktunya bertambah dengan rasio yang sama.
Bisakah TP4056 memberi daya ke rangkaian selama mengisi?
Bisa, rangkaian yang tersambung ke terminal OUT tetap berjalan selama pengisian. Tapi jika rangkaian itu terus-menerus menarik lebih dari 100 mA, pengisian mungkin tidak pernah selesai dan baterai ditahan di 4,2 V sepanjang waktu. Untuk beban yang lebih besar, lebih baik membuat rangkaian load sharing dengan dioda Schottky dan MOSFET kanal P.
Bisakah TP4056 mengisi dua baterai 18650?
Dua sel paralel (3,7 V) bisa diisi tanpa masalah; hanya butuh waktu lebih lama. Dua sel seri (7,4 V) tidak bisa diisi dengan TP4056, karena modul ini berhenti di 4,2 V untuk satu sel. Paket seri butuh charger 2S 8,4 V dan board BMS dengan balancing.
Apa arti LED merah dan biru pada TP4056?
LED merah menunjukkan baterai sedang diisi, dan LED biru atau hijau menunjukkan pengisian sudah selesai. Ketika tidak ada baterai terpasang, LED biru menyala dan LED merah berkelip. Jika keduanya mati, modul tidak mendapat tegangan input yang cukup.
Bisakah ESP32 berjalan langsung dari baterai 18650?
Chip ESP32 bekerja di 3,3 V, jadi baterai 4,2 V tidak bisa langsung masuk ke chip. Regulator AMS1117 di board DevKit menurunkan sekitar 1 V, jadi begitu baterai turun ke 3,7 V, tegangannya tidak cukup lagi. Cara paling mudah adalah membuat 5 V dengan MT3608 dan memberikannya ke pin VIN, atau memakai regulator 3,3 V low-dropout.
Proyek untuk dibuat setelah membaca ini
Lihat semua proyek
LED Berkedip dengan ESP32
Mengajarkan penggunaan output GPIO dasar dengan ESP32. Kita membuat efek berkedip dengan menyalakan dan mematikan LED dari pin digital. Versi ESP32 dari proyek blink klasik di Arduino UNO; perintah blink dasar di lingkungan Arduino sama, tetapi susunan pin ESP32 dan level GPIO 3,3 V-nya berbeda dengan Arduino UNO.

Membaca Intensitas Cahaya dengan Modul LDR ESP32
Memantau secara real-time di Serial Monitor nilai ADC mentah modul LDR dan persentase cahaya relatif yang dihitung dari nilai acuan gelap dan terang. Persentase ini bukan pengukuran lux. Mengajarkan logika kalibrasi modul. Ideal dikerjakan sebelum Proyek 10, karena dipakai untuk menentukan nilai ambang.

Deep Sleep ESP32: Hemat Baterai (OLED + Penghitung RTC RAM)
Mode Deep Sleep ESP32 menurunkan konsumsi arus hingga ~10 µA dengan mematikan CPU dan sebagian besar periferal, sehingga sangat penting untuk perangkat IoT bertenaga baterai. Di proyek ini, kita memakai tiga sumber bangun yang berbeda: timer (15 detik), pin eksternal (EXT0, tombol GPIO 33), dan sentuhan (T0/GPIO 4). Variabel yang ditandai RTC_DATA_ATTR dipertahankan selama deep sleep; penghitung boot, penghitung bangun karena timer, dan penghitung bangun karena tombol terus dilacak.

Voltmeter Digital dengan Layar LCD
Cari tahu berapa tegangan yang diberikan baterai atau adaptor daya dengan alat ukur buatanmu sendiri. Pembagi dari dua resistor menurunkan tegangan tinggi ke tingkat yang bisa dibaca board, dan Arduin

Pencatat Data Suhu ESP32 (DHT22 + RTC DS1307 + microSD + OLED)
Buat pencatat suhu bercap waktu dengan ESP32! Baca suhu/kelembapan DHT22 setiap menit, ambil waktu sebenarnya dari RTC DS1307, dan catat ke kartu microSD sebagai CSV. OLED menampilkan suhu langsung (font besar), kelembapan, cap waktu, dan penghitung catatan. File /temp_log.csv bisa dibuka di Excel, Google Sheets, atau Python pandas; cocok untuk rumah kaca, suhu kamar, data laboratorium, penyimpanan makanan, atau sarang lebah.

HTTPClient + API Cuaca ESP32 (dengan Layar OLED SSD1306)
Di proyek ini, kita memakai ESP32 untuk melakukan panggilan REST API ke API cuaca (wttr.in) lewat internet dengan HTTPClient.h. Berbeda dengan versi LCD I2C sebelumnya, di sini kita memakai layar OLED SSD1306 (128×64), yang memungkinkan font besar, ikon vektor, dan tampilan visual yang kaya di satu layar. Tujuh ikon vektor untuk kondisi cuaca (cerah, berawan sebagian, berawan, hujan, salju, badai, berkabut) digambar ketika program berjalan (tanpa file bitmap).

Sistem Alarm Gerakan ESP32 (PIR + Buzzer + LED + Telegram)
Sistem alarm keamanan pintar yang menyalakan buzzer dan LED ketika sensor PIR mendeteksi gerakan, sekaligus mengirim notifikasi instan ke pemilik lewat Telegram. Cooldown 30 detik membatasi seberapa sering alarm berulang; mekanisme ini tidak memvalidasi deteksi PIR atau menghilangkan pemicu palsu. Cocok untuk rumah, garasi, gudang, atau ruang kerja. Dengan ESP32-CAM bisa ditambahkan notifikasi berfoto; dengan ESP32 DevKit V1 klasik, notifikasinya berupa teks.

Mobil Kendali Bluetooth dengan L298N
Jadikan ponselmu remote dan kendarai mobil robotmu sendiri. Arduino menerima perintah dari aplikasi remote control di ponselmu lewat modul Bluetooth dan memutar roda dengan driver motor; mobil maju, m
Artikel lainnya
Aplikasi BlueGrays
Rakit rangkaian ini langkah demi langkah di ponselmu
Skema pengkabelan, kode, dan daftar komponen dalam satu layar. 200+ proyek Arduino, ESP32, dan Pico siap dibuat.
Pindai dengan ponselmu
Arahkan kamera ke kode ini dan toko aplikasi di ponselmu akan terbuka.
atau buka toko aplikasi

