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ч
}
Что не так с этим подходом и почему я (очевидно) вызываю ошибку?
@acpilot, 👍3
Обсуждение1 ответ
Лучший ответ:
Используйте резистор между 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.
- Преобразование byte* в int в Arduino
- Прошивать NodeMCU с помощью .ino-файла?
- NodeMCU 12E V2 Энергосбережение
- ESP8266 тратит 10 мА, даже если он находится в режиме глубокого сна
- целочисленное переполнение в выражении типа 'int' приводит к
- Уровень отладки ARDUINO IDE только для трассировки стека (nodeMCU 1.0)
- ESP8266 12-E не может подключиться ни к одной точке доступа с преобразованными переменными из строк в массивы символов
- Занимают ли комментарии место в скомпилированном скетче C++? Ардуино / узел микроконтроллера
только один момент, о котором вы можете не знать ... код, который вы показываете, предполагает, что вы думаете, что 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