DS3231 RTC к Arduino + Nokia 5110: часы, дата, температура, кастомный шрифт
Модуль часов реального времени DS3231 — точный RTC с встроенным термодатчиком, резервной батареей CR2032 и интерфейсом I²C. Подключаем к Arduino, считываем время, дату, температуру и выводим всё на графический дисплей Nokia 5110. Научимся устанавливать время, работать с 12/24-часовым форматом, выводить кастомный шрифт и создавать стильные цифровые часы.
Преимущества DS3231 перед DS1307
DS3231 точнее (±2 ppm ≈ 1 минута в год), имеет встроенный термокомпенсированный кварц, диапазон -40…+85 °C и встроенный датчик температуры. Работает от 3,3–5 В, потребляет всего 3,5 мкА в режиме ожидания. Резервная батарея держит время годами.
Схема подключения DS3231 к Arduino
I²C-шина: SDA → A4, SCL → A5 (Uno/Nano). VCC → 5 В, GND → GND. Для Nokia 5110 используем пины 3–7 (как в предыдущем уроке).
Установка времени (сеттер)
#include <DS3231.h>
#include <Wire.h>
DS3231 rtc;
void setup() {
Wire.begin();
rtc.begin();
// Установка: год, месяц, день, день недели (1=вс), час, минута, секунда
rtc.setDateTime(2020, 12, 27, 6, 14, 30); // суббота
}
Базовый скетч — часы на Nokia 5110
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <DS3231.h>
#include <Wire.h>
// Инициализация дисплея: (CLK, DIN, DC, CE, RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
// DS3231 объект
DS3231 rtc;
// Дни недели
const char* weekdays[7] = {"Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"};
void setup() {
Wire.begin();
rtc.begin();
display.begin();
display.setContrast(55);
display.clearDisplay();
}
void loop() {
// Получаем текущее время
int hour = rtc.getHour(true); // true = 24-часовой формат
int minute = rtc.getMinute();
int second = rtc.getSecond();
// Дата
int dayOfWeek = rtc.getDoW(); // 0–6
int day = rtc.getDate();
int month = rtc.getMonth();
int year = rtc.getYear(); // последние две цифры года
// Очистка дисплея
display.clearDisplay();
// Вывод времени
display.setTextSize(2);
display.setCursor(8, 5);
if (hour < 10) display.print("0");
display.print(hour);
display.print(":");
if (minute < 10) display.print("0");
display.print(minute);
display.print(":");
if (second < 10) display.print("0");
display.print(second);
// Вывод даты и дня недели
display.setTextSize(1);
display.setCursor(10, 30);
display.print(weekdays[dayOfWeek]);
display.print(" ");
if (day < 10) display.print("0");
display.print(day);
display.print(".");
if (month < 10) display.print("0");
display.print(month);
display.print(".");
display.print(year);
display.display();
delay(1000);
}
Отображает часы, минуты, секунды крупным шрифтом на LCD PCD8544.
Выводит день недели и дату в нижней строке.
Обновляет дисплей каждую секунду.
Дополнительные возможности
Считывайте температуру: rtc.getTemperature();. Настройте SQW-выход на 1 Гц, 4 кГц, 8 кГц или 32 кГц. Программируйте будильники для включения устройств по расписанию.
Заключение
DS3231 + Nokia 5110 — отличная комбинация для точных часов, термометра или расписания. Замените glcdfont.c для русского текста, добавьте кастомные цифры — и получите стильный ретро-дисплей с высокой точностью времени.