ESP.deepSleep() — снова и снова?

Важное примечание: функция esp.deepsleep использует микросекунды, а не миллисекунды.

Я разместил еще один вопрос здесь с просьбой разъяснить, как можно использовать RTC для перевода NodeMCU 12 в спящий режим на длительное время (~ 24 часа или больше).

Этот вопрос касается использования ESP.deepSleep([микросекунды]) с платой NodeMCU 12. здесь есть обсуждение, и я последовал совету, но не смог успешно реализовать функция ESP.deepSleep() с использованием Arduino IDE и платы NodeMCU 12.

Первоначальные выводы:
-Подключение gpio16 (D0) к контакту RST вызывает сброс сразу после перехода в спящий режим. Весь процесс загрузки и цикл повторяются снова и снова.
-Простое использование функции ESP.deepSleep() без gpio16-to-RST генерирует тарабарщину на последовательном мониторе и зажигает красный светодиод на плате.

Мой код здесь (я просто добавляю "deepsleep();" там, где хочу, чтобы начался процесс сна):

void deepsleep() {
  Serial.println("sleeping hr 1");
  ESP.deepSleep(3600000); //1 час
  delay(100);
  Serial.println("sleeping hr 2");
  ESP.deepSleep(3600000); //2 часа
  delay(100);
  Serial.println("sleeping hr 3");
  ESP.deepSleep(3600000); //3 часа
  delay(100);
  Serial.println("sleeping hr 4");
  ESP.deepSleep(3600000); //4 часа
  delay(100);
  Serial.println("sleeping hr 5");
  ESP.deepSleep(3600000); //5ч
  delay(100);
  Serial.println("sleeping hr 6");
  ESP.deepSleep(3600000); //6ч
  delay(100);
  Serial.println("sleeping hr 7");
  ESP.deepSleep(3600000); //7ч
  delay(100);
  Serial.println("sleeping hr 8");
  ESP.deepSleep(3600000, WAKE_RF_DEFAULT);  //8ч
}

Что не так с этим подходом и почему я (очевидно) вызываю ошибку?

, 👍3

Обсуждение

только один момент, о котором вы можете не знать ... код, который вы показываете, предполагает, что вы думаете, что ESP продолжит работу после глубокого сна после пробуждения - это не так. после того, как он выходит из глубокого сна, он выполняет процесс загрузки (с причиной загрузки, указывающей, что он вышел из спящего режима) - когда вы говорите, что «весь процесс загрузки повторяется», вы имеете в виду немедленно? или через 1 час?, @Jaromanda X

Немедленный. Извините за путаницу., @acpilot

ну это нехорошо - если бы через 1 час, то решение простое, а вот сразу проблематично, @Jaromanda X

Как исправить ошибку 1 час?, @acpilot

Не знаю, что вы имеете в виду. Учитывая, что вы говорите, что ESP **совсем** не спит глубоко, вопрос не имеет смысла., @Jaromanda X

Это то, с чем люди могут столкнуться в какой-то момент, и, если это простой ответ, нам всем лучше знать, как его решить. Даже простое объяснение может указать кому-то правильное направление., @acpilot

но это не **ваша** проблема. Во всяком случае, решение, о котором я говорю в отношении кода, который вы разместили, заключается в простом знании того, что когда ESP выходит из глубокого сна, он проходит полный процесс **загрузки**, не продолжается с где он остановился. Вы можете использовать system_rtc_mem, чтобы сохранить некоторое простое "состояние", чтобы при загрузке вы знали, является ли это начальной загрузкой или выходом из глубокого сна (и из какого глубокого сна вы проснулись) - [парень с швейцарский акцент](https://github.com/SensorsIot/ESP8266-RTC-Memory) содержит несколько хороших примеров кода, @Jaromanda X


1 ответ


Лучший ответ:

4

Используйте резистор между GPIO16 и RST. Я обычно использую резистор 470 Ом. Замыкание контактов проводом не работает.

https://www.esp8266.com/viewtopic.php?t=14350#p64510

Максимальная продолжительность глубокого сна составляет около 71 минуты. 3600000 микросекунд = 3,6 секунды, а не 1 час. 1 час в микросекундах равен 3600000000UL.

Как упоминалось в комментариях, выход из глубокого сна на ESP8266 представляет собой аппаратный сброс, поэтому выполнение начинается с запуска функции настройки.

,

Каждая схема для глубокого сна, которую я когда-либо видел, не имеет резистора. Я думаю, что единственная проблема была в интервале сна, @Jaromanda X

входы имеют высокое сопротивление, поэтому добавление 470 Ом практически не меняет, @dandavis

Да, в связанной теме говорится *также* об использовании внешнего метода сброса платы. В этом случае вам понадобится резистор, а не просто подключение GPIO к RST., @Peter K.