Библиотека позволяет esp8266 уходить в сон на любой период (до ~585 тысяч лет)
- Выключает WiFi на время сна и включает согласно документации перед пробуждением, если режим WiFi не
RF_DISABLED
- Оффлайн калибровка RTC (времени сна) каждое пробуждение. По проведённым тестам еспшка спала 3 суток с пробуждением каждые 6 часов, время пробуждения не сместилось ни на одну минуту
esp8266
EspSleep(uint8_t rtc_offset = 124, bool instant = 0, WakeMode mode = RF_DEFAULT);
rtc_offset
- смещение для хранения остатка времени, сон занимает 4 ячейки (16 байт) из 128 (512 байт). По умолчанию стоит самая последняя возможная ячейка - 124instant
- режим deepSleepInstantmode
- режим сна wifi как в ESP.deepSleep, документация
// спать (миллисекунды, секунды, минуты, часы, дни)
void sleep(uint64_t ms, uint32_t sec = 0, uint32_t min = 0, uint16_t hour = 0, uint16_t day = 0);
// спать, микросекунды
void sleep_us(uint64_t us);
// тикер блоков сна. Вызывать в начале программы.
// Вернёт false, если это первый запуск мк и сон не запущен (true, если сон в процессе)
bool tick();
// true - первый запуск после сброса питания. ВЫЗЫВАТЬ ПОСЛЕ tick()!
bool firstStart();
// отменить текущий сон
void stop();
// === дефайны настроек (объявляется перед подключением библиотеки) ===
// блок сна, по умолчанию 2 часа. Не рекомендуется больше 3 часов!
#define MAX_SLEEP_BLOCK 2ull * 60 * 60 * 1000 * 1000
// время калибровки, мкс. Установи 0, чтобы отключить
#define RTC_CALI_BLOCK 100000
Для пробуждения по таймеру GPIO16 должен быть подключен к RST!
Остальная информация по сну в документации
esp8266 аппаратно не может спать дольше, чем ESP.deepSleepMax()
микросекунд (~3.2 часа). Поэтому сон дробится на периоды, равные максимальному времени сна, и оставшееся время сна записывается в RTC память (оперативная память, не очищающаяся при перезагрузке). Для сна в таком режиме с этой библиотекой нужно использовать конструкцию вида:
#include <EspSleep.h>
EspSleep sleep;
void setup() {
// тут просыпаемся
// можно отменить оставшийся сон через sleep.stop()
// ...
// засыпаем, если осталось время сна
// при первой подаче питания на мк ничего не происходит
sleep.tick();
// сюда попадаем, когда время сна полностью вышло!
// А также при подаче питания на мк
Serial.begin(115200);
Serial.println();
Serial.println("awake!");
// засыпаем например тут
sleep.sleep(5000);
}
void loop() {
// уйти в сон можно где угодно
// if (foo) sleep.sleep(5000);
}
- v1.0
- Библиотеку можно найти по названию EspSleep и установить через менеджер библиотек в:
- Arduino IDE
- Arduino IDE v2
- PlatformIO
- Скачать библиотеку .zip архивом для ручной установки:
- Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
- Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
- Распаковать и положить в Документы/Arduino/libraries/
- (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
- Читай более подробную инструкцию по установке библиотек здесь
- Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
- Через менеджер библиотек IDE: найти библиотеку как при установке и нажать "Обновить"
- Вручную: удалить папку со старой версией, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!
При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!
При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:
- Версия библиотеки
- Какой используется МК
- Версия SDK (для ESP)
- Версия Arduino IDE
- Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
- Какой код загружался, какая работа от него ожидалась и как он работает в реальности
- В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код