Когда ESP32 входит в глубокий сон, он выключает процессор, на котором выполняется ваш код. Содержимое памяти и текущее состояние процессора теряются. Это требует энергии для поддержания содержимого памяти и состояния процессора, а точка глубокого сна заключается в том, чтобы максимально экономить электроэнергию, поэтому он перестает питать эти устройства.
Так что, когда он выходит из глубокого сна, он как будто просто включается. Ваша setup()
функция снова запустится и ей потребуется выполнить любую инициализацию снова.
Существует несколько способов сохранить состояние во время циклов сна.
Очевидно, что вы можете хранить данные во флэш-памяти, используя EEPROM
или SPIFFS
. Запись на флэш-память выполняется медленно и стоит много энергии, поэтому это не очень хорошо, если вы работаете от батареи.
Вы также можете хранить данные в статическом ОЗУ, которое является частью часов реального времени (RTC). Это ОЗУ встроено в ESP32 и поддерживается во время глубокого сна. Его содержимое будет потеряно или очищено, когда ESP32 теряет питание или мигает.
Вы можете объявить переменную для использования в RTC RAM, используя RTC_DATA_ATTR
. Например:
RTC_DATA_ATTR unsigned wakeups;
void setup() {
wakeups++;
Serial.begin(115200);
Serial.printf("%u wakeups\n", wakeups);
// do other stuff and enter deep sleep
}
Там всего 8 КБ статической памяти, поэтому вы не можете хранить там огромное количество данных.
Вы также должны быть осторожны, используя его. Хранение сложных объектов C ++ в нем почти наверняка не будет работать корректно при перезапусках глубокого сна. Сохранение указателей на данные (например, char*
, указывающих на строку C) не будет работать, поскольку данные, на которые указатель указал, будут потеряны после перезапуска из глубокого сна.
Трудно предсказать, как глубокий сон влияет на любую электронику, подключенную к ESP32. ESP32 прекратит питание своих линий GPIO во время глубокого сна. От того, останутся ли устройства включенными и как они реагируют на плавающие линии GPIO, зависит от устройства. Если они остаются включенными, они могут сохранять свое состояние из предыдущего цикла. Это действительно зависит от устройства и схемы.
Эта статья является хорошим руководством по глубокому сну и содержит больше информации.