• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Долгое пробуждение ESP8266 после deep sleep с настройкой deep sleep option(4)

paladin

New member
Здравствуйте, уважаемые форумчани. Исследую deep_sleep на ESP8266-12E с SDK1.3.0. Код простой в user_init, две строчки:
system_deep_sleep_option(4);
system_deep_sleep(6000000);
С помощью малоомного резистора в разрыве цепи питания и осциллографа контролирую ток потребления.
Картина выглядит как то так:
1.3 сек - 12 мА (пробуждение после сна)
6 сек - 80 мкА (сон)
Вопрос, почему пробуждение идет так долго, аж целых 1.3 сек?
 

pvvx

Активный участник сообщества
По тому, в китайском SDK ошибки связанные с выходом в режим deep_sleep. Это первое - необходимо патчить библиотеки SDK.
А второе - прикрутите загрузчик rapid_loader.bin, путем копирования к 0x00000.bin
copy /b rapid_loader.bin + 0x00000.bin new_0x00000.bin
 

paladin

New member
По тому, в китайском SDK ошибки связанные с выходом в режим deep_sleep. Это первое - необходимо патчить библиотеки SDK.
А второе - прикрутите загрузчик rapid_loader.bin, путем копирования к 0x00000.bin
copy /b rapid_loader.bin + 0x00000.bin new_0x00000.bin
Спасибо, большое. Буду пробовать. А вообще, какое минимальное время можно получить?
 

pvvx

Активный участник сообщества
А вообще, какое минимальное время можно получить?
Со стандартным SDK не знаю.
C моим - после старта через 0.45 сек уже соединено с внешней AP и передает данные, если deep_sleep был коротким. Иначе зависит от AP, когда договорятся почти от этих 0.45 сек, обычно с выдачей ip - плюс ещё до 0.7 сек и уже соединен к примеру TCP и данные передаются...
Что делает RapidLoader - https://raw.githubusercontent.com/pvvx/Rapid_Loader/master/ESP-01-StartSignals.gif
 

Cadil

New member
C моим - после старта через 0.45 сек уже соединено с внешней AP и передает данные, если deep_sleep был коротким. Иначе зависит от AP, когда договорятся почти от этих 0.45 сек, обычно с выдачей ip - плюс ещё до 0.7 сек и уже соединен к примеру TCP и данные передаются...
У меня нет особых проблем с режимом deep sleep: ESP8266 засыпает, затем через 5 мин просыпается, подключается к BLynk'y, отправляет данные с датчиков и снова в сон.
Волнует другое, даже при таком относительно большом времени повторной записи/перезаписи в EEPROM ее срок службы составит около года в лучшем случае (см."Как избежать износа EEPROM").
Подскажите, пожалуйста, есть ли какие-то решения для ESP8266, которые позволят не затереть память до дыр за очень короткое время кроме, как увеличения времени сна?
Заранее благодарю за помощь.
 

nikolz

Well-known member
У меня нет особых проблем с режимом deep sleep: ESP8266 засыпает, затем через 5 мин просыпается, подключается к BLynk'y, отправляет данные с датчиков и снова в сон.
Волнует другое, даже при таком относительно большом времени повторной записи/перезаписи в EEPROM ее срок службы составит около года в лучшем случае (см."Как избежать износа EEPROM").
Подскажите, пожалуйста, есть ли какие-то решения для ESP8266, которые позволят не затереть память до дыр за очень короткое время кроме, как увеличения времени сна?
Заранее благодарю за помощь.
зависит от того, какой объем вам надо сохранить и как часто.
 

Cadil

New member
зависит от того, какой объем вам надо сохранить и как часто.
До сотни байт (температура, влажность, содержание СО2 - 2-4 знака) с обновлением в 1 раз в 5-10 мин.
Вообще-то планировал узнать мнение тех, кто в в теме, про кольцевой буфер, прерывания по снижению питания, счетчик числа записей, другое. Возможно, какие-то решения найдены с момента выхода публикации. Понятно, производители микросхем не спешат решать эту проблему - чем быстрее вы угробите микросхему, тем быстрее купите новую.
 

nikolz

Well-known member
До сотни байт (температура, влажность, содержание СО2 - 2-4 знака) с обновлением в 1 раз в 5-10 мин.
Вообще-то планировал узнать мнение тех, кто в в теме, про кольцевой буфер, прерывания по снижению питания, счетчик числа записей, другое. Возможно, какие-то решения найдены с момента выхода публикации. Понятно, производители микросхем не спешат решать эту проблему - чем быстрее вы угробите микросхему, тем быстрее купите новую.
для записи до 256 байт используют память RTC внутри ESP. ЕЕ никогда не затрете и она сохраняется при deep-sleep.
Если используете флеш то не надо использовать файловую систему а надо писать прямо во флеш.
Расчет простой
на ESP12 не менее 2 Мбайта свободной памяти. Если пишем 256 байт то это 8192 блока.
При 100 000 ресурса и записи 1 раз в минуту получаем 1550 лет. Вам этого хватит?
 

Cadil

New member
для записи до 256 байт используют память RTC внутри ESP. ЕЕ никогда не затрете и она сохраняется при deep-sleep.
Если используете флеш то не надо использовать файловую систему а надо писать прямо во флеш.
Расчет простой
на ESP12 не менее 2 Мбайта свободной памяти. Если пишем 256 байт то это 8192 блока.
При 100 000 ресурса и записи 1 раз в минуту получаем 1550 лет. Вам этого хватит?
Спасибо! Буду работать в этом направлении. Еще бы примерчик или хотя бы ключевые слова ...
 

Cadil

New member
зависит от того, какой объем вам надо сохранить и как часто.
В одном из предыдущих постов я указал неправильный объем информации, который надо сохранять - до сотни байт. Я упустил из виду, что еще надо сохранять логин и пароль точки доступа Wi-Fi, а также ключ BLynk (20 знаков). Прошу прощения.
Вывод простой: мне явно не уложиться в 256 байт, о которых идет речь в примере. Еще раз - извините.
 

nikolz

Well-known member
В одном из предыдущих постов я указал неправильный объем информации, который надо сохранять - до сотни байт. Я упустил из виду, что еще надо сохранять логин и пароль точки доступа Wi-Fi, а также ключ BLynk (20 знаков). Прошу прощения.
Вывод простой: мне явно не уложиться в 256 байт, о которых идет речь в примере. Еще раз - извините.
логин и пароль хранится во флеш автоматом
объем памяти для записи данных пользователя в RTC 512 байт.
system_rtc_mem_write
Function:
During deep sleep, only RTC still working, so maybe we need to save some
user data in RTC memory. Only user data area can be used by user.
|<--------system data--------->|<-----------------user data--------------->|
| 256 bytes | 512 bytes |
Note:
RTC memory is 4 bytes aligned for read and write operations. Parameter
des_addr means block number(4 bytes per block). So, if we want to save some
data at the beginning of user data area, des_addr will be 256/4 = 64,
save_size will be data length.
Теперь хватит?
 

Сергей_Ф

Moderator
Команда форума
надо сохранять логин и пароль точки доступа Wi-Fi, а также ключ BLynk (20 знаков)
а зачем их каждый раз перезаписывать? Они меняются каждую сессию? Вроде не должны. Так и храните их во флеш. От чтения он не портится, а если вы запишите его раз 20 - так это не страшно.
 

Cadil

New member
@nikolz, @Сергей_Ф - вы правы! Логин и пароль хранятся во флеш и перезаписывать каждый раз их не нужно.
Но это не мой случай. У меня логин, пароль и остальное заводятся с формы в браузере (см. картинку). Программно форма вызывается только тогда, когда невозможно подключиться сети с ранее сохраненными параметрами.
Проблема все та же - форма хранится в файловой системе (SPIFFS), ресурс которой тоже сильно ограничен. Теперь понимаю, что надо как-то перезаписывать данные с файловой системы во флеш.
Практически это можно реализовать?
 

Вложения

nikolz

Well-known member
@nikolz, @Сергей_Ф - вы правы! Логин и пароль хранятся во флеш и перезаписывать каждый раз их не нужно.
Но это не мой случай. У меня логин, пароль и остальное заводятся с формы в браузере (см. картинку). Программно форма вызывается только тогда, когда невозможно подключиться сети с ранее сохраненными параметрами.
Проблема все та же - форма хранится в файловой системе (SPIFFS), ресурс которой тоже сильно ограничен. Теперь понимаю, что надо как-то перезаписывать данные с файловой системы во флеш.
Практически это можно реализовать?
Вы немного заблуждаетесь.
пароль и логин вы вводите в браузере
но когда подключаетесь то они записываются во флеш.
SPIFFS - это тоже флеш.
Но в отличии от прямой записи во флеш в SPIFFS реализован алгоритм экономии стирания и записи в одну и туже ячейку
для работы именно с флеш и именно в страиваемых системах
Это удобно когда вы действительно сохраняете и удаляете различные файлы
Но в Вашем случае эти функции избыточны и приводят к избыточным стираниям.
------------------------
Вы можете использовать SPIFFS а хранение своих данных организовать в циклическом буфере , либо в RTC, либо во флеш.
 

Cadil

New member
...
но когда подключаетесь то они записываются во флеш.
SPIFFS - это тоже флеш. ...
Вы, похоже, забыли о своей дискуссии двухлетней давности.
Цитирую оттуда:
1. Наблюдал еще худшую ситуацию, сделал файл для сохранения текущих данных (закрывал по окончании записи), обновлял его раз в час.
через ~ месяц система рухнула. Форматировал, повторил проект, через месяц опять рухнула.
Теперь использую RTC MEM c батарейкой.

2. Да. Когда начал тестировать на объеме - 2 записи в секунду, оно стало портить фс. Придется писать логи в сеть

У меня тоже рухнула ФС. Так, что SPIFFS - это флеш, но не совсем та флеш ...
 

nikolz

Well-known member
Вы, похоже, забыли о своей дискуссии двухлетней давности.
Цитирую оттуда:
1. Наблюдал еще худшую ситуацию, сделал файл для сохранения текущих данных (закрывал по окончании записи), обновлял его раз в час.
через ~ месяц система рухнула. Форматировал, повторил проект, через месяц опять рухнула.
Теперь использую RTC MEM c батарейкой.
2. Да. Когда начал тестировать на объеме - 2 записи в секунду, оно стало портить фс. Придется писать логи в сеть

У меня тоже рухнула ФС. Так, что SPIFFS - это флеш, но не совсем та флеш ...
Это не дискуссия а результаты работы.
Как говорят в Одессе Почувствуйте разницу.
-------------
Это у Вас в этой теме дискуссия.
-----------------
Если вас интересует конкретика, то я не использую SPIFFS уже давно (ищите на форуме об этом)
Я работаю с флеш напрямую, как вам и советовал.
SPIFFS имела проблемы с максимальным объемом и длиной файла.
Сейчас не знаю так как не использую.
---------------------------
Кроме того, за прошедшее время и разработчики исправили глюки в SDK
и я кое- что написал на уровне железа для работы с ESP
В результате никаких проблем.
-----------------
Если у Вас нет конкретных вопросов, то желаю Вам успехов и прекращаю дискуссию.
Мне не интересно.
 

Сергей_Ф

Moderator
Команда форума
Логин и пароль хранятся во флеш и перезаписывать каждый раз их не нужно.
Но это не мой случай. У меня логин, пароль и остальное заводятся с формы в браузере (см. картинку).
вы их каждое включение/просыпания вводить будете? Тогда точно долго не проживёт. Ещё раз повторю: логин и пароль esp хранит сама во флеш. Вам это хранить где либо не нужно. Но можете, если сильно хотите продублировать. Остаётся неизменяемый токен/ключ. Запишите его во флеш один раз и только читайте. Записать можете "гвоздями" в коде, а можете из формы в браузере. А вот Изменяемые данные храните в RTC-памяти.
 
Сверху Снизу