• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Делюсь опытом Уменьшаем энергопотребление ESP8266

pvvx

Активный участник сообщества
И в заключении сравнение с методом работы ESP8266 с использованием RapidLoader + mySDK + посылки ‘Probe Request’ по методу СHLohr на другой ESP или WiFiSoC, с собственным опросом датчика и внешним таймером включения питания:
Снимок15.gif
Т.е. достигается одинаковое потребление с ESP8266 on batteries for years – part 1 – Cron Blog – My personal findings при передаче замеров каждые 100 сек и опросом датчиков самим ESP8266.

У меня ESP-01 подключается где-то секунду. А вот ESP-12 подключалась еще быстрее ~400мс. Не знаю из-за чего разница.
Тесты в Arduino со статистикой.
https://esp8266.ru/forum/threads/ehnergopotreblenie-esp-itogi.3001/#post-45641
 
Последнее редактирование:

Evgeny D

Member
Круто! Вы ему на сайте напишите ещё.

А с внешними прерываниями такая же радужная картина?

Кстати, не знаете, как мне побороть застывание счётчика на замыкании? триггер шмитта?
 

nikolz

Well-known member
Отличные расчеты! Только вопрос: а для внешних прерываний они подходят? Это больше про чтение датчика.
Я не видел ни одного примера программы.
Сигнал внешнего прерывания заводится на RST через диод
В результате ESP запускается либо от внешнего сигнала либо от таймера RST.
-----------------------------
Если же использовать Attiny а еще лучше STM8 то можно еще больше экономить следующим образом.
Запуск ESP делается через EN
После запуска в boot ESP читает из Attiny параметры для WIFI и восстанавливает память RTC которая стерта при запуске через EN
В результате ток сна ESP уменьшится не менее чем в два раза а время связи останется тем же что и в вашем варианте.
--------------------------
 

nikolz

Well-known member
Круто! Вы ему на сайте напишите ещё.

А с внешними прерываниями такая же радужная картина?

Кстати, не знаете, как мне побороть застывание счётчика на замыкании? триггер шмитта?
попробуйте поставить RC цепочку в результате у вас сигнал от геркона станет коротким импульсом.
 

nikolz

Well-known member
upload_2018-3-25_9-10-1.png


минимальное время активности:
Rapid_loader 77 мс
rboot 84 мс.
---------------------------------------
Отличаются лишь способом загрузки стандартного приложения:
Rapid_Loader надо прикручивать в начале приложения
rboot - грузится вместо стандартного загрузчика.
 

nikolz

Well-known member
Это исполнение rboot с последующей загрузкой приложения,
которое читает данные и передает их на сервер по протоколу UDP
upload_2018-3-25_9-27-9.png
Что мы видим на этой картинке.
На загрузку приложения уходит 20 мс
Минимальное время активности с WIFI приложением 265 мс.
Я для сравнения посчитал энергозатраты с и без Attiny85
Получилось так:
upload_2018-3-25_12-21-22.png
======================
Есть еще резервы в экономии потребления.
Например, как писал ранее использовать EN с внешним CPU
это даст экономию примерно 80 ma*h в год т е примерно 20%
===================================
Можно использовать как предлагает Chlohr фреймы контроля и управления WiFi.
Это позволит уменьшить время активности ESP с 267 мс до 110 мс, что даст экономию еще 30 ма*h в год
это примерно 8% экономии.
Но это уже не протоколы данных.
==============================
Аналогично можно использовать ESP-now что даст экономию примерно 15 ма*h в год
это примерно 4% экономии
==================================
Но есть более существенный момент
Это увеличение ресурса батарее путем уменьшения импульсных токов
т е использование суперконденсатора
По литературным данным это дает прирост ресурса батареи от 20%
==========================
Есть многое на свете, друг Горацио, что и не снилось нашим мудрецам



"
 
Последнее редактирование:

pvvx

Активный участник сообщества
Это исполнение rboot с последующей загрузкой приложения,
которое читает данные и передает их на сервер по протоколу UDP
Посмотреть вложение 6065
Что мы видим на этой картинке.
На загрузку приложения уходит 20 мс
У вас ошибка (если не уточнять, что это чистая ложь) :)
На старт и вывод только этих сообщений у ESP8266 уходит 30 с копейками мс:
Код:
 ets Jan  8 2013,rst cause:2, boot mode:(3,7)

load 0x40100000, len 192, room 16
tail 0
chksum 0x7c
csum 0x7c
 ets Jan  8 2013,rst cause:2, boot mode:(3,7)

load 0x40100000, len 192, room 16
tail 0
chksum 0x7c
csum 0x7cяя
 ets Jan  8 2013,rst cause:2, boot mode:(3,7)
...
По истечении от старта где-то 35 мс вы можете получить начало загрузки кода из Flash...
По вашим предпочтениям и любви к бездарным и ничего не делающим приложениям я вам слепил самую короткую реализацию выхода для ESP8266 в deep_sleep. Других функций и лишнего кода данная прошивка не несет. Сразу по загрузке 124 байт из Flash оно включает deep_sleep (у flash тоже). Измеряйте. Время работы на картинке :)
Снимок17.gif
Меньше по вашим алго и без доп. MCU не выйдет. Это предел данного метода для ESP8266. Единственный посыл в контролер Flash команды sleep выполняется второй ассемблерной командой по старту, а далее параллельно производится установка регистров RTC и SOC. Быстрее там уже ничего невозможно. :p
Так что сворачиваете и стираете свои замеры и прочую липу. :)
 

Вложения

Последнее редактирование:

pvvx

Активный участник сообщества
Да, и полный код всей прошивки пусть будет (с вырезанными коментами :) ):
Код:
void call_user_start(void)
{
    IO_RTC_4 = 0;
    SPI0_CMD = 1<<21;
    IO_RTC_0 = 0x30;
    RTC_BASE[17] = 4;
    IO_RTC_3 = 0x10010;
    RTC_BASE[18] = (RTC_BASE[18] &  0xFFFF0FFF) | 0xFC80;
    IO_RTC_SLP_VAL = 32;
    IO_RTC_6 = 8;
    IO_RTC_2 = 1<<20;
    ets_intr_lock();
    ets_delay_us(10);
    RTC_MEM(0) = RST_EVENT_DEEP_SLEEP;
    RTC_GPI2_CFG = 0x11;
    IO_PAD_XPD_DCDC_CONF = 0x03;
    IO_RTC_3 = 0x640C8;
    IO_RTC_0 &= 0xFCF;
    IO_RTC_SLP_VAL = 0x2a400;
    RTC_BASE[16] = 0xFFF;
    RTC_BASE[17] = 0x20;
    while(SPI0_CMD);
    IO_RTC_2 = 1<<20;
    while(1);
}
Думаю на асм выйдет на пару байт короче :)

PS: Была нужда ещё сократить rapid-loader, от этого и залез заодно...
rapid-loader V6 сократился до 88 загружаемых ROM из Flash байт для старта остальной части уже во Flash c HiSpeed QIO, работающей "кэщ", отключенным выводом 26 MHz на GPIOи жором включенной WiFi на неверной частоте... - т.е. отнял ещё пару мс тормозной загрузки ROM от бездарей из Espressif :)
Код:
Disassembly of section .text:
40100000 <_stext>:
40100000:    60000200
40100004:    40004678
40100008:    402000b0

4010000c <call_user_start>:
4010000c:    fffd31      l32r    a3, 40100000 <_stext>
4010000f:    05d342      addmi    a4, a3, 0x500
40100012:    020c          movi.n    a2, 0
40100014:    4429          s32i.n    a2, a4, 16
40100016:    80a052      movi    a5, 128
40100019:    4d6452      s32i    a5, a4, 0x134
4010001c:    052c          movi.n    a5, 32
4010001e:    7368          l32i.n    a6, a3, 28
40100020:    205650      or    a5, a6, a5
40100023:    7359          s32i.n    a5, a3, 28
40100025:    402462      l32i    a6, a4, 0x100
40100028:    00a152      movi    a5, 0x100
4010002b:    206650      or    a6, a6, a5
4010002e:    406462      s32i    a6, a4, 0x100
40100031:    2348          l32i.n    a4, a3, 8
40100033:    415c40      srli    a5, a4, 12
40100036:    140c          movi.n    a4, 1
40100038:    205450      or    a5, a4, a5
4010003b:    114540      slli    a4, a5, 12
4010003e:    2349          s32i.n    a4, a3, 8
40100040:    024d          mov.n    a4, a2
40100042:    023d          mov.n    a3, a2
40100044:    fff001      l32r    a0, 40100004 <_stext+0x4>
40100047:    0000c0      callx0    a0
4010004a:    ffef21      l32r    a2, 40100008 <_stext+0x8>
4010004d:    c0af32      movi    a3, -64
40100050:    023a          add.n    a0, a2, a3
40100052:    0000a0      jx    a0
 
Последнее редактирование:

Evgeny D

Member
Доброго дня!

Продолжаю делать счётчик импульсов на Attiny85, ESP-01: dontsovcmc/ImpCounter
Т.к. передача показаний дело редкое, то я управляю ESP через EN.

Питание: 3.0В через MCP1700-3002/TT (SOT-23). Это позволит использовать больше емкости 3-х батареек АА, чем 2-х без стабилизатора.

Подскажите, почему при первом подключении батареек (EN выкл) потребление ESP ~2мА?
Только после включение ESP, выполнения ESP.deepSleep( 0, RF_DEFAULT )
и выключения EN у меня "стандартный" ток утечки из даташита 10мкА (не знаю, почему не 3мкА, как у @nikolz. Может потому что EN напрямую к пину Attiny85?).

Правильно ли я знаю, если ESP.deepSleep(0, WAKE_RF_DISABLED );
то я сэкономлю потребление при включении в момент опроса Attiny85?

У меня нет осциллографа для измерения потребления =(.

Спасибо!
 

nikolz

Well-known member
Доброго дня!

Продолжаю делать счётчик импульсов на Attiny85, ESP-01: dontsovcmc/ImpCounter
Т.к. передача показаний дело редкое, то я управляю ESP через EN.

Питание: 3.0В через MCP1700-3002/TT (SOT-23). Это позволит использовать больше емкости 3-х батареек АА, чем 2-х без стабилизатора.

Подскажите, почему при первом подключении батареек (EN выкл) потребление ESP ~2мА?
Только после включение ESP, выполнения ESP.deepSleep( 0, RF_DEFAULT )
и выключения EN у меня "стандартный" ток утечки из даташита 10мкА (не знаю, почему не 3мкА, как у @nikolz. Может потому что EN напрямую к пину Attiny85?).

Правильно ли я знаю, если ESP.deepSleep(0, WAKE_RF_DISABLED );
то я сэкономлю потребление при включении в момент опроса Attiny85?

У меня нет осциллографа для измерения потребления =(.

Спасибо!
Дайте ссылку где Вы в документации нашил про управление через EN и ток потребления при этом.
Спасибо.
 

Evgeny D

Member
@nikolz, вы правы: даташите 0.5мкА написано. наверно в каких-то рекламных проспектах видел "<10uA"....
хм.. тогда вопрос: что у меня не так...
я лезвием отрезал дорожки у светодиодов, чтобы снизить ток потребления.

по схеме:
Reset, 0, 2, RX подтянуты к питанию через 3к3.

TX к светодиоду и 300ом.

EN напрямую к пину Attiny
 

nikolz

Well-known member
@nikolz, вы правы: даташите 0.5мкА написано. наверно в каких-то рекламных проспектах видел "<10uA"....
хм.. тогда вопрос: что у меня не так...
я лезвием отрезал дорожки у светодиодов, чтобы снизить ток потребления.

по схеме:
Reset, 0, 2, RX подтянуты к питанию через 3к3.

TX к светодиоду и 300ом.

EN напрямую к пину Attiny
Если я не ошибаюсь, то в документации нет про управление через EN это есть лишь в моих ответах на форуме.
0.5 мка это не про этот режим . В док написано выключение питания. Полагаю, что это когда используем ключи по питанию.
----------------------
У Вас полагаю все нормально.
Полагаю что влияет и монтаж и величина подтягивающих резисторов.
Я ставлю подтягивающие резисторы 10 ком. Светодиоды все убираю.
В документации еще рекомендуется все выводы перевести в режи м ввода.
-------------------------------
Set the pins with an output status to input status, i.e. MTDO, U0TXD and GPIO0, before enabling Light-sleep
to eliminate the leakage current, so that the power consumption becomes even lower
-----------------------------
Обращаю ваше внимание, что при управлении по EN обнуляется внутренняя память RTC в ESP.
 

Сергей_Ф

Moderator
Команда форума
@nikolz вот интересно ваше мнение, если у меня некоторые входы притянуты к 0, как gpio15 например. Когда будет меньшее потребление - когда его перевести в режим входа или выхода с логическим 0, перед отправлением в сон? Мне померить такие токи нечем, к сожалению.
 

nikolz

Well-known member
@nikolz вот интересно ваше мнение, если у меня некоторые входы притянуты к 0, как gpio15 например. Когда будет меньшее потребление - когда его перевести в режим входа или выхода с логическим 0, перед отправлением в сон? Мне померить такие токи нечем, к сожалению.
Ничего конкретного сказать не могу так как этот pin не проверял.
Но я перевожу в режим ввода например TX и пин управления светодиодом. Эффект положительный.
На мой взгляд относительно перспектив экономии энергии на ESP8266 есть три не изученных момента, которые меня интересуют.
----------------------------------
Информация к размышлению.
1) Протокол ESP-NOW не требует установления связи с роутером и позволяет организовать сеть. Время передачи по этому протоколу примерно 30 мс.
Если его выделить из SDK и перенести в boot, то время сеанса между ESP с выходом из deep-sleep составит не более 0.1 сек.
При этом можно использовать управление по EN и ток сна будет не более 10 мка. Кроме того через ESP-NOW можно передать заголовок BLE.
------------------
2) Если в режиме deep-sleep не соединять GPIO16 с RTS то при выходе из сна получим сообщение на UART. Это означает, что CPU работает и что теоретически можно продолжить работу без рестарта.
------------------------
3) убрать задержу передачи по WIFI в 150 мс, которая не нужна при уже установленной связи.
----------------------------------
 

Evgeny D

Member
@nikolz сделал INPUT - не помогло..
Вот тут у человека deepsleep 18uA Internet Button – Simon's Journal
У меня такой же. Сколько полное выключение не написано =(.

1. А Вы только с ESP-12 работали? Не может быть разницы между ESP-01 и ESP-12?

2. Вы не знаете, почему при первом подключении батареек (EN выкл) потребление ESP ~2мА?

Из того, что у людей работают схемы, когда после пробуждения они GPIO подают HIGH на EN_CH, означает, что EN_CH - это не подача питания на ESP, а часть схемы ESP. Значит надо как-то "инициализировать" ESP перед сном?
 

nikolz

Well-known member
@nikolz сделал INPUT - не помогло..
Вот тут у человека deepsleep 18uA Internet Button – Simon's Journal
У меня такой же. Сколько полное выключение не написано =(.

1. А Вы только с ESP-12 работали? Не может быть разницы между ESP-01 и ESP-12?

2. Вы не знаете, почему при первом подключении батареек (EN выкл) потребление ESP ~2мА?

Из того, что у людей работают схемы, когда после пробуждения они GPIO подают HIGH на EN_CH, означает, что EN_CH - это не подача питания на ESP, а часть схемы ESP. Значит надо как-то "инициализировать" ESP перед сном?
Да EN это не подача питания а очевидно активация интерфейса.
18 мка это ток для deep_sllep и активации через RTS.
Если Вы используете активацию через EN из вне то надо отключать и RTS т е установить время бесконечного сна.
---------------
2 ма очевидно потому что не все выключено внутри ESP. Возможно у Вас при первом включении неправильно формируется последовательно RTS и EN. Попробуйте их сформировать, точно не помню, посмотрите в документации какой-то из сигналов должен отставать.
--------------------
Чтобы достичь ток 1 мка полагаю надо использовать ключ для управления питанием.
--------------------------
У ESP01 я не измерял токи Их как раз и измерял pvvx три года назад.
---------------
Собственно Вы что хотите достичь? Что вас не устраивает в Вашем решении?
 

nikolz

Well-known member
Посмотрел ваши ссылки. Там нет ничего существенного. Про какие схемы Вы говорите?
 

Evgeny D

Member
использовать ключ для управления питанием
Вот я идиот =( Думал EN и есть ключ.. Хотя ведь читал тему, где транзистором включали ESP.

1. Вопрос, а корректно держать на GPIO 3в при отсутствии питания ESP? Насколько знаю, atmega это не любит.

Хм.. Если потребление схемы будет очень мелким, то может вообще отказаться от стабилизатора и питать от АА. Ну хватит их до напряжения 1.25В и ладно... 20мкА с передачей выходят 200мА*ч год. А если будет 10мкА, то это вообще 100мА*ч год. (исхожу, что согласно графикам Надежина: Грандиозное тестирование батареек
Качественные и не дорогие батарейки имеют 2500 мАВч при токе разряда 200мА. До 1.25В разрядятся через ~850 мА*ч).

Иначе нужно использовать стабилизатор напряжения с пином включения. Нужен аналог MCP1700 с Shutdown пином. Вот TC1185 http://ww1.microchip.com/downloads/en/devicedoc/21335c.pdf
А attiny85 запитать напрямую от 3-х батареек АА + добавить согласующие резисторы (или диоды) в i2c для нормализации уровней.

Я страдаю перфекционизмом и осознавая, что через 4 года мир уйдет так далеко, что счетчики воды можно выбросить будет, всё равно хочу сделать оптимально но с минимальным кол-вом радиоэлементов и бюджетом...
 
Последнее редактирование:

Evgeny D

Member
О, вижу, что не корректно..
Значит подтягивающие i2c пины тоже нужно включать транзистором.
 

nikolz

Well-known member
Вот я идиот =( Думал EN и есть ключ.. Хотя ведь читал тему, где транзистором включали ESP.

1. Вопрос, а корректно держать на GPIO 3в при отсутствии питания ESP? Насколько знаю, atmega это не любит.

Хм.. Если потребление схемы будет очень мелким, то может вообще отказаться от стабилизатора и питать от АА. Ну хватит их до напряжения 1.25В и ладно... 20мкА с передачей выходят 200мА*ч год. А если будет 10мкА, то это вообще 100мА*ч год. (исхожу, что согласно графикам Надежина: Грандиозное тестирование батареек
Качественные и не дорогие батарейки имеют 2500 мАВч при токе разряда 200мА. До 1.25В разрядятся через ~850 мА*ч).

Иначе нужно использовать стабилизатор напряжения с пином включения. Нужен аналог MCP1700 с Shutdown пином. Вот TC1185 http://ww1.microchip.com/downloads/en/devicedoc/21335c.pdf
А attiny85 запитать напрямую от 3-х батареек АА + добавить согласующие резисторы (или диоды) в i2c для нормализации уровней.

Я страдаю перфекционизмом и осознавая, что через 4 года мир уйдет так далеко, что счетчики воды можно выбросить будет, всё равно хочу сделать оптимально но с минимальным кол-вом радиоэлементов и бюджетом...
Относительно того, что можно без стабилизатора при питании от батареек я уже говорил.
Относительно пинов под 3 вольтами я не понял.
Посмотрите такой вариант:
информация к размышлению:
ключи ставится после батарейки.
Берем таймер tpl5110
TPL5110 – нанопотребляющий таймер управления питанием
Более 10 лет от одной батарейки CR2032: Беспроводной датчик температуры и влажности
-----------------------
и еще замечу, что можно поставить солнечную панельку (5x8 см x см) и суперкондер со схемой заряда и устройство будет работать вечно.
 
Сверху Снизу