Skip to content

Библиотека позволяет esp8266 уходить в сон на любой период (до ~585 миллиардов лет)

License

Notifications You must be signed in to change notification settings

GyverLibs/EspSleep

Repository files navigation

latest PIO Foo Foo Foo

Foo

EspSleep

Библиотека позволяет 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 байт). По умолчанию стоит самая последняя возможная ячейка - 124
  • instant - режим deepSleepInstant
  • mode - режим сна 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
  • Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
  • Какой код загружался, какая работа от него ожидалась и как он работает в реальности
  • В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код

About

Библиотека позволяет esp8266 уходить в сон на любой период (до ~585 миллиардов лет)

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages