Arduino и часы RTC DS3231
Описание
DS3231 – микросхема часов реального времени, которая при наличии внешнего автономного питания считает время и всегда готова поделиться им с микроконтроллером. Основные характеристики:
- Питание: 2.3.. 5.5V
- Потребление: 180 мкА
- Потребление батарейки: 0.8 мкА
- Считает часы, минуты, секунды, число, месяц, год, день недели
- Встроенный календарь до 2100 года
- Встроенный термометр, точность ±3°С
- Свой автономный источник питания: батарейка CR2025 или
В продаже можно найти несколько вариантов модулей на базе DS3231.
В наборе GyverKIT:
- Партии 0, 1 и 2 комплектовались мини-версией модуля (второй слева на картинке выше)
- Партия 3 и далее – самый левый модуль синего цвета
Подключение
Модуль подключается к шине I2C согласно распиновке микроконтроллера:
- GND > GND
- VCC > VCC
- Arduino: SDA – A4, SCL – A5
- Wemos: SDA – D2, SCL – D1
У мини-версии модуля пины подписаны немного иначе:
- + > VCC
- – > GND
- D > SDA
- C > SCL
Библиотеки
- RTClib от adafruit
- Моя библиотека microDS3231
В примерах на этом сайте мы будем использовать microDS3231 как гораздо более лёгкую и оптимальную. Библиотека идёт в архиве к набору GyverKIT, а свежую версию всегда можно установить/обновить из встроенного менеджера библиотек Arduino по названию microDS3231. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.
Примеры
Чтобы автоматически установить время на модуле, можно прошить следующую программу:
#include <microDS3231.h> MicroDS3231 rtc; void setup() { rtc.setTime(COMPILE_TIME); } void loop() { }
Она установит дату и время, равное времени компиляции программы, то есть текущее. После этого можно работать с модулем, например выведем дату и время разными способами:
#include <microDS3231.h> MicroDS3231 rtc; void setup() { Serial.begin(9600); } void loop() { // получаем и выводим каждый элемент отдельно Serial.print(rtc.getHours()); Serial.print(":"); Serial.print(rtc.getMinutes()); Serial.print(":"); Serial.print(rtc.getSeconds()); Serial.print(" "); Serial.print(rtc.getDay()); Serial.print(" "); Serial.print(rtc.getDate()); Serial.print("/"); Serial.print(rtc.getMonth()); Serial.print("/"); Serial.println(rtc.getYear()); // выводим температуру модуля Serial.println(rtc.getTemperatureFloat()); // выводим дату и время готовыми строками Serial.println(rtc.getTimeString()); Serial.println(rtc.getDateString()); }
Домашнее задание
- Изучить возможности библиотеки microDS3231