Часы реального времени · разбор
Часы реального времени и Arduino: DS3231, DS1307 и RTClib
Плата не знает, который час. Выключили питание — и время начинается с нуля. Разбираем модуль, который решает это раз и навсегда: чем DS3231 отличается от DS1307, почему время откатывается после каждой прошивки, сколько на самом деле живёт батарейка и когда модуль не нужен вовсе. Схемы на странице живые, все числа — из даташитов и карточек наших модулей.
Короткий ответ для нетерпеливых. Берите модуль на DS3231: четыре провода, адрес на шине 0x68, библиотека RTClib. Время ставится один раз — и главная ошибка новичка в том, что строку установки времени забывают убрать, поэтому после каждой прошивки часы возвращаются в прошлое.
Зачем вообще отдельный модуль
Микроконтроллер умеет считать миллисекунды с момента включения — этим и пользуются, когда делают таймер или секундомер. Но у такого счёта две беды. Первая очевидна: пропало питание — счёт начался заново. Вторая коварнее.
На плате Arduino Uno частоту процессору задаёт не кварц, а керамический резонатор. Его паспортный допуск — ±0,5 %, и ещё ±0,3 % добавляет температура. Половина процента от суток — это семь минут двенадцать секунд. Конкретный экземпляр обычно ведёт себя гораздо лучше, но гарантии нет никакой, и от платы к плате уход разный. Любопытная деталь: настоящий кварц на плате есть — он стоит у микросхемы, которая отвечает за USB, потому что связи с компьютером точность нужна, а вашему скетчу, по мнению разработчиков платы, не очень.
Модуль часов решает обе беды сразу: у него своя микросхема, свой задающий элемент и своя батарейка. Плата просто спрашивает: «который час?»
Насколько уходят разные часы
Точность принято мерить в миллионных долях — ppm. Одна миллионная доля за год даёт около 31 секунды. Дальше простая арифметика, и она выглядит внушительно.
У DS3231 внутри не просто кварц, а кварц с поправкой: микросхема раз в 64 секунды измеряет собственную температуру и подстраивает генератор по встроенной таблице. Именно это, а вовсе не «кварц внутри корпуса», и даёт минуту в год. Паспорт обещает уложиться в две минуты в год даже в диапазоне от минус сорока до плюс восьмидесяти пяти градусов.
У DS1307 своей точности нет вообще: в его даташите в разделе про точность нет ни одной цифры — там написано, что всё зависит от внешнего кварца, от того, совпала ли его нагрузочная ёмкость, и от температуры. Обычный часовой кварц имеет допуск ±20 ppm при комнатной температуре, а при отходе от неё частота падает по параболе. Отсюда и практические «минута в месяц».
Есть и третья составляющая, о которой почти не пишут, — старение. Кварц медленно меняет частоту просто от времени: даташит DS3231 нормирует ±1 ppm за первый год и до ±5 ppm за десять лет. То есть десятилетние часы будут уходить заметнее новых, и это тоже норма.
Какую микросхему выбрать
| Микросхема | Точность | Питание | Что ещё умеет | Когда брать |
|---|---|---|---|---|
DS3231 | Около минуты в год: внутри поправка на температуру | 3,3 или 5 вольт | Два будильника, термометр, выход опорной частоты | Когда время должно быть точным и подводить его некому |
DS1307 | Около десяти минут в год: обычный кварц снаружи | Только 5 вольт | Выход прямоугольного сигнала | Когда часы под рукой и раз в месяц их не жалко подвести |
RX-8025T | Между двумя предыдущими, с температурной поправкой | 3,3 или 5 вольт | Будильник, таймер, выход сигнала | Когда нужен запас по точности, но не по цене |
DS1302 | Как у DS1307: всё зависит от кварца | 2…5,5 вольта | Свои три провода вместо общей шины, будильников нет | Почти не берут: занимает три ножки и не живёт на общей шине |
Одно ограничение стоит запомнить заранее: у DS1307 и DS3231 один и тот же адрес на шине — 0x68, и поменять его нечем. Два модуля часов на одну шину не повесить, даже если микросхемы разные.
И ещё одно, важное для плат с Wi-Fi: DS1307 по паспорту требует от 4,5 до 5,5 вольта. Хуже того, когда питание опускается ниже примерно 3,75 вольта, он считает, что основного питания больше нет, переходит на батарейку и перестаёт отвечать по шине. Время при этом идёт, но прочитать его нельзя. Поэтому с ESP8266 и ESP32, где логика трёхвольтовая, берут DS3231.
Что на модуле и где ловушка
Про цепь подзарядки стоит сказать отдельно, потому что это единственное место, где ошибка может закончиться не «не работает», а испорченной батарейкой. На части модулей рядом с держателем распаяны диод и резистор на 200 ом — это зарядное устройство для аккумулятора LIR2032, который внешне не отличается от обычной батарейки CR2032. Если в такой модуль поставить обычную таблетку и запитать модуль пятью вольтами, её начнут заряжать. Производитель CR2032 нормирует предельно допустимый зарядный ток как 1 микроампер — то есть заряжать её нельзя вообще. Приятная деталь: при питании модуля от 3,3 вольта диод в этой цепи не открывается, и заряда нет.
На модулях линейки Trema, которые продаём мы, батарейка указана в паспорте прямо: CR1220 или CR1225 — обычные, не аккумуляторы. Если модуль пришёл откуда-то ещё, сверьтесь с его паспортом, прежде чем вставлять таблетку.
Как подключить
Модуль живёт на шине I2C — это два провода на любое количество устройств. Подробно про саму шину, адреса и сканер написано в разборе «Шина I2C в Arduino»; здесь только то, что относится к часам.
| Вывод модуля | Uno, Nano, Mega | ESP32 и ESP8266 | Зачем |
|---|---|---|---|
VCC | 5V | 3V3 | Модулю на DS1307 нужны именно 5 вольт |
GND | GND | GND | Общая земля обязательна, без неё шина молчит |
SDA | A4 | GPIO 21 у ESP32, D2 у ESP8266 | Линия данных |
SCL | A5 | GPIO 22 у ESP32, D1 у ESP8266 | Линия тактов |
SQW / INT | Любой вывод с прерыванием: 2 или 3 | Любой свободный | Нужен только для будильника |
32K | Не подключают | Не подключают | Отдельный выход 32 768 колебаний в секунду |
Обязательных проводов четыре, и первый признак, что всё собрано верно, — сканер шины видит адрес 0x68. Если модуль покрупнее, рядом появится ещё 0x57: это отдельная микросхема памяти на четыре килобайта, часам она не нужна, но на шине видна.
Первый скетч: показать время
Здесь сразу правильный порядок: время ставится не всегда, а только если часы теряли питание. Библиотека сама хранит этот признак в микросхеме.
// Часы, которые не сбиваются. Время ставится ОДИН раз: при первом запуске
// или после того, как села батарейка. Дальше модуль считает секунды сам —
// хоть с выключенной платой.
#include <Wire.h>
#include <RTClib.h>
RTC_DS3231 rtc;
const char *WEEKDAYS[] = {"воскресенье", "понедельник", "вторник", "среда",
"четверг", "пятница", "суббота"};
void setup() {
Serial.begin(9600);
if (!rtc.begin()) {
Serial.println("Модуль часов не отвечает. Проверьте SDA, SCL и питание");
while (true) {
;
}
}
// Флаг взводится только когда часы теряли питание совсем:
// батарейка села или её ещё не ставили.
if (rtc.lostPower()) {
Serial.println("Часы сбились — ставлю время момента компиляции");
rtc.adjust(DateTime(__DATE__, __TIME__));
} else {
Serial.println("Часы идут своим ходом, время не трогаю");
}
}
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(":");
if (now.minute() < 10) {
Serial.print("0");
}
Serial.print(now.minute());
Serial.print(":");
if (now.second() < 10) {
Serial.print("0");
}
Serial.print(now.second());
Serial.print(", ");
Serial.print(WEEKDAYS[now.dayOfTheWeek()]);
Serial.print(", в корпусе ");
Serial.print(rtc.getTemperature());
Serial.println(" градусов");
delay(1000);
}
Строка с установкой времени подставляет момент, когда скетч был скомпилирован. Это удобно ровно один раз, и именно она — источник самой частой жалобы: «загружаю скетч, а часы показывают вчерашнее». Разгадка в том, что при повторной загрузке того же файла в микросхему снова уезжает старый момент компиляции. Пока признак потери питания проверяется, беды нет; уберите проверку — и часы будут отматываться назад при каждой прошивке.
Про термометр в скетче. DS3231 действительно умеет отдавать температуру, но нужна она ему для собственной поправки, а паспортная погрешность — около трёх градусов. Как термометр комнаты он не годится: для этого есть DS18B20 и DHT22.
Будильник, который не зависит от программы
Обычно будильник пишут так: каждую секунду сравнить текущее время с заданным. Работает, но пока скетч занят чем-то долгим, момент можно пропустить. У DS3231 будильники встроены: микросхема сама сравнивает время и прижимает свою ножку, когда совпало. Плате остаётся заметить это.
// Будильник живёт в самом модуле часов. Плата не считает время и не сравнивает
// его каждую секунду — она просто ждёт, когда модуль прижмёт свою ножку INT.
// Так будильник срабатывает точно в секунду, даже если скетч занят другим.
#include <Wire.h>
#include <RTClib.h>
RTC_DS3231 rtc;
const int ALARM_PIN = 2; // ножка INT/SQW модуля, подтяжка включается внутри платы
const int BUZZER_PIN = 8;
const int ALARM_HOUR = 7;
const int ALARM_MINUTE = 30;
void setup() {
Serial.begin(9600);
pinMode(ALARM_PIN, INPUT_PULLUP);
pinMode(BUZZER_PIN, OUTPUT);
if (!rtc.begin()) {
Serial.println("Модуль часов не отвечает");
while (true) {
;
}
}
// Прямоугольный сигнал на выходе нам не нужен: ножка должна работать
// как сигнал будильника, иначе она всё время дёргается сама.
rtc.writeSqwPinMode(DS3231_OFF);
rtc.disableAlarm(2);
rtc.clearAlarm(1);
// Совпадать должны часы и минуты, дата не важна — значит, каждый день.
rtc.setAlarm1(DateTime(2026, 1, 1, ALARM_HOUR, ALARM_MINUTE, 0),
DS3231_A1_Hour);
Serial.println("Будильник заведён");
}
void loop() {
if (rtc.alarmFired(1)) {
Serial.println("Подъём!");
for (int i = 0; i < 10; i++) {
tone(BUZZER_PIN, 2000, 200);
delay(400);
}
// Пока не сбросим признак, модуль держит ножку прижатой и молчит дальше.
rtc.clearAlarm(1);
}
delay(200);
}
Будильников два. Первый умеет совпадать вплоть до секунды, второй — до минуты. Признак срабатывания нужно сбрасывать вручную: пока он взведён, ножка остаётся прижатой, и следующего сигнала не будет.
Расписание: полив и свет
Самое частое, ради чего покупают модуль, — не показывать время, а действовать по нему. Здесь важна деталь: свет включается по промежутку часов, а полив — один раз в сутки, и чтобы он не повторился шестьдесят раз за минуту, плата запоминает день, в который уже поливала.
// Расписание: свет включается вечером и гаснет ночью, полив идёт утром.
// Плата ничего не считает и не запоминает — она просто спрашивает у модуля,
// который час, и сравнивает с расписанием. После отключения света расписание
// продолжает работать с той же минуты, потому что время не терялось.
#include <Wire.h>
#include <RTClib.h>
RTC_DS3231 rtc;
const int LIGHT_PIN = 7;
const int PUMP_PIN = 8;
const int LIGHT_ON_HOUR = 19;
const int LIGHT_OFF_HOUR = 23;
const int PUMP_HOUR = 7;
const int PUMP_MINUTE = 0;
const unsigned long PUMP_SECONDS = 20;
int lastPumpDay = -1;
// Правда ли, что текущий час попадает в промежуток между двумя часами.
bool betweenHours(int hour, int from, int to) {
if (from < to) {
return hour >= from && hour < to;
}
// Расписание через полночь: например, с 22 до 6.
return hour >= from || hour < to;
}
void setup() {
Serial.begin(9600);
pinMode(LIGHT_PIN, OUTPUT);
pinMode(PUMP_PIN, OUTPUT);
if (!rtc.begin()) {
Serial.println("Модуль часов не отвечает. Проверьте SDA, SCL и питание");
while (true) {
;
}
}
if (rtc.lostPower()) {
Serial.println("Часы сбились: поставьте время и прошейте ещё раз");
}
}
void loop() {
DateTime now = rtc.now();
digitalWrite(LIGHT_PIN, betweenHours(now.hour(), LIGHT_ON_HOUR, LIGHT_OFF_HOUR));
// Полив ровно один раз в сутки: запоминаем день, в который уже поливали.
bool pumpTime = now.hour() == PUMP_HOUR && now.minute() == PUMP_MINUTE;
if (pumpTime && now.day() != lastPumpDay) {
lastPumpDay = now.day();
Serial.println("Полив");
digitalWrite(PUMP_PIN, HIGH);
delay(PUMP_SECONDS * 1000);
digitalWrite(PUMP_PIN, LOW);
}
delay(1000);
}
Наша библиотека: то же самое короче
В каталоге есть iarduino_RTC — она знает четыре микросхемы сразу и выдаёт время готовой строкой, где буква означает часть даты. И у неё есть особенность, на которой спотыкаются все.
// То же самое, но нашей библиотекой iarduino_RTC. Она знает несколько
// микросхем сразу и выдаёт время готовой строкой: буква означает часть даты.
// ВАЖНО: Wire.h подключается ВЫШЕ, иначе библиотека не увидит шину I2C
// и компилятор скажет, что у класса нет метода begin.
#include <Wire.h>
#include <iarduino_RTC.h>
iarduino_RTC clockModule(RTC_DS3231);
void setup() {
Serial.begin(9600);
delay(300);
clockModule.begin();
// Порядок: секунды, минуты, часы, день, месяц, год, день недели.
// Эту строку оставляют лишь на одну прошивку: иначе при каждой перезагрузке
// часы будут возвращаться в один и тот же момент.
clockModule.settime(0, 30, 12, 24, 8, 26, 0);
}
void loop() {
// d — день, m — месяц, Y — год, H — часы, i — минуты, s — секунды, D — день недели.
Serial.println(clockModule.gettime("d-m-Y, H:i:s, D"));
delay(1000);
}
Порядок подключения здесь важен. Строка с Wire обязана стоять выше строки с iarduino_RTC: библиотека смотрит, доступна ли аппаратная шина, в момент разбора заголовка. Если поменять строки местами, компилятор напишет, что у класса нет метода begin — сообщение, по которому догадаться о причине невозможно. Мы это специально воспроизвели на сборке.
Какие библиотеки бывают
| Библиотека | Что подключают | Микросхемы | Особенности |
|---|---|---|---|
| RTClib | RTClib.h | DS3231, DS1307, PCF8523, PCF8563 | Самая ходовая. Умеет будильники DS3231, даёт удобный тип «дата и время» |
| iarduino_RTC | iarduino_RTC.h | DS1302, DS1307, DS3231, RX-8025 | Наша. Выдаёт время готовой строкой; подключается строго после Wire |
| uRTCLib | uRTCLib.h | DS1307, DS3231 | Экономит память платы: пригодится, когда скетч уже не влезает |
| DS1307RTC + TimeLib | DS1307RTC.h | DS1307, DS3231 | Старая связка из двух библиотек, встречается в чужих примерах |
| Rtc by Makuna | RtcDS3231.h | DS1302, DS1307, DS3231 | Подробная работа с признаками и будильниками, разные заголовки под чипы |
Все пять есть в каталоге библиотек, и искать их можно прямо по строке подключения. Как поставить библиотеку — разобрано в «Библиотеки Arduino».
Сколько живёт батарейка
Считается делением: ёмкость батарейки на ток, который часы берут без питания платы. По даташиту DS3231 берёт от батарейки около 0,84 микроампера, DS1307 — и вовсе десятые доли микроампера. Наши карточки указывают предельные значения: до 3,5 микроампера у DS3231 и до 0,8 у DS1307.
| Батарейка | Ёмкость | При типовом токе DS3231 | При предельном токе из паспорта модуля |
|---|---|---|---|
CR1220 | около 35 мА·ч | около четырёх с половиной лет | чуть больше года |
CR2032 | около 220 мА·ч | дольше, чем живёт сама батарейка | около семи лет |
На практике верхнюю границу задаёт не расход, а саморазряд литиевой таблетки — около процента в год. Поэтому «пять лет» и «двадцать лет» на бумаге на деле означают одно и то же: батарейку меняют раз в несколько лет. А вот если она садится за пару месяцев — это неисправность, и первое, что стоит проверить, — нет ли на модуле цепи подзарядки.
Когда модуль не нужен
Если у платы есть Wi-Fi, время можно спросить у сервера точного времени, и тогда часы не нужно ни заводить, ни подводить — это разобрано в статье «Wi-Fi для Arduino». Модуль остаётся нужен там, где сети может не быть: теплица, дача, прибор, который включают в поле. Лучший вариант — оба сразу: сеть подводит часы, когда доступна, модуль держит время, когда сети нет.
И наоборот, модуль не спасёт, если задача — просто отмерять промежутки: «раз в пять секунд», «через минуту после нажатия». Для этого достаточно счётчика платы, и как им пользоваться, написано в «millis и delay».
Что делать, если не работает
| Что видно | Почему так | Что сделать |
|---|---|---|
| После каждой прошивки время откатывается назад | В скетче осталась безусловная установка времени | Ставить время только по признаку «часы теряли питание» или один раз, отдельным скетчем |
| Время сбрасывается после выключения платы | Батарейки нет, она села или вставлена не той стороной | Плюс таблетки смотрит вверх, к пружинке прижимается минус; проверьте напряжение — должно быть около 3 вольт |
| Модуль не отвечает вовсе | Перепутаны SDA и SCL или нет питания | Запустите сканер шины: часы обязаны отозваться на 0x68 |
| Сканер находит 0x57 и 0x68 | На модуле рядом с часами стоит микросхема памяти | Так и должно быть, это не поломка |
| Модуль на DS1307 молчит на плате ESP | Ему нужно 5 вольт, а плата даёт 3,3 | Взять модуль на DS3231 или запитать DS1307 от пяти вольт, согласовав уровни |
| Часы уходят на минуту в месяц | Это DS1307 — нормальный результат для обычного кварца | Если нужна точность, ставьте DS3231; подводить время программно бессмысленно |
| Часы уходят, хотя стоит DS3231 | Модуль греется рядом с чем-то тёплым или это не DS3231 | Прочитайте маркировку на микросхеме и отодвиньте модуль от стабилизатора и радиомодуля |
| Батарейка садится за пару месяцев | Батарейка старая, либо модуль пытается её заряжать | Проверьте, нет ли на плате цепи подзарядки под аккумулятор, и что написано в паспорте модуля |
| Компилятор пишет, что у класса нет метода begin | Строка с подключением Wire стоит ниже строки с библиотекой часов | Поменять две строки местами: Wire подключается первой |
| Компилятор не находит RTClib.h | Библиотека не установлена | Поставить её из каталога прямо в среде — по имени файла из строки подключения |
| Термометр модуля показывает не то, что термометр в комнате | Он меряет температуру собственного кристалла, погрешность около трёх градусов | Для измерения комнаты взять отдельный датчик |
| Два модуля часов на одной шине конфликтуют | И у DS1307, и у DS3231 адрес намертво зашит один и тот же | Второй модуль на ту же шину не повесить: адрес не меняется |
Что понадобится
Всё перечисленное есть у нас; цены и наличие проверены 24.08.2026, ссылки ведут в магазин iarduino.ru.
Часы реального времени DS3231 (Trema-модуль)
Главный герой страницы: точность около минуты в год, питание и 3,3, и 5 вольт, адрес на шине 0x68. Плата 30×30 мм, батарейка CR1220 — обычная, не аккумулятор, так что подзаряжать её никто не пытается.
Часы реального времени DS1307Z (Trema-модуль)
Вдвое дешевле, тот же адрес и та же библиотека, но без поправки на температуру: уход около минуты в месяц. Питание — ровно 5 вольт, поэтому с платами ESP напрямую он не дружит. Зато резервную батарейку тратит вчетверо экономнее.
Часы реального времени DS1307Z с памятью
Тот самый «модуль покрупнее» со схемы: рядом с часами стоит микросхема памяти на четыре килобайта с адресом 0x57 — в неё удобно складывать показания датчиков с отметкой времени. Крепится монтажными отверстиями.
Батарейка CR1220
Та самая таблетка для модулей Trema: три вольта, около 35 мА·ч. Часы от неё идут годами, но раз в несколько лет её всё-таки меняют — иначе однажды утром время окажется нулевым.
Четырёхразрядный индикатор, красный
Чтобы часы стали часами, а не строчками в мониторе порта. Индикатор садится на ту же шину, что и модуль времени, — двумя проводами и с двоеточием посередине, как на будильнике.
Зуммер (Trema-модуль)
Для будильника из второго скетча. Умеет не пищать одной нотой, а играть мелодию: резонансная частота 2048 герц, громкость от 85 децибел — поднимет.
Соединительные провода «папа-мама», 40 штук
Ровно то, чем модуль соединяется с платой: «мама» садится на штырьки модуля, «папа» — в гнёзда платы. Длина 20 см, десять цветов по четыре провода.
Что для этого нужно в среде
- Каталог библиотек внутри программы —
RTClibиiarduino_RTCставятся из окна библиотек по названию или прямо по строке подключения, без походов на чужие сайты. - Русские карточки ошибок — «библиотека не найдена» объясняется по-русски и сразу предлагает поставить нужную.
- Монитор порта — время из первого скетча видно там же, где и всё остальное, без отдельной программы.
- Сканер шины — готовый пример в разделе полезных скетчей: он и покажет, отвечает ли модуль на 0x68.
Вопросы и ответы
Коротко о главном
Если чего-то не хватает — напишите нам через форму поддержки, мы дополняем страницы по реальным вопросам.
Почему после каждой прошивки часы показывают старое время?
Потому что в скетче стоит установка времени, и она выполняется при каждом запуске. Самый частый вариант — подставить в модуль момент компиляции: в первую прошивку это удобно, но при следующей загрузке того же файла в часы попадёт то же самое старое время. Правильно ставить время один раз, а дальше только проверять признак «часы теряли питание» и трогать их лишь тогда.
Сканер шины находит два адреса вместо одного — модуль бракованный?
Нет, это нормально. Сами часы отвечают на адрес 0x68. На модулях покрупнее рядом с часами распаяна отдельная микросхема памяти на четыре килобайта, у неё свой адрес — 0x57. Часам она не нужна, но на шине видна. Если адресов вообще не видно, дело обычно в питании или в перепутанных SDA и SCL.
Какую батарейку ставить в модуль часов и надолго ли её хватает?
Литиевую таблетку на три вольта того размера, который указан в паспорте модуля. Считается просто: ёмкость батарейки делят на ток, который часы берут без питания платы. Маленькая CR1220 на 35 миллиампер-часов при токе 3,5 микроампера тянет чуть больше года, крупная CR2032 на 220 миллиампер-часов — несколько лет. Важно: на части модулей стоит цепь подзарядки под аккумулятор, и обычную батарейку в такой модуль ставить нельзя.
DS1307 или DS3231 — что выбрать?
DS3231, если время должно быть точным: у него внутри поправка на температуру, и уход составляет около минуты в год против примерно десяти минут в год у DS1307. DS1307 дешевле, экономнее расходует резервную батарейку и вполне годится, когда время подводят вручную раз в месяц. Ещё одно различие важно для плат ESP: модулю на DS1307 нужно ровно пять вольт, а модуль на DS3231 работает и от 3,3 вольта.
Нужен ли модуль часов, если плата умеет выходить в интернет?
Не всегда. Плата с Wi-Fi может спросить точное время у сервера точного времени, и тогда часы не нужно ни заводить, ни подводить. Модуль нужен там, где сети может не быть: в теплице, на даче, в приборе, который включают в поле. Хорошее решение — оба сразу: сеть подводит часы, когда доступна, а модуль держит время, когда сети нет.
Часы уходят на минуту в месяц — это брак?
Смотря какая микросхема. Для DS1307 это нормальный результат: он считает импульсы обычного часового кварца, а тот заметно зависит от температуры. Для DS3231 минута в месяц — уже перебор: заявленная точность даёт около минуты в год. Проверьте, действительно ли на модуле стоит DS3231, и не грелся ли он рядом с чем-то тёплым.
Компилятор пишет, что у класса нет метода begin. Что не так?
Скорее всего, перепутан порядок подключения библиотек. Библиотеке iarduino_RTC нужно, чтобы строка с подключением Wire стояла выше строки с подключением самой библиотеки: она смотрит, доступна ли аппаратная шина I2C, в момент разбора заголовка. Поменяйте две строки местами — и метод появится. Это один из немногих случаев в Arduino, где порядок подключения действительно важен.
Дальше по теме
Часы-будильник без модуля, на счётчике платы — урок 31. Как устроена шина, на которой живёт модуль — Шина I2C. Время из интернета без всякого модуля — Wi-Fi для Arduino. Как поставить библиотеку — Библиотеки Arduino. Куда сложить показания с отметкой времени — Память Arduino. Какие ещё бывают модули — Модули для Arduino.
