Сравнительно давно написал на Хабре несколько статей о ESP8266 и способах уменьшения энергопотребления популярного модуля ESP12x.

За последнее время появилось много новых малопотребляющих модулей с протоколом BLE, но ESP8266 остается уникальным по простоте применения и низкой стоимости для реализации различных поделок IOT.

Обычно автономные устройства сбора данных и устройства сигнализации большее время находятся в состоянии сна.

Для разработки устройств IOT на основе ESP8266 удобным является модуль Wemos D1 mini, который содержит в своем составе адаптер USB‑UART и LDO ME6211C33 на 3.3в для питания ESP.

С этим модулем легко работать «из коробки» на любом ПК, программировать модуль и обмениваться с ним данными по USB и WiFi.

Модуль Wemos легко встраивать в различные автономные устройства. Для подключения внешнего источника питания у модуля есть два контакта 5 вольт и 3.3 вольта. К контакту 5 вольт можно подключить любой источник с напряжением от 4 до 6 вольт. К контакту 3.3 вольта следует подключать батарею или аккумулятор через LDO типа ME6211C33.

Поэтому для применения модуля Wemos в устройствах с автономным питанием надо либо подключить батарейку к контакту 5 вольт, либо через LDO к контакту 3.3 вольт.

Казалось бы все просто, но проблема в том, что такое включение питания не позволяет существенно уменьшить ток потребления модуля в то время, когда он не активен, т е чип ESP находится в режиме DEEP SLEEP(режим сна).

Если в режим сна перевести модуль WEMOS D1 mini (чип ESP8266), то ток потребления при питании через контакт 5в составит 0.2mA, а при питании через контакт 3.3в ток составит 0.14mA.

Чтобы понять долю энергопотребления во время сна, рассмотрим пример работы автономного датчика температуры, который отправляет на сервер показания один раз в 10 минут.

Активный режим работы модуля будет состоять из следующих этапов:

  1. Пробуждение: 0.033s* 30mA= 1 mA*s;

  2. Опрос датчика: 0.5s* 80 mА= 40 mA*s;

  3. Работа передатчика: 0.01s* 300mA= 3 mA*s;

  4. Режим сна: 599.36s* 0.2mA= 120 mA*s;

  5. Итого: 164 mA*s.

Таким образом, энергопотребление модуля в режиме сна составляет 85% от суммарных затрат.

Если делать устройства на модулях ESP12 (ESP8266), то ток потребления в режиме сна составляет 0.02mA и энергопотребление в этом режиме для нашего примера составит 12 mA*s или 35% от суммарных затрат в 33 mA*s. Но такое решение требует определенный уровень знаний схемотехники и усложняет разработку конечного устройства.

Рассмотрим простой способ уменьшения тока в режиме сна модуля Wemos до 0.03mA.

При этом активный режим работы модуля будет состоять из следующих этапов:

  1. Пробуждение: 0.033s* 30mA= 1 mA*s;

  2. Опрос датчика: 0.5s* 16 mА= 8 mA*s; (см. предыдущие статьи)

  3. Включение Wi‑Fi: 0.1s* 80 mА = 8 mA*s;

  4. Работа передатчика: 0.01s* 300mA= 3 mA*s;

  5. Режим сна: 599.36s* 0.03mA= 18 mA*s;

  6. Итого: 38 mA*s.

Что обеспечивает энергопотребление в режиме сна в нашем примере 18 mA*s, что составит 45% от общего энергопотребления в 38 mA*s, которое уменьшится примерно в 4 раза.

Исходный модуль. Красным отмечен разрыв проводника.
Исходный модуль. Красным отмечен разрыв проводника.
Модифицированный модуль
Модифицированный модуль

Чтобы Wemos можно было вывести из режима сна, установлен диод Шоттки с контакта RST на контакт D0.

Чтобы уменьшить ток потребления при работе от батарейки, достаточно разорвать проводник на печатной плате соединяющий LDO(проводник из под чипа CH340) с проводником от контакта 3.3в.

При этом питание ESP12 будет только от контакта 3.3в, что требует наличие батарейки и при работе от USB.

Чтобы режим работы модуля от USB не изменился, надо в место разрыва проводника установить диод Шоттки, катодом в сторону контакта 3.3в.

В результате ток потребления в режиме сна через контакт 3.3в составит 0.04 mA.

Если убрать светодиод на модуле ESP12, то ток потребления в режиме сна составит 0.03 mA.

После такой модернизации модуль Wemos D1 mini может работать в устройстве в нашем примере с автономным питанием примерно в 4 раза дольше, чем до этого.

Комментарии (43)


  1. Jury_78
    25.06.2024 11:15

    Моно еще просто выключать модуль с помощью таймера. Правда если загрузка не энергозатратна.


    1. nikolz Автор
      25.06.2024 11:15

      Проще не получится ( В данном случае всего один диод Шоттки для этого добавлен).

      Простое решение на таймере будет больше потреблять, чем в данном варианте.

      Для меньшего потребления, чем в данном способе, надо использовать микро потребляющий таймер.

      Не стал писать об этом варианте, так как он более сложный и требует знание схемотехники.

      Кроме того, при работе от USB потребуется отключение решения на таймере. В данном варианте ничего не надо отключать.


      1. Jury_78
        25.06.2024 11:15

        Есть неплохой таймер C005, потребление низкое (точно не помню), добавить только ключевой транзистор. Схема простая.


        1. nikolz Автор
          25.06.2024 11:15

          В режиме работы таймера , т е во время сна Wemos, этот таймер потребляет 0.1mA.

          В моем варианте Wemos в режиме сна потребляет в 3 раза меньше.


          1. Jury_78
            25.06.2024 11:15

            Встречал, что ток потребления в ждущем режиме менее 1 мкА.


            1. nikolz Автор
              25.06.2024 11:15

              Характеристики C005:

              http://rfanat.qrz.ru/s25/tymer.html

              — Потребляемый ток в состоянии покоя: 1мкА .

              Потребляемый ток в работе: 100мкА .

              -----------------------

              Режим сна Wemos - это активный режим таймера.


              1. Jury_78
                25.06.2024 11:15

                Режим сна Wemos - это активный режим таймера.

                Активный - это когда нагрузка включена.


                1. nikolz Автор
                  25.06.2024 11:15
                  +1

                  Попробую пояснить.

                  Посмотрите ссылку.

                  С005 работает следующим образом.

                  Время задается внешним резистором Rt. Запускается спадом (переход 1-0) на входе запуска — Trigger. Процесс запуска сопровождается появлением низкого уровня на выходе — Out, а после отработки заданного времени возвращается к высокому состоянию. В процессе работы состояния входа запуска на время таймера не влияет, он не перезапускается и отрабатывает заданное время. Даже сохранение низкого уровня на входе запуска, после отработки заданного времени, вновь таймер не запускает. Зависимость времени от сопротивления представлена в таблице. В работе без нагрузки модуль потребляет примерно 120 мкА.

                  Т е С005 это одновибратор. и его активный режим - формирование импульса на выходе.

                  Для управления сном Wemos нам надо сформировать импульс длительностью сна. Т е С005 будет работать, когда Wemos будет спать. При этом импульс "0" с выхода C005 запирает транзистор в цепи питания, либо в цепи EN ESP и тем самым отключает питание. В это время С005 активен.

                  Когда Wemos активен, то C005 в режиме ожидания и на его выходе "1".

                  Когда Wemos завершает работу, то он запускает C005.

                  Применение C005 фактически подменяет работу внутренного RTC ESP.

                  Но в итоге потребление в 3 -5 раз больше.

                  -------------------------------

                  Если есть желание применить внешний таймер, то надо использовать

                  TPL5110DDCR или TPL5111DDCR у которых ток в активном режиме при формировании больших интервалов менее 0.1 мкА. Но это уже другая история и цена решения.


                  1. Jury_78
                    25.06.2024 11:15

                    Что то вы путаете... Специально расковырял свою схему с C005. Когда на выходе ноль - активный режим у меня потребляет 1мА, т.к. Там у меня не чистый таймер, а еще есть элементы. Когда на выходе - один - ждущий режим потребляет 14мкА. Т.е. Если перейти к чистому таймеру, то ваши 100мкА соответствуют у меня 1мА, а 1мкА - 14мкА, а это как минимум в два раза меньше чем у вас.


                    1. nikolz Автор
                      25.06.2024 11:15

                      Это Вы что-то путаете. В моем варианте(в статье) ток потребления Wemos в режиме сна составляет 30 мкА.

                      У Вас это 1000 мкА, в 30 раз больше,

                      а у С005 это 100 мкА, в 3 раза больше.

                      --------------------------

                      Еще добавлю ложку дегтя к Вашей бочке. Если отключать питание, то невозможно сохранять данные в памяти RTC ESP. А это усложняет быстрое восстановление Wi-Fi соединения. Но это уже другая история.


                      1. Jury_78
                        25.06.2024 11:15

                        В моем варианте(в статье) ток потребления Wemos в режиме сна составляет 30 мкА.

                        А у меня 14мка в режиме ожидания. Так что это меньше.

                        А это усложняет быстрое восстановление Wi-Fi соединения

                        Это уже причина...


                      1. nikolz Автор
                        25.06.2024 11:15

                        Вы так и не поняли.

                        Режим ожидания С005- это активный режим Wemos. В этом режиме Wemos потребляет от 20 до 300 mA.


                      1. Jury_78
                        25.06.2024 11:15

                        Режим ожидания С005- это активный режим Wemos.

                        Скорей всего мы запутались в терминах. Когда таймер отсчитывает время от потребляет меньше всего. Если этот момент использовать для "сна" остальной схемы вот вам преимущество. Остальное зависит от схемотехники.


                      1. nikolz Автор
                        25.06.2024 11:15

                        может это Вам поможет понять, что и как:

                        http://www.radio.ru/arhiv/2021/6/V/472cfb03758121ff8cf390c07ccd2788.shtml

                        И. НЕЧАЕВ. Модуль таймера С005 и конструкции на его основе.

                        На просторах Интернета и в радиомагазинах можно недорого приобрести модуль С005, который позиционируется как программируемый таймер. Микросхема в составе модуля содержит элементы RC-генератора с внешним частотозадающим резистором и программируемый делитель частоты. Потребляемый ток в режиме ожидания — 1 мкА, а в процессе отсчёта времени — около 100 мкА.

                        ----------------------

                        Отсчет времени - это режим сна Wemos,

                        а ожидание - это время активности Wemos.

                         

                        Вернуться назад.


                      1. nikolz Автор
                        25.06.2024 11:15

                        Специально собрал схему на С005.

                        В активном режиме C005, т е когда Wemos спит, ток потребления C005 составляет 330 мкА.


                      1. randomsimplenumber
                        25.06.2024 11:15

                        Не смог найти даташита на этот таймер, чтобы в нем был указан потребляемый ток. Возможно, это ещё и от частоты генератора зависит, но не точно;).


                      1. nikolz Автор
                        25.06.2024 11:15

                        даташит на него в инете нет.

                        собрал два варианта схемы одновибратора. Формирует импульс дли тельностью предполагаемого сна микроконтроллера. Измерил ток в режиме формирования интервала(активный) и в режиме ожидания запуска.

                        1) C005 (подключил R и кнопку для запуска). В режиме формирования импульса T=7 сек ток=130 мкА, в режиме ожидания порядка 1 мкА

                        2) TPL5110DDCR в любом режиме ток менее 1 мкА.


                      1. Jury_78
                        25.06.2024 11:15

                        В вашем "активном" режиме какой уровень на выходе?

                        Разница еще может быть из-за напряжения питания.


                      1. nikolz Автор
                        25.06.2024 11:15

                        На С005 ничего не включал на выход. Подключил время задающий резистор и кнопку для пуска и измерил ток потребления.

                        На TPL5110DDCR  подключил резистор, кнопку для пуска на выходе установлен полевик с p-каналом и светодиод. Когда сон - диод не светит.

                        ---------------------

                        Напряжение питания 3.3 вольта.


                      1. Jury_78
                        25.06.2024 11:15

                        Не знаю почему у вас такие токи. Может таймеры различаются...


                      1. randomsimplenumber
                        25.06.2024 11:15

                        Если параметры не нормированы - почему бы и не отличаться


                      1. nikolz Автор
                        25.06.2024 11:15

                        Мне удалось померить ток C005.

                        Вы можете проверить по моей методике.

                        Измеряем в активном режиме следующим образом.

                        В цепь питания ставим фильтр RC цепочку.

                        Измерения два для R=1K и R=20K С= 4.7мкФ

                        Напряжение на входе R 3.3 в

                        В первом измерении напряжение на C005 составляет 3.231в

                        т е ток потребления C005 составляет 69 мкА.

                        Во втором измерении напряжение на C005 составляет 2.416в

                        т е ток потребления C005 составляет 44 мкА

                        В режиме ожидания ток С005 составляет примерно 0.35 мкА.

                        --------------------

                        Для TPL5110 в активном режиме таким способом ток измерить не удалось, так как он меньше 1 мкА.

                        -----------------

                        Предположу, что С005 это китайский клон TPL5110.


                      1. randomsimplenumber
                        25.06.2024 11:15

                        Предположу, что С005 это китайский клон TPL5110.

                        Точно не клон. С005 имеет еще 2 перемычки для управления делителями частоты, и может работать с R=0


                      1. nikolz Автор
                        25.06.2024 11:15

                        Его сделали бескорпусным и доработали - вывели перемычки Но ток в активном режиме на на два порядка выше.

                        Правда и цена на порядок ниже.

                        Он мне тоже 10 лет назад сначала понравился, но когда разобрался, то перешел на TPL.


                      1. randomsimplenumber
                        25.06.2024 11:15

                        У оригинала наружу ничего не торчит. Не к чему подключать делитель.

                        А если добавили функционал - это уже совсем не клон.

                        Неважно :)


                      1. nikolz Автор
                        25.06.2024 11:15

                        нет возражений.


                      1. Jury_78
                        25.06.2024 11:15

                        Какой использовался времязадающий резистор?


                      1. nikolz Автор
                        25.06.2024 11:15

                        47 кОм


                      1. randomsimplenumber
                        25.06.2024 11:15

                        няп, если выключили всю периферию и ушли спать, быстрое восстановление связи не получится. Для этого есть другие режимы, с большим потреблением.


                      1. nikolz Автор
                        25.06.2024 11:15

                        Получится, посмотрите мои предыдущие статьи, там я написал как это делается.

                        Например, у меня ESP8266 выходит из сна, восстанавливает связь, передает по WiFi по протоколу UDP и снова уходит спать примерно за 0.15 сек.


  1. NutsUnderline
    25.06.2024 11:15
    +3

    А я пока что вообще совсем не понял, тезисно выглядит так:

    1) WEMOS D1 даже в режиме сна кушает много (потому что?)

    2) ESP12 в режиме сна потребляет меньше (потому что?)

    3) Рассмотрим простой способ уменьшения тока в режиме сна (какой????!) Похоже выключаем WiFi ?

    5) Чтобы Wemos можно было вывести из режима сна, установлен диод Шоттки (что он делает?)

    6) достаточно разорвать проводник на печатной плате соединяющий LDO, в место разрыва проводника установить диод Шоттки (это он так сильно кушает и мы его отвязываем?)

    Думаю, что стоит разжевать чуть побольше...


    1. randomsimplenumber
      25.06.2024 11:15
      +1

      НЯП, диод можно заменить простой советской..

      Hidden text

      перемычкой

      Это стандартная китайская магия по выходу из deep sleep. Но чтобы из deep sleep выйти, туда нужно сначала зайти.


      1. nikolz Автор
        25.06.2024 11:15

        Нет это не китайская магия, а старый советский способ создания схемы с тремя состояниями. Диод позволяет уменьшить токи. Задача именно в максимальном снижении потребления для работы от батарейки. Поэтому я вместо китайской перемычки ставлю диод Шоттки за 3 копейки.


        1. randomsimplenumber
          25.06.2024 11:15

          Это именно что китайская магия, раз её повторяют бездумно ;) Роль перемычки - протянуть сигнал reset от магической китайской ножки. Можно вместо перемычки использовать диод или резистор - на ток это не повлияет. Ток потребляет не перемычка, а кристалл :) А в deep sleep у него ноги в высокоомном состоянии, ток через них не течет.


          1. nikolz Автор
            25.06.2024 11:15
            +1

            Поясняю специально для Вас

            В ESP контакт RST - это вход рестарта и на него подключают кнопки и внешние сигналы для рестарта чипа. D0 - это выход счетчика RTC.

            Если вы перемычкой соедините RST и D0 , то внешние датчики и кнопка сброса будут закорачивать пин D0, который является выходом.

            Т е вы делаете КЗ на выходе и нафига?

            Диод отключает D0 при кз на RST и никаких кз не возникает.

            Пояснения закончил.

            В китайских решениях ставят резистор, кз - это российское решение.

            диод Шоттки это мое решение.


            1. randomsimplenumber
              25.06.2024 11:15

              Ага, сорян, ошибался:) При deep sleep gpio16 переводится в push -pull режим, и с кнопкой reset будет конфликт (если она предусмотрена. если нет - пофиг). Резистор - достаточно хорошо. Зачем диод?


              1. nikolz Автор
                25.06.2024 11:15

                Если ставить резистор, то надо подбирать его величину.

                Диод - это нелинейный резистор.

                Его сопротивление минимально, когда открыт, т е эквивалент к.з. При закрытом - это х.х. т е нет ненужных токов.

                В итоге нет надобности подбирать номинал резистора и нет проблем.

                Мне так удобнее .

                -----------------------

                В статье указано два диода.

                Первый обеспечивает выход из режима сна.

                Второй обеспечивает работу от USB при отсутствии батарейки.


                1. randomsimplenumber
                  25.06.2024 11:15

                  Если ставить резистор, то надо подбирать его величину.

                  Зачем подбирать? 330 ом возьмите;) Сгодится все что значительно меньше чем внутренняя подтяжка на RST.

                  нет ненужных токов.

                  Откуда и куда текут ненужные токи в deep sleep, когда RST подтянут к VCC, а на GPIO16 логическая 1?


                  1. nikolz Автор
                    25.06.2024 11:15

                    Прикольный выбор. Чем это лучше по сравнению с перемычкой?

                    У Вас через резистор при нажатии кнопки RST будет ток в 10 мА через контакт D0. Это половина тока чипа при старте.

                    Для выхода ESP это практически предельный ток.

                    Обоснуйте свой выбор.


                    1. randomsimplenumber
                      25.06.2024 11:15

                      Кнопка reset нажимается обычно когда что то идёт не так при отладке. У некоторых ее совсем нет ;) При отладке пофиг какой ток. Главное чтобы не превышал допустимого. А если у вас кнопка reset нажимается так часто, что это влияет на батарею.. Ну, тогда диод, без вариантов;) Разница в цене между диодом и резистором действительно не стоит обсуждения ;)


                      1. nikolz Автор
                        25.06.2024 11:15
                        +1

                        На этот пин еще вешают сигнал датчика.

                        Но я не понимаю, чем Вы недовольны.

                        Cтавьте что хотите.

                        Кто-то ставит перемычку кто-то резистор. Делал раньше и то и другое, теперь делаю так как в статье.

                        Статья не о том как соединить GPIO16 и RST, а о том, как уменьшить ток потребления Wemos в режиме сна.


    1. nikolz Автор
      25.06.2024 11:15

      Цель статьи рассказать как это сделать, чтобы практически достигнуть желаемого.

      Статья называется "как сделать", а не "почему так ..."

      -------------------

      Если рассказывать почему и что, то уровень будет "сложный".

      Большинству пользователей ESP важно "как" и не важно "почему".


      1. NutsUnderline
        25.06.2024 11:15

        по п. 3) и "как" нет