Подключение TP4056: модуль зарядки 18650, защита и ESP32
Как подключить модуль зарядки TP4056: пины B+/B- и OUT+/OUT-, версия с защитой DW01, значение светодиодов, настройка тока резистором Rprog, 5 V через MT3608 и измерение заряда аккумулятора на ESP32.
Подключение TP4056 — самый дешёвый способ безопасно заряжать от USB аккумулятор 18650 или LiPo из одной ячейки и питать от него же проект на Arduino, ESP32 или Raspberry Pi Pico: USB-кабель подключается ко входу модуля, аккумулятор — к B+ и B-, а твоя схема на модулях с защитой — к OUT+ и OUT-. Модуль заряжает аккумулятор до 4,2 V методом постоянного тока / постоянного напряжения, автоматически прекращает заряд, когда аккумулятор полон, и показывает состояние двумя светодиодами. Эта плата размером с ноготь — сердце проектов, которые работают вдали от розетки: портативных метеостанций, роботов, аккумуляторных ламп и беспроводных датчиков.
Но у этого дешёвого модуля есть несколько ловушек: версии с защитой и без защиты подключаются по-разному, ток заряда по умолчанию 1 A слишком велик для маленьких аккумуляторов, питание схемы во время заряда может не дать заряду завершиться, а два последовательно соединённых аккумулятора этим модулем не зарядить никогда. В этом руководстве шаг за шагом разберём, за что отвечает каждый пин, что означают светодиоды, как задать ток заряда резистором Rprog, как добавить повышающий модуль MT3608 для плат, которым нужно 5 V, и как измерить напряжение аккумулятора на ESP32 и перевести его в проценты.

Что такое TP4056 и как она работает?
TP4056 — это линейная микросхема зарядки для одноячеечных литий-ионных (Li-ion) и литий-полимерных (LiPo) аккумуляторов. Литиевые аккумуляторы нельзя заряжать любым попавшимся адаптером: им нужен определённый профиль заряда, и TP4056 выдерживает его полностью самостоятельно. Если напряжение аккумулятора ниже 2,9 V, она сначала бережно заряжает его в фазе предзаряда (trickle) током около десятой части заданного, то есть примерно 130 mA при настройке 1 A. Когда напряжение превышает 2,9 V, она переходит в фазу постоянного тока (CC) и отдаёт весь заданный ток. Когда аккумулятор достигает 4,2 V, начинается фаза постоянного напряжения (CV): напряжение держится на уровне 4,2 V, а ток постепенно падает. Заряд заканчивается, когда ток снижается до десятой части заданного значения (100 mA при настройке 1 A). Если позже напряжение аккумулятора опускается примерно до 4,05 V, модуль автоматически начинает заряд заново. При сильном нагреве микросхема сама снижает ток заряда, поэтому тёплый модуль во время заряда — это нормально.
| Параметр | Значение |
|---|---|
| Входное напряжение | 4,0–8 V (рекомендуется 5 V; micro USB или USB-C) |
| Напряжение окончания заряда | 4,2 V (±1,5%) |
| Ток заряда | До 1 A; на модулях по умолчанию 1 A (Rprog = 1,2 kΩ) |
| Предзаряд | Около 1/10 заданного тока при напряжении ниже 2,9 V |
| Окончание заряда | Когда ток падает до 1/10 заданного значения (C/10) |
| Повторный заряд | Автоматически, когда напряжение аккумулятора падает примерно до 4,05 V |
| Выходы состояния | Светодиоды CHRG (идёт заряд) и STDBY (заряжен) |
| Подходящие аккумуляторы | Только одноячеечные (1S) Li-ion и LiPo на 3,7 V; не LiFePO4 |
Модули TP4056 с защитой (DW01) и без защиты
Под одним и тем же названием продаются две разные платы. На модуле без защиты стоит только микросхема TP4056 и есть четыре точки подключения: IN+/IN- и BAT+/BAT-. Такой модуль заряжает аккумулятор, но ничего не контролирует, пока аккумулятор разряжается. На модуле с защитой дополнительно стоят микросхема защиты DW01A и сдвоенный MOSFET 8205A, а площадок шесть: IN+/IN-, B+/B- и OUT+/OUT-. Схема защиты стоит, как выключатель, между минусом аккумулятора и минусом твоей схемы (OUT-). При переразряде или перезаряде аккумулятора, при слишком большом токе нагрузки или при коротком замыкании на выходе она размыкает этот выключатель и отключает аккумулятор от схемы.
| Параметр | Модуль без защиты | Модуль с защитой (DW01A + 8205A) |
|---|---|---|
| Площадки | IN+, IN-, BAT+, BAT- | IN+, IN-, B+, B-, OUT+, OUT- |
| Защита от перезаряда | Только предел 4,2 V самой TP4056 | Дополнительно отключает примерно при 4,25–4,3 V |
| Защита от переразряда | Нет | Отключает примерно при 2,4 V, снова подключает около 3,0 V |
| Перегрузка по току и короткое замыкание | Нет | Отключает примерно при 3 A и при коротком замыкании |
| Когда выбирать | Если у аккумулятора есть своя схема защиты | С голыми ячейками без защиты, то есть почти в любом проекте |
Аккумулятор 18650: напряжения, которые нужно знать
Название 18650 происходит от размеров ячейки: 18 мм в диаметре и 65 мм в длину. Номинальное напряжение — 3,6–3,7 V, но это среднее значение: полностью заряженная ячейка держит 4,2 V, а разряженная — около 3,0 V. Реальная ёмкость — от 2000 до 3500 mAh; ячейки с надписью 6800 или 9900 mAh — подделки, и часто они не отдают даже 1000 mAh. Защищённые 18650 со встроенной схемой защиты на несколько миллиметров длиннее и могут не поместиться в некоторые держатели. Сколько проект проработает от одного аккумулятора, можно посчитать в калькуляторе времени работы от батареи, а про единицы ёмкости читай в статье mAh и Wh: что это такое.
| Состояние | Напряжение | Примечание |
|---|---|---|
| Полностью заряжен | 4,20 V | Здесь TP4056 завершает заряд |
| Номинальное | 3,6–3,7 V | Значение на этикетке, среднее рабочее напряжение |
| Считается разряженным | 3,0–3,3 V | Если останавливать проект на этом уровне, аккумулятор прослужит дольше |
| Отключение защитой | 2,4–2,5 V | DW01A отключает выход; лучше не разряжать так глубоко |
| Опасная зона | Ниже 2,0 V | Не заряжай ячейку, которая долго пролежала на таком уровне; замени её |

Подключение TP4056: пины IN, B+/B- и OUT+/OUT-
| Площадка | Куда подключается | Примечание |
|---|---|---|
| Вход USB | Адаптер на 5 V или компьютер | Micro USB или USB-C; самый простой способ |
| IN+ / IN- | Плюс и минус внешнего источника 5 V | Для питания через пайку вместо USB; не используй оба входа одновременно |
| B+ / B- | Плюс и минус аккумулятора 18650 | Сюда подключается только аккумулятор |
| OUT+ / OUT- | Плюс и минус твоей схемы (нагрузки) | На модуле с защитой нагрузка всегда подключается сюда |
| BAT+ / BAT- (без защиты) | Аккумулятор и нагрузка вместе | Защиты нет; нагрузка подключается параллельно аккумулятору |
- Припаяй красный провод держателя аккумулятора к B+, а чёрный — к B-. Аккумулятор пока не вставляй.
- Припаяй плюсовой провод питания своей схемы к OUT+, а минусовой (GND) — к OUT-. Если питается плата, которой нужно 5 V, между ними ставится повышающий модуль MT3608.
- Проверь пайку и мультиметром убедись, что между B+ и B- нет короткого замыкания.
- Вставь аккумулятор, соблюдая полярность. На некоторых модулях с защитой выход сначала может быть выключен; если один раз подключить USB, защита сбрасывается и выход включается.
- Подключи USB-кабель: если горит красный светодиод, заряд идёт. Когда аккумулятор зарядится, красный светодиод погаснет, а загорится синий или зелёный.
- Когда мультиметр показывает между OUT+ и OUT- напряжение аккумулятора (3,0–4,2 V), можно включать схему.
Что означают светодиоды TP4056?
| Красный светодиод (CHRG) | Синий или зелёный светодиод (STDBY) | Значение |
|---|---|---|
| Горит | Не горит | Идёт заряд |
| Не горит | Горит | Заряд завершён (4,2 V) |
| Мигает или мерцает | Горит | Аккумулятор не вставлен или плохой контакт |
| Не горит | Не горит | На входе меньше 4 V или нет питания по USB |
| Горит часами | Не горит | Нагрузка мешает завершению заряда, или аккумулятор изношен |
Когда аккумулятор не вставлен, синий светодиод горит, а красный мерцает — это нормально: модуль постоянно заряжает и разряжает конденсатор на пустых клеммах аккумулятора. Время заряда можно грубо оценить по формуле ёмкость / ток × 1,2. Ячейка на 2600 mAh заряжается током 1 A примерно за 3 часа; поскольку на последнем этапе ток постепенно падает, заряд длится чуть дольше, чем показывает простое деление.
Настройка тока заряда: резистор Rprog
Ток заряда задаёт один резистор между выводом PROG (вывод 2) микросхемы TP4056 и GND. На большинстве модулей этот резистор обозначен R3 и несёт код 122, то есть 1,2 kΩ, что даёт 1 A. Расшифровать такую маркировку поможет утилита SMD-кодов. Формула примерно такая: I (mA) = 1200 / Rprog (kΩ). Чтобы изменить ток, выпаяй SMD-резистор и припаяй резистор нужного номинала; если SMD-резистор подходящего размера не найти, можно припаять к двум площадкам и небольшой выводной резистор.
| Rprog | Ток заряда | Подходящий аккумулятор |
|---|---|---|
| 10 kΩ | 130 mA | Маленький LiPo на 200–300 mAh |
| 5 kΩ | 250 mA | LiPo на 300–500 mAh |
| 4 kΩ | 300 mA | LiPo на 500–600 mAh |
| 3 kΩ | 400 mA | Около 800 mAh |
| 2 kΩ | 580 mA | 1000–1200 mAh |
| 1,5 kΩ | 780 mA | 1500 mAh и больше |
| 1,2 kΩ | 1000 mA | 18650 на 2000 mAh и больше (по умолчанию на модуле) |
Общее правило — держать ток заряда около половины ёмкости аккумулятора (0,5C): для LiPo на 500 mAh подходит 250 mA, для 18650 на 2600 mAh — 1 A. Учитывай и нагрев: поскольку TP4056 линейная, разница напряжений между входом и аккумулятором превращается в тепло. При заряде ячейки на 3,6 V током 1 A от входа 5 V микросхема рассеивает (5 − 3,6) × 1 = 1,4 W; поэтому модуль сильно греется и может автоматически снижать ток. Такие расчёты мощности можно делать и в калькуляторе закона Ома. USB-порт 2.0 компьютера даёт только 500 mA, поэтому если аккумулятор часто заряжается от компьютера, имеет смысл снизить ток примерно до 500 mA.
Питание схемы во время заряда (разделение нагрузки)
Если нужно, чтобы проект продолжал работать при подключённом USB, проще всего оставить схему на OUT+ и OUT-: тогда TP4056 одновременно заряжает аккумулятор и питает схему. Но микросхема не может отличить ток, идущий в аккумулятор, от тока, идущего в схему. Если схема постоянно потребляет больше 100 mA, суммарный ток никогда не опускается ниже порога окончания заряда, заряд не завершается, а аккумулятор часами держится на 4,2 V, что сокращает его срок службы. Если схема потребляет около 1 A, аккумулятор даже не зарядится. С ESP32 в глубоком сне или небольшими схемами, которые потребляют несколько mA, прямое подключение на практике проблем не создаёт; для постоянно работающих Wi-Fi-проектов, моторов и светодиодных лент собери схему разделения нагрузки (load sharing).
| Деталь | Подключение | Назначение |
|---|---|---|
| Диод Шоттки (1N5817, SS14) | Анод — к USB 5 V (IN+), катод — к плюсовому входу схемы | Питает схему напрямую, когда есть USB |
| P-канальный MOSFET (AO3401, DMG2305) | Сток — к аккумулятору (OUT+), исток — к плюсовому входу схемы | Подключает аккумулятор к схеме, когда USB нет |
| Подключение затвора MOSFET | Напрямую к USB 5 V (IN+) | При подключённом USB MOSFET закрыт, и аккумулятор только заряжается |
| Резистор 100 kΩ | Между затвором MOSFET и GND | Когда USB отключён, подтягивает затвор к 0 V, и MOSFET открывается |
Нужно 5 V? Добавляем повышающий модуль MT3608
Напряжение 18650 гуляет между 3,0 и 4,2 V; для Arduino Uno, модулей реле, сервоприводов или светодиодов WS2812B, которым нужно 5 V, этого мало. Решение — повышающий преобразователь (boost, step-up), который поднимает напряжение. Самый распространённый — модуль MT3608: от входа 2–24 V он даёт регулируемый выход до 28 V, работает на частоте 1,2 MHz, а у его встроенного ключа ограничение тока 4 A. На практике от одного 18650 можно безопасно брать около 0,5–1 A при 5 V; при большем токе модуль греется и КПД падает. А когда напряжение нужно, наоборот, понизить, используют понижающий модуль LM2596, который делает ровно обратное.
- Подключи входы VIN+ и VIN- модуля MT3608 к OUT+ и OUT- модуля TP4056.
- Пока ничего не подключая к выходу, подключи мультиметр между VOUT+ и VOUT-.
- Вращая маленькой отвёрткой синий подстроечный резистор, выставь на выходе 5,0–5,1 V. Резистор многооборотный, поэтому напряжение может начать меняться только через несколько оборотов; терпеливо продолжай крутить.
- Когда напряжение выставлено, подключи пин 5V своей платы к VOUT+, а пин GND — к VOUT-.
- Ещё раз измерь напряжение при работающей схеме; если под нагрузкой оно падает ниже 4,8 V, укороти провода или уменьши потребляемый ток.
| Плата | Как питать от одного 18650 | Примечание |
|---|---|---|
| Arduino Uno / Nano | 5,0 V от MT3608 → пин 5V | Пин 5V идёт в обход стабилизатора; никогда не превышай 5,5 V |
| Arduino Pro Mini 3,3 V (8 MHz) | OUT+ напрямую к пину RAW | Её LDO-стабилизатор может работать от напряжения аккумулятора |
| ESP32 DevKit | 5 V от MT3608 → пин VIN (5V) | Стабилизатор AMS1117 на плате теряет около 1 V; не подключай аккумулятор напрямую |
| Raspberry Pi Pico | OUT+ → диод Шоттки → VSYS (пин 39) | VSYS принимает 1,8–5,5 V; повышающий модуль не нужен |
| GSM-модуль SIM800L | OUT+ и OUT- напрямую | Нужно 3,4–4,4 V; идеально для Li-ion |
Если подключить плату к USB для загрузки кода, когда выход повышающего модуля всё ещё подключён, два источника питания окажутся соединены между собой. Безопаснее всего на время загрузки отключать выход повышающего модуля. Через какой пин и как питать Arduino, подробно разобрано в статье Как питать Arduino.
Последовательно соединённые аккумуляторы TP4056 не заряжает
TP4056 заряжает до 4,2 V только одну ячейку (1S). Сборка из двух последовательных 18650 (2S), частая в роботах-машинках, имеет номинальное напряжение 7,4 V и 8,4 V в заряженном состоянии; если подключить её к одному TP4056, она не зарядится, а модуль и ячейки могут повредиться. Поставить отдельный TP4056 на каждую ячейку тоже не получится: отрицательные входы модулей соединяются в одном источнике USB, а так как минус верхнего модуля сидит на плюсе нижней ячейки, нижняя ячейка оказывается закорочена. Поскольку напряжение окончания заряда зафиксировано на 4,2 V, TP4056 не используют и с ячейками LiFePO4, заряд которых должен заканчиваться на 3,6 V.
- Соедини параллельно (1S2P): при параллельном соединении двух ячеек напряжение остаётся 3,7 V, ёмкость удваивается, и заряжать их можно с TP4056. Перед соединением убедись, что напряжения ячеек одинаковые.
- Повысь напряжение: если нужно 7–12 V, подними выходное напряжение параллельных ячеек модулем MT3608.
- Используй схему заряда 2S: для последовательной сборки нужны зарядное устройство CC/CV на 8,4 V и плата BMS 2S с балансировкой.
- Вынимай ячейки для заряда: ячейки последовательной сборки можно вынуть из держателя и зарядить по одной в отдельном зарядном устройстве для 18650.
Измерение напряжения аккумулятора: подключение делителя напряжения
Чтобы знать, насколько заряжен аккумулятор, достаточно измерить его напряжение. Но аккумулятор на 4,2 V нельзя подключить напрямую к аналоговому пину ESP32 или Pico: их входы АЦП выдерживают максимум 3,3 V. Решение — делитель напряжения из двух одинаковых резисторов: 100 kΩ + 100 kΩ понижают 4,2 V до 2,1 V и берут от аккумулятора всего 21 µA. Номиналы можно рассчитать в утилите делителя напряжения, а как работает схема, читай в статье Делитель напряжения. Конденсатор 100 nF между точкой измерения и GND заметно успокаивает показания, снятые через высокоомные резисторы.
| Подключение | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| Верхний резистор (100 kΩ) | OUT+ → средняя точка | OUT+ → средняя точка | OUT+ → средняя точка |
| Нижний резистор (100 kΩ) | Средняя точка → GND | Средняя точка → GND | Средняя точка → GND |
| Средняя точка (измерение) | A0 | GPIO 34 (ADC1) | GP26 (ADC0) |
| Конденсатор 100 nF | По желанию | Средняя точка → GND | Средняя точка → GND |
| TP4056 OUT- | GND | GND | GND |
| Диапазон АЦП | 0–5 V, 10 бит | Около 0–3,1 V, 12 бит | 0–3,3 V, 12 бит |
АЦП Arduino Uno работает с опорным напряжением 5 V; благодаря делителю аккумулятор на 4,2 V выглядит на A0 как 2,1 V, а 10-битное измерение даёт значение от 0 до 1023. При питании платы от USB или повышающего модуля на пине 5V может быть не ровно 5,00 V; измерь это напряжение мультиметром и впиши его в код как VREF — точность заметно вырастет.
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}Измерение напряжения аккумулятора и вывод процента заряда на ESP32
АЦП ESP32 не идеально линеен и отличается от платы к плате. Поэтому вместо «сырого» analogRead точнее использовать analogReadMilliVolts: эта функция учитывает заводскую калибровку микросхемы и сразу возвращает милливольты. Код ниже усредняет 16 измерений, умножает результат на коэффициент делителя, чтобы получить напряжение аккумулятора, переводит его в проценты по таблице и, если напряжение аккумулятора опускается ниже 3,3 V, отправляет ESP32 в глубокий сон на 10 минут.
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}| Напряжение аккумулятора | Примерный заряд |
|---|---|
| 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% (останови проект) |
Эти значения относятся к ячейке в состоянии покоя. Когда ESP32 при передаче по Wi-Fi потребляет короткие импульсы большого тока, напряжение аккумулятора немного проседает, а во время заряда TP4056 искусственно его завышает; поэтому самые точные показания получаются до включения Wi-Fi и при отключённой зарядке. Для долгой работы от аккумулятора делай измерение раз в несколько минут, а между измерениями используй глубокий сон ESP32. И учти, что платы DevKit с USB-UART-преобразователем и светодиодом питания даже во сне потребляют несколько mA; для проектов, которые должны месяцами работать от аккумулятора, лучше выбрать платы с низким энергопотреблением.
Измерение аккумулятора на Raspberry Pi Pico (MicroPython)
Pico здесь повезло: её пин VSYS питает встроенный понижающе-повышающий стабилизатор, который принимает 1,8–5,5 V, так что плата работает от одного 18650 без повышающего модуля. Подключи OUT+ модуля TP4056 к VSYS (пин 39) через диод Шоттки (1N5817), а OUT- — к GND (пин 38); диод не даёт 5 V от Pico стекать обратно в аккумулятор при подключённом USB. Напряжение аккумулятора можно измерять делителем 100k + 100k на GP26. На обычной Pico пин GP29 уже измеряет треть VSYS, но это значение занижено на величину падения на диоде; на Pico W этот пин общий с Wi-Fi-микросхемой, поэтому внешний делитель надёжнее.
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 возвращает значение от 0 до 65535; умножение на 3.3 / 65535 даёт напряжение на пине, а умножение на коэффициент делителя 2 — напряжение аккумулятора. Если Pico в новинку, статья Что такое Raspberry Pi Pico? пошагово объясняет установку MicroPython.
Идеи проектов с TP4056 и 18650
- Портативная метеостанция: запитай ESP32, датчик температуры и OLED-дисплей от одного 18650 и выводи процент заряда в углу экрана.
- Датчик на солнечной энергии: подключи к IN+/IN- небольшую солнечную панель на 6 V, напряжение холостого хода которой не превышает 8 V, и ESP32 с глубоким сном будет работать днями.
- SMS-сигнализация в коробке: SIM800L нужно 3,4–4,4 V, поэтому модуль питается прямо от 18650 и отправляет SMS, когда обнаруживает движение.
- Аккумуляторный ночник: собери лампу, которая включается в темноте благодаря фоторезистору (LDR) и заряжается через USB-C.
- Робот-машинка: заряжай два параллельных 18650 модулем TP4056, а напряжение для моторов поднимай повышающим модулем; подробности в статье Как собрать робот-машинку на Arduino.
- Уведомление о разряде на телефон: когда заряд падает ниже 20%, пусть ESP32 пишет тебе через Telegram-бота.
Частые ошибки и как их исправить
| Проблема | Вероятная причина | Решение |
|---|---|---|
| Нет напряжения между OUT+ и OUT- | Схема защиты защёлкнулась (переразряд или первая установка аккумулятора) | Подключи USB на несколько секунд; защита сбросится |
| Красный светодиод горит часами | Нагрузка потребляет больше 100 mA или аккумулятор изношен | Собери схему разделения нагрузки и проверь аккумулятор отдельно |
| Оба светодиода не горят | На входе меньше 4 V: неисправный кабель или слабый адаптер | Попробуй другой кабель и адаптер не менее чем на 1 A |
| Не заряжается кабелем USB-C — USB-C | На некоторых дешёвых модулях нет резисторов CC | Используй кабель USB-A — USB-C |
| Модуль сильно греется | Обычные потери линейного заряда при 1 A (около 1,4 W) | Снизь ток, увеличив Rprog, и обеспечь плате обдув |
| ESP32 постоянно перезагружается | Слабый аккумулятор или просадка питания (brownout) из-за падения на AMS1117 | Подай 5 V через повышающий модуль и проверь напряжение аккумулятора |
| Измеренное напряжение отличается от показаний мультиметра | Неверный коэффициент делителя или опорное напряжение | Сравни с мультиметром и поправь коэффициент в коде |
При правильном подключении TP4056 — надёжная и дешёвая деталь, которая освобождает проекты от провода: подключи аккумулятор к B+ и B-, схему — к OUT+ и OUT-, настрой ток под аккумулятор, добавь повышающий модуль для 5 V и следи за напряжением аккумулятора программно. В приложении BlueGrays можно пошагово изучить проекты, удобные для работы от аккумулятора, — например, энергосбережение с глубоким сном ESP32, цифровой вольтметр с LCD и регистратор температуры — со схемами подключения и готовым кодом.
Частые вопросы
Чем отличаются B+ и OUT+ на модуле TP4056?
B+ и B- служат только для подключения аккумулятора; OUT+ и OUT- — это выход, проходящий через схему защиты, и именно сюда подключается твоя схема. На модуле с защитой OUT+ на самом деле та же точка, что и B+. Разница на минусовой стороне: между OUT- и B- стоят MOSFET, которые при необходимости отключают аккумулятор.
За сколько TP4056 заряжает 18650?
При токе по умолчанию 1 A аккумулятор 18650 на 2500–3000 mAh заряжается примерно за 3–3,5 часа. Поскольку на последнем этапе ток постепенно падает, заряд длится примерно на 20% дольше, чем получается при делении ёмкости на ток. Если ток уменьшен, время растёт в той же пропорции.
Может ли TP4056 питать схему во время заряда?
Да, схема, подключённая к клеммам OUT, продолжает работать во время заряда. Но если она постоянно потребляет больше 100 mA, заряд может так и не завершиться, а аккумулятор всё время будет держаться на 4,2 V. Для более мощной нагрузки лучше собрать схему разделения нагрузки на диоде Шоттки и P-канальном MOSFET.
Можно ли с TP4056 зарядить два аккумулятора 18650?
Два параллельно соединённых аккумулятора (3,7 V) заряжаются без проблем, просто дольше. Два последовательных (7,4 V) TP4056 зарядить не может, потому что модуль останавливается на 4,2 V для одной ячейки. Для последовательных сборок нужны зарядное устройство 2S на 8,4 V и плата BMS с балансировкой.
Что означают красный и синий светодиоды на TP4056?
Красный светодиод показывает, что аккумулятор заряжается, а синий или зелёный — что заряд завершён. Без аккумулятора синий светодиод горит, а красный мерцает. Если оба не горят, на модуль не приходит достаточное входное напряжение.
Можно ли питать ESP32 напрямую от аккумулятора 18650?
Микросхема ESP32 работает от 3,3 V, поэтому аккумулятор на 4,2 V нельзя подключать прямо к ней. Стабилизатор AMS1117 на платах DevKit теряет около 1 V, так что, когда аккумулятор разряжается до 3,7 V, напряжения уже не хватает. Проще всего получить 5 V модулем MT3608 и подать их на пин VIN или использовать LDO-стабилизатор на 3,3 V.
Что собрать после прочтения
Все проекты
Мигающий светодиод на ESP32
Учит базовой работе с выходами GPIO на ESP32. Эффект мигания получается включением и выключением светодиода с цифрового пина. Это ESP32-версия классического проекта мигания на Arduino UNO; базовые команды мигания в среде Arduino те же, но расположение пинов ESP32 и уровни GPIO 3,3 V отличаются от Arduino UNO.

Измерение освещённости модулем LDR на ESP32
Наблюдение в мониторе порта в реальном времени за сырым значением ADC модуля LDR и относительным процентом освещённости, вычисленным по опорным значениям темноты и света. Этот процент — не измерение в люксах. Учит логике калибровки модуля. Идеально выполнить его перед проектом 10, потому что он нужен для определения порога.

Глубокий сон ESP32: экономия батареи (OLED + счётчик в RTC RAM)
Режим глубокого сна (Deep Sleep) у ESP32 снижает потребление до ~10 µA, выключая процессор и большую часть периферии, — это важно для IoT-устройств на батарейках. В этом проекте используются три источника пробуждения: таймер (15 секунд), внешний пин (EXT0 — кнопка GPIO 33) и касание (T0/GPIO 4). Переменные с RTC_DATA_ATTR сохраняются во время глубокого сна — счётчики загрузок, пробуждений по таймеру и по кнопке ведутся непрерывно.

Цифровой вольтметр с LCD-дисплеем
Узнай, какое напряжение даёт батарейка или блок питания, с помощью измерителя, собранного своими руками. Делитель из двух резисторов понижает высокое напряжение до уровня, который может прочитать плат

Регистратор температуры на ESP32 (DHT22 + DS1307 RTC + microSD + OLED)
Собери на ESP32 регистратор температуры с отметками времени! Каждую минуту читай температуру и влажность с DHT22, бери реальное время из DS1307 RTC и записывай всё на карту microSD в формате CSV. OLED показывает текущую температуру (крупным шрифтом), влажность в процентах, время и счётчик записей. Файл /temp_log.csv на SD-карте открывается в Excel, Google Sheets или Python pandas — идеально для теплиц, комнат, лабораторий и хранения продуктов.

ESP32 HTTPClient + API погоды (с OLED-дисплеем SSD1306)
В этом проекте ESP32 через HTTPClient.h делает вызов REST API к сервису погоды (wttr.in). В отличие от прошлой версии с I2C LCD, здесь используется OLED SSD1306 (128×64), который позволяет крупные шрифты, векторные значки и богатую картинку на одном экране. Семь векторных значков погоды (солнечно, переменная облачность, облачно, дождь, снег, гроза, туман) рисуются во время работы (растровые файлы не нужны). Температура выводится крупными цифрами.

Сигнализация движения на ESP32 (PIR + зуммер + светодиод + Telegram)
Умная охранная сигнализация, которая при обнаружении движения PIR-датчиком включает зуммер и светодиод и одновременно сразу отправляет владельцу уведомление в Telegram. В ней есть 30-секундная пауза, ограничивающая частоту повторных тревог; этот механизм не проверяет срабатывания PIR и не устраняет ложные тревоги. Подходит для дома, гаража, склада или мастерской. С ESP32-CAM можно добавить уведомления с фото, а с обычной ESP32 DevKit V1 приходят текстовые.

Машинка на L298N с управлением по Bluetooth
Преврати телефон в пульт и управляй своей машинкой-роботом. Arduino получает команды из приложения-пульта на телефоне через Bluetooth-модуль и вращает колёса через драйвер моторов; машинка едет вперёд
Другие статьи
Приложение BlueGrays
Собери эту схему шаг за шагом в телефоне
Схема подключения, код и список деталей на одном экране. 200+ проектов на Arduino, ESP32 и Pico готовы к сборке.
Наведи камеру телефона
Наведи камеру на код — откроется магазин приложений на телефоне.
или открыть магазин

