- Библиотеки
- Операторы
- Sketch
- Управляющие операторы
- Синтаксис
- Арифметические операторы
- Операторы сравнения
- Логические операторы
- Указатели доступа
- Битовые операторы
- Составные операторы
- Данные
- Типы данных
- Преобразование типов данных
- Область видимости переменных и квалификаторы
- Утилиты
- Цифровой ввод/вывод
- Аналоговый вход/выход
- Расширенный ввод/вывод
- Время
- Математические функции
- Тригонометрические функции
- Символы
- Случайные числа
- Биты и байты
- Внешние Прерывания
- Прерывания
- Функции передачи данных
- Функции
- Устройства
- Датчики
- Модули
- Модуль часов реального времени
Модуль часов реального времени
Модуль часов реального времени (RTC)
RTC (Real Time Clock) — это микросхема с кварцевым резонатором и батарейкой, которая отслеживает текущее время и дату даже при выключенном питании. Популярные модули: DS1307, DS3231.
- DS1307 – простой, но менее точный (дрейф до минут в месяц).
- DS3231 – высокоточный, с температурной компенсацией (дрейф всего несколько секунд в год).
Подключение к Arduino Nano
Модули DS1307/DS3231 работают по I2C, поэтому подключение одинаковое:
RTC вывод | Arduino Nano |
VCC | 5V (или 3.3В для некоторых модулей) |
GND | GND |
SDA | A4 |
SCL | A5 |
Дополнительные выводы у DS3231:
RTC вывод | Arduino Nano |
32k | Выход генератора 32768 Гц |
SQW | Выход прямоугольного сигнала. Частота задается с помощью регистра управления 0x0E и может составлять 1, 1024, 4096 или 8192 Гц |
Пример скетча (с библиотекой RTClib)
Устанавливается через Arduino IDE → Менеджер библиотек → RTClib (от Adafruit)
#include <Wire.h>
#include "RTClib.h"
RTC_DS3231 rtc;
void setup() {
Serial.begin(9600);
if (!rtc.begin()) {
Serial.println("RTC не найден!");
while (1);
}
if (rtc.lostPower()) {
Serial.println("RTC потерял питание, установка времени!");
// Устанавливаем время компиляции скетча
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
DateTime now = rtc.now();
Serial.print(now.day());
Serial.print('.');
Serial.print(now.month());
Serial.print('.');
Serial.print(now.year());
Serial.print(" ");
Serial.print(now.hour());
Serial.print(':');
Serial.print(now.minute());
Serial.print(':');
Serial.println(now.second());
delay(1000);
}
Основные команды библиотеки RTClib
Объекты
RTC_DS3231 rtc; // для DS3231
RTC_DS1307 rtc; // для DS1307
Инициализация
rtc.begin(); // запуск модуля
rtc.lostPower(); // проверка: потерял ли питание
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // установка времени (по времени компиляции)
rtc.adjust(DateTime(2025, 9, 22, 21, 30, 0)); // установка вручную (год, месяц, день, час, минута, секунда)
Получение времени
DateTime now = rtc.now();
now.year(); // год
now.month(); // месяц
now.day(); // день
now.hour(); // часы
now.minute(); // минуты
now.second(); // секунды
now.unixtime(); // время в формате UNIX
DS3231 дополнительные возможности
rtc.getTemperature(); // получить температуру (°C)