• Система автоматизации с открытым исходным кодом на базе 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 см) и суперкондер со схемой заряда и устройство будет работать вечно.
 
Сверху Снизу