Skip to content

Библиотека для работы с микросхемой реального времени (RTC) DS3231

License

Notifications You must be signed in to change notification settings

GyverLibs/GyverDS3231

Repository files navigation

latest PIO Foo Foo Foo

Foo

GyverDS3231

Библиотека для работы с микросхемой реального времени (RTC) DS3231

  • Время считается на базе millis() и синхронизируется с RTC по таймеру
  • Встроенный секундный таймер для удобства автоматизации процессов
  • Работает на базе библиотеки Stamp
  • Возможность использовать внешний объект Wire

Совместимость

Совместима со всеми Arduino платформами (используются Arduino-функции)

Зависимости

Содержание

Использование

Библиотека считает время при помощи millis() и синхронизирует время с RTC по таймеру (по умолчанию каждый час).

// наследует StampTicker

// передать период синхронизации в секундах, умолч. 1 час
GyverDS3231(uint16_t syncPrd = 60 * 60);

// запустить и синхронизировать. Можно указать другой драйвер Wire и i2c адрес. Вернёт true при успехе
bool begin(TwoWire* wire = &Wire, uint8_t addr = 0x68);

// RTC работает корректно (чтение и валидация времени)
bool isOK();

// синхронизировать время с RTC. true при успехе, false при ошибке шины или после сброса питания RTC
bool updateNow();

// прочитать время с RTC для отладки
Datime getTime();

// установить время RTC равным локальному времени компиляции прошивки
bool setBuildTime();

// установить время RTC:
// ("hh:mm:ss") или ("yyyy-mm-dd") или ("yyyy-mm-ddThh:mm:ss")
// (unix)
// Datime(year, month, day, hour, minute, second)
bool setTime(Datime dt);

// тикер, вызывать в loop. Возвращает true каждую секунду, если время синхронизировано
bool tick();

// получить температуру чипа
float getTemp();

// получить температуру чипа
int getTempInt();

// получить смещение калибровки (значение * 0.1ppm)
int8_t getOffset();

// установить смещение калибровки (значение * 0.1ppm)
bool setOffset(int8_t offset);

Примеры

#include <GyverDS3231.h>
GyverDS3231 ds;

void setup() {
    setStampZone(3);  // указать часовой пояс, если в программе нужен реальный unix
    // если не нужен - можно не указывать (останется 0)

    Serial.begin(115200);
    Wire.begin();

    // запустить и синхронизировать время, если возможно
    ds.begin();

    // запустить на другом драйвере I2C
    // ds.begin(&customWire);

    // ИЛИ
    // если старт неудачный (например был сброс питания RTC)
    // установить время равным времении компиляции
    // if (!ds.begin()) ds.setBuildTime();

    // установка времени вручную
    // ds.setTime(123456789ul);                     // unix
    // ds.setTime(Datime(2024, 7, 27, 17, 6, 30));  // Y.M.D H:M:S
    
    // Datime dt;
    // dt.second = 34;
    // ...задать дату и время...
    // и отправить в RTC
    // ds.setTime(dt);
}

void loop() {
    // вызывать тикер в loop
    // тикер также вернёт true каждую секунду, что удобно для сравнения времени
    if (ds.tick()) {
        Serial.println(ds.toString());     // вывод даты и времени строкой
        Serial.println(ds.dateToString()); // вывод даты строкой

        // можно сравнивать напрямую с unix
        if (ds >= 12345) { }
        if (ds == 123456) { }

        ds.getUnix();  // получить unix секунды

        // парсинг unix на дату и время
        ds.second();   // секунды
        ds.minute();   // минуты и так далее

        // эффективнее использовать парсер Datime
        Datime dt(ds);  // ds само конвертируется в Datime

        dt.year;
        dt.month;
        dt.day;
        dt.hour;
        dt.minute;
        dt.second;
        dt.weekDay;
        dt.yearDay;

        // для автоматизации внутри суток удобно использовать 
        // секунды с начала суток, daySeconds()
        ds.daySeconds();

        // для удобства также есть класс DaySeconds, позволяющий задать время внутри суток
        DaySeconds dsec(5, 10, 0);  // 5 часов, 10 минут, 0 секунд

        // GyverDS3231 может сравниваться напрямую с DaySeconds
        if (ds == dsec) { }
    }
}

Версии

  • v1.0

Установка

  • Библиотеку можно найти по названию GyverDS3231 и установить через менеджер библиотек в:
    • 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

Библиотека для работы с микросхемой реального времени (RTC) DS3231

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages