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

Энергосбережение в устройствах с WIFI

nikolz

Well-known member
На Lau это не актуально - можете забыть и забить.
С режимом сна она не работает как надо. По времени соединения к внешней AP RTL87xx (с условием использования SDK) на два шага впереди (по времени и по потреблению за это время). Скорости передачи данных у них примерно одинаковы (1 мегабайт в сек).
У меня пока не RTL. Получу, буду изучать.
Но ESP на СИ меня устраивает, а LUA -это очень простой способ проверить алгоритмы, да и для умных домов, LUA - выше крыши, проще чем дурила а результат такой же( т е лампочка мигает, а температуру в унитазе видит весь мир на публичном сервере. Что еще надо чайнику?)
 

pvvx

Активный участник сообщества
По времени от включения после сна до возможности запуска WiFi при не китайском SDK, а с rapid-‘лоадером’, предел у ESPк 30..40 ms с потреблением сильно за 70 mA, т.к. нет возможности отключения вывода кракозяб в UART на кривой скорости из Boot-ROM. Цикл в 50 ms : 30 ms старт и 20 полный sleep с последующей загрузкой уже демонстрировал где-то... давно это было... У RTL беды с UART и отключениями вывода туда не наблюдаются. Скорость загрузки с flash у RTL около 16 мегабайт в сек (CLK CPU / 10 при SpicDualBitMode).
Стандартный китайский SDK и особенно их лоадеры или лоадеры для Arduino (!) не позволяют по просыпанию сразу перейти на измерение с датчика и если показания в диапазоне - сразу заснуть до следующей проверки. Про Lua и говорить нечего - там старт с жручкой (за 80 mA) более нескольких секунд, до выполнения первой команды Lua.
 

nikolz

Well-known member
По времени от включения после сна до возможности запуска WiFi при не китайском SDK, а с rapid-‘лоадером’, предел у ESPк 30..40 ms с потреблением сильно за 70 mA, т.к. нет возможности отключения вывода кракозяб в UART на кривой скорости из Boot-ROM. Цикл в 50 ms : 30 ms старт и 20 полный sleep с последующей загрузкой уже демонстрировал где-то... давно это было... У RTL беды с UART и отключениями вывода туда не наблюдаются. Скорость загрузки с flash у RTL около 16 мегабайт в сек (CLK CPU / 10 при SpicDualBitMode).
Стандартный китайский SDK и особенно их лоадеры или лоадеры для Arduino (!) не позволяют по просыпанию сразу перейти на измерение с датчика и если показания в диапазоне - сразу заснуть до следующей проверки. Про Lua и говорить нечего - там старт с жручкой (за 80 mA) более нескольких секунд, до выполнения первой команды Lua.
Я читал Ваши результаты. Спасибо.
Я собственно это знаю и меня это не смущает.
Пока использую ESP в основном без WIFI.
так как RTL сделали после ESP то по энергопотреблению вполне возможно лучше.
Но как говорится из песни слов не выкинешь, если передатчики в ESP и RTL имеют один и тот же КПД, то кушают они при одной и той же мошности излучения одинаково. Или в RTL кпд WIFI больше?
 

pvvx

Активный участник сообщества
так как RTL сделали после ESP то по энергопотреблению вполне возможно лучше.
Где-то лучше, где-то хуже. Чипы разные и у каждого свой подход. Зависит от программной реализации функций.
На ESP большая часть информации 'закрыта' или приведена реклама, не соответствующая реалиям. Пример - потребление дано без учета потребления внешней Flash микросхемой...
У RTL8710AF (по первым тестам) при повышении CPU CLK на 166MHz потребление больше, чем у ESP на 160MHz. Но тест делал без учета внутренней периферии - может там что тоже поднимается при переключении CLK и вызывает повышение потребления выше нормы...
У ESP передатчик не выключается от Reset и при перезагрузках, или при стартовой загрузке вызывает лишнее и не хилое дополнительное потребление, при этом работая на не правильной частоте и гоня шум в эфир. Ужасный баг чипа и сертификацию он не должен проходить.
ESP8266 работает при понижении питания до 1.71 В, RTL - только в нормативе от производителя - 10% 3.3В. При медленном подъеме (или опускании) питания срабатывает защелка на 2.1 В и чип не работоспособен (возможно, что плохо отрабатывает BOR).
Модуль RTL00 c RTL8710AF при CLK CPU 83MHz:
RTL00-RTL8710AF.gif
Данные из PADI IoT Stamp Resources – PINE64
Всё совпадает с реальными замерами, что не сказать о 'листках рекламы' от Espressif.
 
Последнее редактирование:

pvvx

Активный участник сообщества
В результате тестирования выяснилось следующее:
Время установления соединения по WIFI с компом должно составлять не менее 1 секунды.
Это чтобы батарейка села как можно быстрее "В результате тестирования NodeMCU" ? :D
Если уж пошли на UDP и Lua в NodeMCU (там объем передачи ограничен пару байтами в час :) ), то зачем вам вообще соединяться с внешней AP?
Формируйте пакет WiFi и передавайте в небо эти пару байт на выбранном канале, а приемной WiFi ловите. Гарантии у UDP всё равно нет, так тоже нет, но всё намного быстрее...
 
Последнее редактирование:

nikolz

Well-known member
Это чтобы батарейка села как можно быстрее "В результате тестирования NodeMCU" ? :D
Если уж пошли на UDP и Lua в NodeMCU (там объем передачи ограничен пару байтами в час :) ), то зачем вам вообще соединяться с внешней AP?
Формируйте пакет WiFi и передавайте в небо эти пару байт на выбранном канале, а приемной WiFi ловите. Гарантии у UDP всё равно нет, так тоже нет, но всё намного быстрее...
обнаружил что eSP после сна рассылает Broadcast
upload_2016-10-19_16-46-45.png

В результате посылка пакета задерживается на 1 секунду.
как от этого Broadcast a избавиться, кто знает?
 

Victor

Administrator
Команда форума
как от этого Broadcast a избавиться
Скорее всего, ESP8266 как проснется, то активно сканирует WiFi.
Возможно, что это стандартный [inline]PROBE REQUEST[/inline] пакет - он нужен для того, чтобы доступные точки доступа ответили пакетом [inline]PROBE RESPONSE[/inline]. Есть альтернативный вариант, когда устройство ничего не сканирует, а получает информацию о доступных точках доступах из [inline]BEACON[/inline] пакетов. Но вся эта логика находится на втором MAC подуровне модели OSI всего семейства протоколов 802.11 и недоступна для управления напрямую из SDK - тут может помочь только замена библиотек на свои, как у @pvvx
Для более точного ответа нужен более глубокий парсинг пакета (далеко не все драйвера WiFi карт это позволяют, кстати)
 

nikolz

Well-known member
Скорее всего, ESP8266 как проснется, то активно сканирует WiFi.
Возможно, что это стандартный [inline]PROBE REQUEST[/inline] пакет - он нужен для того, чтобы доступные точки доступа ответили пакетом [inline]PROBE RESPONSE[/inline]. Есть альтернативный вариант, когда устройство ничего не сканирует, а получает информацию о доступных точках доступах из [inline]BEACON[/inline] пакетов. Но вся эта логика находится на втором MAC подуровне модели OSI всего семейства протоколов 802.11 и недоступна для управления напрямую из SDK - тут может помочь только замена библиотек на свои, как у @pvvx
Для более точного ответа нужен более глубокий парсинг пакета (далеко не все драйвера WiFi карт это позволяют, кстати)
В результате наблюдения за трафиком выяснил, что этими бродкастами ESP определяет IP станции и IP роутера.
Удалось уменьшить это время до 0.3 с.
Время на бродкаст удалось уменьшить путем явной записи конфигурации IP ESP.
Как прописать явно в NODEMCU конфигурацию роутера пока не нашел.
Резюме:
NODEMCU обеспечивает режим экономии энергопитания со следующими параметрами:
Минимальное время активности для передачи пакета по UDP с приемом ответа от компа через роутер в локальной сети составляет 0.3 секунды, средний ток при этом 65 ма.
 
Последнее редактирование:

nikolz

Well-known member
Всем привет!
Написал на СИ софтину включение ESP в различные режимы энергосбережения.
Режимы:
1(настройка WIFI при выходе из сна),
2(выход без настройки)
4(WIFI выключен).
--------------------------------
Результаты следующие:
минимальный интервал каждого режима разделен на участки постоянного потребляемого тока.
-----------------------------------------
Режим 4 ( 200 ms, средний ток 17.5 ma) 3 участка
1) I=16 ma(30 ms)
2) I=26 ma(70 ms)
3) I=12 ma(100 ms)
=============================================
Режим 1 ( 360 ms, средний ток 69.5 ma) 6 участков
1) 4.1
2) 4.2
3) I=120 ma +140 ma( скважность 2 ) (60 ms)
4) I=55 ma(20 ms)
5) I=220 ma(2 ms)
6) I=55 ma(178 ms)
=============================================
Режим 2 ( 300 ms, средний ток 40.5 ma) 5 участков
1) 4.1
2) 4.2
3) 1.4
4) 1.5
5) I=55ms(78 ms)
------------------------------------------
 

nikolz

Well-known member
DHCPDISCOVER - запрос "Хто там?", "я типа DHCP с MAC:...." :)
Не знали, что DHCP в прошивке есть? :confused:
На Си я вижу, что он подключается, на луа его не видно.
Но на луа еще и мултикаст врубается по адресу 224.0.0.1. Во как!
Не знаете как бы это все вырубить.
-----------------------------------------
Иначе , кроме времени включения при старте, которое ,не как Вы писали - составляет 50 ms, а реально , как я написал выше от 200 до 360 ms, к нему добавляется время подключения к роутеру и обмен пакетами - это еще 150 ms.
Получается, что начальная загрузка, та которую Вы уменьшали с 50 до 20, не делает никакой погоды в реальной работе модуля.
--------------------------------
Резюме:
Для реального модуля с режимом sleep следует брать минимальное время активности 400 ms при среднем токе 18 ma (без WIFI) и от 40 до 70 с WIFI.
 

pvvx

Активный участник сообщества
На Си я вижу, что он подключается, на луа его не видно.
Он в либе c Lwip.
Получается, что начальная загрузка, та которую Вы уменьшали с 50 до 20, не делает никакой погоды в реальной работе модуля.
Это в Lua всё совсем безразлично :) А у других как раз эти ms погоду делают. При просыпании и опросе датчика. Зачем каждый раз модулю выходить на связь? Как можно смотреть графики с выпадающими точками снятых и не отфильтрованных замеров? Ну и т.д.
Главное, что в Lua вы можете переключить что-либо, только дождавшись полной загрузки SDK и инициализации WiFi при потреблении от 70 mA и более (до 200) в течении первой секунды. А тут уже через 30 ms возможна коррекция - полное отключение WiFi и прочих неиспользуемого оборудования с понижением потребления к 15 mA или чуть более, если проц переключить на 160 MHz для ускорения решения задачи "просыпания", что тоже дает экономию по общей картине питания.
Самый эталонный пример - питание от солнечной батареи. Модуль проснулся и выяснил, что Солнышка не было и быстро включил максимальное время до следующего "просыпания". В вашем случае - всё - крах, батарея выжрана загрузкой Lua и всё скончалось на много-секундной инициализации spiffs...
 
Последнее редактирование:

pvvx

Активный участник сообщества
Ну Вы опять не прочитали внимательно.
Я же написал, что сейчас я делаю все на СИ. И данные такие же как на луа.
Т е 450 ms при обмене пакетами и от 200 до 360 ms без обмена, просто инит и в колбеке таймера переводим в сон.
Никаких 30 ms и близко нет.
Там предел в том, что заряженная емкость в 4700 мкФ в питании на 3.3В у вас не хватает для работы (принятия решения процом что делать). А что-то более - это большая цена или превышает габариты самого модуля...
Я же написал вот замеры:
Написал на СИ софтину включение ESP в различные режимы энергосбережения.
Режимы:
1(настройка WIFI при выходе из сна),
2(выход без настройки)
4(WIFI выключен).
--------------------------------
Результаты следующие:
А вам на это ответил - deep_sleep лучшее лекарство от выедания батареи.
Rapid_Loader/ESP-01-StartSignals.gif at master · pvvx/Rapid_Loader · GitHub
Есть ещё "финт ушами" - тогда время старта до своего кода сокращается менее 30 ms за счет ошибки в ROM-BIOS (она даже ничего не выводит в UART!). Но он требует не трогать чип-селект и не снимать питания с проца (нужна загруженная до этого память - RAM).
PS: По большому счету ESP8266 уже умер. Его полностью победил младший RTL87xx...
 
Последнее редактирование:

pvvx

Активный участник сообщества
Вы не все изучили.
? :)
До того, ка заставить ROM-ВIOS выводить на один символ меньше при старте, т.к. это ms тупого ожидания в цикле конца вывода в UART с полной жручкой CPU ROM-BIOS-a написанного тупыми китайцами... :p
Там есть три участка работы процессора
Больше. Пик потребления за 80 mA при очистке RAM.
Так-же вы многое не учли. Стандартный загрузчик, из ROM-BIOS, загружает с flash на низкой частоте CPU и самом медленном режиме работы SPI. В итоге загрузка лишних пары байт первого участка (бутлоадера) из Flash сжирает к сотне ms у китайцев (это наверно ваши 70). Rapid-loder для того и сделан - он всего сотню байт и дальше грузит всё остальное (15..30 кило) за время быстрее, чем грузил его (эти сотню байт) ROM-BIOS.
Во вторых ROM-BIOS грузит всего один сегмент и пишет одну надпись... Там ещё в третьих и ... но ESP уже умер.
Если хотите решить вопрос - берете емкость (электролит) и находите минимальное значение емкости, с которой запустится CPU и к пример до переключения какого порта и заснет снова. Расчет может сделать сами - параметры: напряжение заряженной емкости пусть 3.5В - далее разряд процом до 1.75В. В этих пределах ESP благополучно живет и должен успеть сделать задуманное... :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Т е Вы согласны с моими измерениями?
Ваши 20 или 50 ms - это абстрактный интервал, который реально бесполезен.
Но никаких 80 ма в приведенном мною режиме не существует.
Плохо смотрели.
У ESP только CPU жрет к 70 mA, если не простаивает на спец. команде в распределителе процессов в ROM-BIOS.
И скорее всего измеряли неверно - не учли утечки, вплоть до полной запитки модуля от входов-выходов UART и т.д. включенных к внешним устройствам со своим питанием и не согласованным для данного замера.
Для точности вам дана методика - заряжаете емкость и вперед - сколько Lua на ней исполниться :)
Вы опять впали в депрессию и в этом виноваты китайцы ( а почему не пендосы?) Наши патриоты обычно их ругают, а Вы все китайцев.
А RTL не напомните, кто сделал?
Опять китайцы?
Надо же!
Тут есть разница. ESP писали бестолковые китайцы, испортили неплохую разработку железа, а RTL писали уже обученные...
 
Последнее редактирование:

pvvx

Активный участник сообщества
Измерил я правильно, так как мерил ток потребления модуля на землю.
Все утечки идут на землю. (или есть сомнения?)
Без сомнения идут. Это на + может быть меньше, т.к. там возможен толерант к +5В (но плохо реализован в ESP).

70 ма это при включенном приемнике WIFI, а без него 12-15 ma .
Припаяйте ещё фараду к модулю и включите его на 1 сек, а потом меряйте :)
На разных модулях стоят разные номиналы емкостий и ESR у них разный. Всё это зависит от источника питания. Если он прецизионный, то будет и 1A пики на заряд емкостей модуля :p
Если 15 mA - CPU стоит 99% на команде ожидания прерывания. Некий sleep. Какой смысл тогда вообще в данном CPU? - кормить бездельника?
Вы же знаете, что все графики по основным командам уже приводил, но вынудить и сюда их всех свалить не выйдет :p
Но собственно,я знаю все, что Вы скажите про китайцев. За два года Вы уже все оних сказали и теперь лишь повторяете свое мнение.
Т е ничего нового Вы мне не скажите.
А и не выудите. И что с ними поделать, если у них школа программирования только формируется?
 

pvvx

Активный участник сообщества
Зачем мне паять фараду, когда у меня батарейка на 3.6 вольта включена а USB отключена.
Как-же вы отследили где и какой "участок" без мониторинга хоть символов в порту ? :)
Может квац кривой и плохо заводиться - значит первый участок до вывода первого символа полностью зависит от погоды (точнее от температуры) и какой стоит счетчик до стабилизации (тиков) генератора и какая опция ему дана, далее, как выскочили регистры у WiFi блока, включен он вообще или нет - тоже зависит от погоды у ESP, т.к. брак - не завязан с RESET ...
В общем задача вам по вашей же теме объяснена и предельно понятна:
Все остальные режимы работы модуля после инициализации и т.д. полностью зависят от задачи поставленной модулю и всегда имеются возможности изменить алгоритм в этих процессах.
Но "холодный" (и после deep_sleep, но там есть различия) старт - загрузка и инициализация ПО модуля есть всегда в любой разработке и чем меньше он, тем лучше.
По этому ваши выкрутасы - "я чё-то там померял, как мне захотелось" не интересны. Хороша ложка к обеду, но обед уже закончился. Занятия некромансией (или некромантией) с умирающим ESP8266 уже не актуальны... Там произошел переход в сегмент “обслуживания” – каждый держатель большого пакета встроил ESP8266 в свою систему и предлагает услуги для начинающих... Остались одни потребители полностью готового "продукта". Что либо менять в данных "продуктах" и вы уже не будете.
Что Вы х...ю пишите. Опытный Вы Наш.
А я не опытный. Мне это не требуется.
 
Последнее редактирование:

nikolz

Well-known member
Как-же вы отследили где и какой "участок" без мониторинга хоть символов в порту ? :)
Может квац кривой и плохо заводиться - значит первый участок до вывода первого символа полностью зависит от погоды (точнее от температуры) и какой стоит счетчик до стабилизации (тиков) генератора и какая опция ему дана, далее, как выскочили регистры у WiFi блока, включен он вообще или нет - тоже зависит от погоды у ESP, т.к. брак - не завязан с RESET ...
В общем задача вам по вашей же теме объяснена и предельно понятна:
Все остальные режимы работы модуля после инициализации и т.д. полностью зависят от задачи поставленной модулю и всегда имеются возможности изменить алгоритм в этих процессах.
Но "холодный" (и после deep_sleep, но там есть различия) старт - загрузка и инициализация ПО модуля есть всегда в любой разработке и чем меньше он, тем лучше.
По этому ваши выкрутасы - "я чё-то там померял, как мне захотелось" не интересны. Хороша ложка к обеду, но обед уже закончился. Занятия некромансией (или некромантией) с умирающим ESP8266 уже не актуальны... Там произошел переход в сегмент “обслуживания” – каждый держатель большого пакета встроил ESP8266 в свою систему и предлагает услуги для начинающих... Остались одни потребители полностью готового "продукта". Что либо менять в данных "продуктах" и вы уже не будете.
А я не опытный. Мне это не требуется.
Объясняю, как я отслеживаю участки.
Подключаю осциллограф.
Программа работает в цикле. Устанавливаю время сна минимальное 20 мс. делаю на осциллографе внешнюю синхронизацию.
В период сна -ток, а следовательно и напряжение от него практически ноль.
В момент просыпания появляется фронт начала работы. От него синхронезируемся. Устанавливаем развертку 50 мс в см.
Наблюдаем все интервалы, которые я указал выше. По осциллографу измеряем напряжение на интервалах.
По закону ома определяем потребляемый ток.
 
Сверху Снизу