Компоненты · 13 мин чтения

Подключение 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 и перевести его в проценты.

Модуль зарядки 18650 на TP4056 с защитой и входом USB-C
Модуль TP4056 с защитой: слева вход USB-C и площадки IN+/IN-, справа площадки B+/B- (аккумулятор) и OUT+/OUT- (выход). Большая микросхема в центре — TP4056, маленькие рядом с ней — микросхема защиты DW01A и сдвоенный MOSFET 8205A.

Что такое 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 и при коротком замыкании
Когда выбиратьЕсли у аккумулятора есть своя схема защитыС голыми ячейками без защиты, то есть почти в любом проекте
Понять, какой модуль в руках, легко: если на стороне аккумулятора шесть площадок (B+, B-, OUT+, OUT-), а рядом с TP4056 ещё две маленькие микросхемы, модуль с защитой. Если подписаны только BAT+ и BAT-, модуль без защиты. Разница в цене мизерная, так что всегда бери версию с защитой.

Аккумулятор 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 VDW01A отключает выход; лучше не разряжать так глубоко
Опасная зонаНиже 2,0 VНе заряжай ячейку, которая долго пролежала на таком уровне; замени её
Литий-ионный аккумулятор 18650
Литий-ионный аккумулятор 18650: диаметр 18 мм, длина 65 мм, номинальное напряжение 3,7 V. Подключай его через держатель или никелевую ленту, приваренную точечной сваркой.
Никогда не паяй паяльником прямо к ячейке 18650: нагрев повреждает её изнутри и опасен. Используй держатель или никелевую ленту, приваренную точечной сваркой. Не используй смятые, вздутые ячейки или ячейки с порванной оболочкой, заряжай на негорючей поверхности и никогда не заряжай при температуре ниже 0 °C. На готовых модулях вывод TEMP соединён с GND, поэтому температура аккумулятора не контролируется; время от времени трогай ячейку во время заряда, чтобы убедиться, что она не нагревается.

Подключение 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- (без защиты)Аккумулятор и нагрузка вместеЗащиты нет; нагрузка подключается параллельно аккумулятору
  1. Припаяй красный провод держателя аккумулятора к B+, а чёрный — к B-. Аккумулятор пока не вставляй.
  2. Припаяй плюсовой провод питания своей схемы к OUT+, а минусовой (GND) — к OUT-. Если питается плата, которой нужно 5 V, между ними ставится повышающий модуль MT3608.
  3. Проверь пайку и мультиметром убедись, что между B+ и B- нет короткого замыкания.
  4. Вставь аккумулятор, соблюдая полярность. На некоторых модулях с защитой выход сначала может быть выключен; если один раз подключить USB, защита сбрасывается и выход включается.
  5. Подключи USB-кабель: если горит красный светодиод, заряд идёт. Когда аккумулятор зарядится, красный светодиод погаснет, а загорится синий или зелёный.
  6. Когда мультиметр показывает между OUT+ и OUT- напряжение аккумулятора (3,0–4,2 V), можно включать схему.
Самая частая ошибка — подключить схему к B+ и B- на модуле с защитой. При таком подключении схема работает, но идёт в обход защиты DW01A: аккумулятор может разрядиться ниже 2 V, а при коротком замыкании ток ничем не ограничен. Если вставить аккумулятор наоборот, модуль мгновенно сгорит: у TP4056 нет защиты от переполюсовки.

Что означают светодиоды 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 mALiPo на 300–500 mAh
4 kΩ300 mALiPo на 500–600 mAh
3 kΩ400 mAОколо 800 mAh
2 kΩ580 mA1000–1200 mAh
1,5 kΩ780 mA1500 mAh и больше
1,2 kΩ1000 mA18650 на 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 открывается
В таком варианте при подключённом USB нагрузка питается примерно от 4,7 V через диод, а TP4056 только заряжает аккумулятор, поэтому заряд завершается вовремя. Когда USB отключается, MOSFET очень быстро открывается, и схема почти без перерыва продолжает работать от аккумулятора. Как работают MOSFET, читай в статье MOSFET и Arduino, а как выбрать диод — в статье Что такое диод?.

Нужно 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, который делает ровно обратное.

  1. Подключи входы VIN+ и VIN- модуля MT3608 к OUT+ и OUT- модуля TP4056.
  2. Пока ничего не подключая к выходу, подключи мультиметр между VOUT+ и VOUT-.
  3. Вращая маленькой отвёрткой синий подстроечный резистор, выставь на выходе 5,0–5,1 V. Резистор многооборотный, поэтому напряжение может начать меняться только через несколько оборотов; терпеливо продолжай крутить.
  4. Когда напряжение выставлено, подключи пин 5V своей платы к VOUT+, а пин GND — к VOUT-.
  5. Ещё раз измерь напряжение при работающей схеме; если под нагрузкой оно падает ниже 4,8 V, укороти провода или уменьши потребляемый ток.
ПлатаКак питать от одного 18650Примечание
Arduino Uno / Nano5,0 V от MT3608 → пин 5VПин 5V идёт в обход стабилизатора; никогда не превышай 5,5 V
Arduino Pro Mini 3,3 V (8 MHz)OUT+ напрямую к пину RAWЕё LDO-стабилизатор может работать от напряжения аккумулятора
ESP32 DevKit5 V от MT3608 → пин VIN (5V)Стабилизатор AMS1117 на плате теряет около 1 V; не подключай аккумулятор напрямую
Raspberry Pi PicoOUT+ → диод Шоттки → VSYS (пин 39)VSYS принимает 1,8–5,5 V; повышающий модуль не нужен
GSM-модуль SIM800LOUT+ и OUT- напрямуюНужно 3,4–4,4 V; идеально для Li-ion
Никогда не подключай MT3608 к плате до настройки: модули приходят с завода с неизвестным выходным напряжением, часто намного выше 5 V, и оно может мгновенно сжечь Arduino или ESP32. Кроме того, у повышающих преобразователей нет отключения выхода: даже когда модуль не работает, напряжение аккумулятора проходит на выход через катушку индуктивности и диод. Чтобы по-настоящему выключать проект, поставь выключатель между аккумулятором и модулем.

Если подключить плату к 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 UnoESP32Raspberry Pi Pico
Верхний резистор (100 kΩ)OUT+ → средняя точкаOUT+ → средняя точкаOUT+ → средняя точка
Нижний резистор (100 kΩ)Средняя точка → GNDСредняя точка → GNDСредняя точка → GND
Средняя точка (измерение)A0GPIO 34 (ADC1)GP26 (ADC0)
Конденсатор 100 nFПо желаниюСредняя точка → GNDСредняя точка → GND
TP4056 OUT-GNDGNDGND
Диапазон АЦП0–5 V, 10 битОколо 0–3,1 V, 12 бит0–3,3 V, 12 бит
На ESP32 для измерения аккумулятора используй только пины ADC1 (GPIO 32–39). Пины ADC2 нельзя читать при включённом Wi-Fi: они возвращают неверные значения. GPIO 34–39 работают только как входы и идеально подходят именно для этой задачи.

АЦП Arduino Uno работает с опорным напряжением 5 V; благодаря делителю аккумулятор на 4,2 V выглядит на A0 как 2,1 V, а 10-битное измерение даёт значение от 0 до 1023. При питании платы от USB или повышающего модуля на пине 5V может быть не ровно 5,00 V; измерь это напряжение мультиметром и впиши его в код как VREF — точность заметно вырастет.

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}

Измерение напряжения аккумулятора и вывод процента заряда на ESP32

АЦП ESP32 не идеально линеен и отличается от платы к плате. Поэтому вместо «сырого» analogRead точнее использовать analogReadMilliVolts: эта функция учитывает заводскую калибровку микросхемы и сразу возвращает милливольты. Код ниже усредняет 16 измерений, умножает результат на коэффициент делителя, чтобы получить напряжение аккумулятора, переводит его в проценты по таблице и, если напряжение аккумулятора опускается ниже 3,3 V, отправляет ESP32 в глубокий сон на 10 минут.

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}
Напряжение аккумулятораПримерный заряд
4,20 V100%
4,10 V89%
4,00 V78%
3,90 V63%
3,80 V40%
3,70 V12%
3,60 V5%
3,30 V0% (останови проект)

Эти значения относятся к ячейке в состоянии покоя. Когда 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-микросхемой, поэтому внешний делитель надёжнее.

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 возвращает значение от 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 через повышающий модуль и проверь напряжение аккумулятора
Измеренное напряжение отличается от показаний мультиметраНеверный коэффициент делителя или опорное напряжениеСравни с мультиметром и поправь коэффициент в коде
Если перед включением измерить мультиметром каждую точку, большинства ошибок удастся избежать: на аккумуляторе должно быть 3–4,2 V, на клеммах OUT — напряжение аккумулятора, на выходе MT3608 — 5,0 V. Если мультиметр в новинку, поможет статья Как пользоваться мультиметром, а если ESP32 постоянно перезагружается при разряженном аккумуляторе, загляни в статью Ошибка brownout на ESP32.

При правильном подключении 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
#103Новичок

Мигающий светодиод на ESP32

Учит базовой работе с выходами GPIO на ESP32. Эффект мигания получается включением и выключением светодиода с цифрового пина. Это ESP32-версия классического проекта мигания на Arduino UNO; базовые команды мигания в среде Arduino те же, но расположение пинов ESP32 и уровни GPIO 3,3 V отличаются от Arduino UNO.

4.7(37)
99
Измерение освещённости модулем LDR на ESP32
#113Новичок

Измерение освещённости модулем LDR на ESP32

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

4.6(36)
55
Глубокий сон ESP32: экономия батареи (OLED + счётчик в RTC RAM)
#135Продвинутый
Premium

Глубокий сон ESP32: экономия батареи (OLED + счётчик в RTC RAM)

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

4.3(10)
16
Цифровой вольтметр с LCD-дисплеем
#56Средний
Premium

Цифровой вольтметр с LCD-дисплеем

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

4.5(27)
36
Регистратор температуры на ESP32 (DHT22 + DS1307 RTC + microSD + OLED)
#144Продвинутый
Premium

Регистратор температуры на ESP32 (DHT22 + DS1307 RTC + microSD + OLED)

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

4.7(7)
12
ESP32 HTTPClient + API погоды (с OLED-дисплеем SSD1306)
#134Продвинутый
Premium

ESP32 HTTPClient + API погоды (с OLED-дисплеем SSD1306)

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

4.3(10)
19
Сигнализация движения на ESP32 (PIR + зуммер + светодиод + Telegram)
#145Продвинутый
Premium

Сигнализация движения на ESP32 (PIR + зуммер + светодиод + Telegram)

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

0.0(0)
9
Машинка на L298N с управлением по Bluetooth
#80Продвинутый
Premium

Машинка на L298N с управлением по Bluetooth

Преврати телефон в пульт и управляй своей машинкой-роботом. Arduino получает команды из приложения-пульта на телефоне через Bluetooth-модуль и вращает колёса через драйвер моторов; машинка едет вперёд

5.0(38)
65