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

Нужна помощь Esp8266 deep sleep - глубокий сон

gerkimuyda

New member
ок с WiFi.setAutoReconnect(true) более менее понятно а если WiFi.setAutoConnect() main loop крутится без проверкиWiFi.getAutoConnect(), эта настройка будет перезаписываться во флеше при каждом проходе loop?
Ардуина тупо вызывает wifi_station_set_auto_connect(). Что именно там сделал Espressif - я не знаю. Если они специально проверку не вставляли - тогда будет перезаписываться. Но ардуина неспроста выключает прерывания ETS_UART_INTR_DISABLE() перед этим вызовом.
Я в другом месте замечал ( по-моему wifi_station_set_config() ) - что без проверки тупо перезапись. Да и зачем разработчику париться лишними проверками? Разве он будет беспокоиться о пользователе? Быстрее выйдет из строя - быстрее новую плату купят...
 

art21_res

New member
А должно быть boot mode 3,6

7 SDIO HighSpeed V2 IO Uart1 Booting
6 SDIO LowSpeed V1 IO Uart1 Booting
5 SDIO HighSpeed V1 IO Uart1 Booting
4 SDIO LowSpeed V2 IO Uart1 Booting
3 FLASH BOOT
2 Jump Boot
1 UART Boot
0 Remapping

Разбирайтесь с правильностью сигналов на ногах при старте


Спасибо ОГРОМНОЕ! Нога GPIO-0 была соединена через резистор с DTR TTL который давал низкий сигнал. Удалил соединение с этой ногой программатора и все заработало!

11.jpg
 

art21_res

New member
@art21_res
А к ноге SENS что-либо подключено? Или это шум на "висячем" входе?
Будет фоторезистор висеть или сенсор влажности. Пока не это важно. Может просто диод мигающий.
Главное, запустил контроллер. Остальное за малым.

Пробуем теперь соединяться с интернет, засыпать, просыпаться и отправлять данные раз в час предположим.
Если что-то не сработает, напишу.

Всем большое спасибо.
 

enjoynering

Well-known member
...Но ардуина неспроста выключает прерывания ETS_UART_INTR_DISABLE() перед этим вызовом.
....Да и зачем разработчику париться лишними проверками? Разве он будет беспокоиться о пользователе? Быстрее выйдет из строя - быстрее новую плату купят...
тоже думаю что ETS_UART_INTR_DISABLE() не спроста - как раз чтоб записать настройки WIFI на флешку.

спасибо за ликбез.
 

Dmitry_I

New member
Доброй ночи. Надеюсь сюда заглянут.
Помогите разораться... модуль ESP-07, прошивка с WiFi-iot. GPIO0 подтянут к + резистором 10к. Установлена перемыка RST и GPIO16.
Модуль работает норм. Включаю deep sleep, модуль засыпает через указанное время, но уже не просыпается. Ресет дергается через заданное время , это видно по миганию диода, но модуль не грузится. Замерил уровень на GPIO0 до и после засыпания - 3,3В, после того как ресет дернет GPIO16, уровень на GPIO0 - 1.6В, т.е он остается в Low. Если же жать кнопкой ресет, то уровнь восстанавливается до Hi. Замена резистора подтяжки на 4к7 ничего не меняет. Что это может быть?
 

nikolz

Well-known member
Доброй ночи. Надеюсь сюда заглянут.
Помогите разораться... модуль ESP-07, прошивка с WiFi-iot. GPIO0 подтянут к + резистором 10к. Установлена перемыка RST и GPIO16.
Модуль работает норм. Включаю deep sleep, модуль засыпает через указанное время, но уже не просыпается. Ресет дергается через заданное время , это видно по миганию диода, но модуль не грузится. Замерил уровень на GPIO0 до и после засыпания - 3,3В, после того как ресет дернет GPIO16, уровень на GPIO0 - 1.6В, т.е он остается в Low. Если же жать кнопкой ресет, то уровнь восстанавливается до Hi. Замена резистора подтяжки на 4к7 ничего не меняет. Что это может быть?
Если GPIO0 подтянут и на нем Low, и на него ничего не подключено, то причина
в том, что в программе у Вас есть установка этого пина в режим вывода
------
Если что-то подключено, то это что-то и выдает Low.
-----------------
Отключите все кроме подтяжки от GPIO0 и проверьте поведение этого пина
при ручном сбросе и при выходе из сна.
---------------------
Кроме того, для правильного выхода из сна рекомендую поставить подтягивающий резистор RST к Vcc
а GPIO16 соединить с RST через диод Шоттки.
 
  • Like
Реакции: ubs

SugreonLeks

New member
Что бы не плодить темы, пишу сюда.
Так же столкнулся с проблемой ESP.deepSleep на ESP8266 D1 mini. Программа проста. Есть две физические кнопки, при включении модуля ESP8266 D1 mini, модуль ждёт 10 секунд на нажатие любой кнопки и уходит в ESP.deepSleep(0);. Если необходимо разбудить модуль, делаю это через кнопку RESET. Но модуль полноценно просыпается после двух нажатий. В мониторе пишет такое:

Первое нажатие:
ets Jan 8 2013,rst cause:2, boot mode:(3,6)

Второе нажатие :

ets Jan 8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 3584, room 16
tail 0
chksum 0xb0
csum 0xb0
v2843a5ac
~ld

и модуль работает полноценно.

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

nikolz

Well-known member
Что бы не плодить темы, пишу сюда.
Так же столкнулся с проблемой ESP.deepSleep на ESP8266 D1 mini. Программа проста. Есть две физические кнопки, при включении модуля ESP8266 D1 mini, модуль ждёт 10 секунд на нажатие любой кнопки и уходит в ESP.deepSleep(0);. Если необходимо разбудить модуль, делаю это через кнопку RESET. Но модуль полноценно просыпается после двух нажатий. В мониторе пишет такое:

Первое нажатие:
ets Jan 8 2013,rst cause:2, boot mode:(3,6)

Второе нажатие :

ets Jan 8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 3584, room 16
tail 0
chksum 0xb0
csum 0xb0
v2843a5ac
~ld

и модуль работает полноценно.

Много прочитал статей, ставил кучу резисторов, паял их по разным схемам, и результат один и тот же, и главное что ничего не меняется.
Что можете посоветовать для решения этой проблемы?
Меня устроит любой вариант усыпить модуль и разбудить его по нажатию на RESET.
для начала поставьте параллельно кнопки RST емкость побольше. резистор от RST к Vcc 10 ком.
 

Kabron

Member
По моим наблюдениям, ESP8266, неприлично долго уходит в сон ~100 mS.
У Кто ни будь исследовал вопрос?
 

Kabron

Member
Собсна прога завершается за 100 мс, а еще 100 он неизвестно чем занимается.
 

Вложения

pvvx

Активный участник сообщества
Собсна прога завершается за 100 мс, а еще 100 он неизвестно чем занимается.
Эта тема разбиралась десятки раз. Давно есть две процедуры - тормозная, с зарядкой таймера на 100 ms и более быстрая.
Но ни одна не делает правильного завершения - отключения от AP по стандарту WiFi. Это вы должны делать сами.

В старых SDK по команде deep-sleep закрываются все соединения, заряжается софт-таймер на 100 мс. По срабатыванию таймера отключается всё остальное, а команда deep-sleep для Flash передается в самом конце, в процедуре находящейся в IRAM вызываемой как call() из Flash, затем выключается питание CPU через регистры RTC, но это происходит медленно, с тактом у RTC в несколько мкс и проц успевает выполнить стоящую за выводом в регистры RTC команду ret, вернуться в место вызова из уже выключенной Flash и "кэш", нарваться на exсeption и прописать код exсeption в "EEPROM", благополучно затерев ID кода завершения указывающий что по старту надо восстановление после deep-sleep...
В новых версиях SDK наверно всё ещё ужаснее...
 

pvvx

Активный участник сообщества
По моим наблюдениям, ESP8266, неприлично долго уходит в сон ~100 mS.
Кроме ухода в сон, так-же особенно страшное творится при просыпании. Т.к. код завершения прошлой сессии активности в RTC нестабилен из-за описанной безалаберности программистов SDK, то по старту наляпана дикая разборка всё равно не выясняющая что-же действительно было...
И так c 90% кода в ESP8266. Привыкайте.
 
Сверху Снизу