Каталог
Подключение DS1302 RTC к Arduino

Подключение DS1302 RTC к Arduino

В этой статье рассмотрим использование модуля DS1302 RTC для установки и получения текущей даты и времени на платформе Arduino. Пример кода и все необходимые подключения будут описаны ниже.

Оборудование

Для выполнения проекта потребуется:

  • Arduino (например, UNO)
  • Модуль DS1302 RTC
  • Соединительные провода

Схема подключения

DS1302 IC Atmel AVR ESP8266 ESP32
GND GND GND GND
VCC2 5V/3.3V 3V3 3V3
SCLK (CLK) 2 D4 0
I/O (DAT) 3 D2 5
CE (RST) 4 D2 4

Установка библиотеки

Для работы с модулем DS1302, необходимо установить библиотеку Alash_DS1302. Установить её можно по следующей ссылке: Alash_DS1302.

  1. Скачайте библиотеку с GitHub.
  2. Откройте Arduino IDE.
  3. Перейдите в меню Скетч -> Подключить библиотеку -> Добавить .ZIP библиотеку.
  4. Выберите скачанный архив и добавьте его в Arduino IDE.

Пример кода

Ниже приведен пример кода для установки и чтения даты и времени с модуля DS1302:

/*
      DS1302 RTC пример установки и получения даты/времени для Arduino
      Источник:         https://github.com/Alash-electronics/Alash_DS1302
*/
#include <Wire.h>
#include <Alash_DS1302.h>
/*
  DS1302 IC      Atmel AVR             ESP8266       ESP32
  GND            GND                     GND          GND
  VCC2           5V(или 3.3V)            3V3          3V3
  SCLK (CLK)     2(цифровой пин)         D4           0
  I/O (DAT)      3(цифровой пин)         D2           5
  CE (RST)       4(цифровой пин)         D2           4
*/
// Подключение пина данных DS1302 к цифровому пину Arduino
#define DS1302_CLK_PIN      2
#define DS1302_IO_PIN       3
#define DS1302_CE_PIN       4
// Создание объекта RTC
Alash_DS1302 rtc = Alash_DS1302(DS1302_CLK_PIN, DS1302_IO_PIN, DS1302_CE_PIN);
#define DATE_STRING_SHORT           3
// Месяцы в памяти программы
const char monthNames_P[] PROGMEM = "JanFebMarAprMayJunJulAugSepOctNovDec";
// Дни недели в памяти программы
const char dayNames_P[] PROGMEM = "SunMonTueWedThuFriSat";
void setup(){
  // Инициализация последовательного порта
  delay(500);  // Задержка 500 мс
  Serial.begin(115200);  // Начало последовательной связи с скоростью 115200 бит/с
  while (!Serial) {
    ;  // Ожидание завершения инициализации последовательного порта
  }
  Serial.println(F("\nПример чтения DS1302 от Alash-electronics"));  // Вывод сообщения в последовательный порт
  // Инициализация I2C
  Wire.begin();  // Начало работы с I2C
  Wire.setClock(100000);  // Установка скорости передачи данных по I2C
  // Инициализация RTC
  while (!rtc.begin()) {  // Повторять, пока RTC не инициализирован
    Serial.println(F("RTC не найден"));  // Вывод сообщения об ошибке в последовательный порт
    delay(3000);  // Задержка 3000 мс
  }
  // Установка даты/времени: 12:34:56 31 декабря 2024 года, воскресенье
  if (!rtc.setDateTime(12, 34, 56,  31, 12, 2024, 7)) {  // Если установка даты/времени не удалась
    Serial.println(F("Ошибка установки даты/времени"));  // Вывод сообщения об ошибке в последовательный порт
  }
}
void loop() {
  char name[DATE_STRING_SHORT + 1];  // Объявление массива для хранения строкового значения дня недели и месяца
  uint8_t hour;  // Объявление переменной для хранения часов
  uint8_t min;  // Объявление переменной для хранения минут
  uint8_t sec;  // Объявление переменной для хранения секунд
  uint8_t mday;  // Объявление переменной для хранения дня месяца
  uint8_t mon;  // Объявление переменной для хранения месяца
  uint16_t year;  // Объявление переменной для хранения года
  uint8_t wday;  // Объявление переменной для хранения дня недели
  // Чтение даты/времени
  if (!rtc.getDateTime(&hour, &min, &sec, &mday, &mon, &year, &wday)) {  // Если чтение даты/времени не удалось
    Serial.println(F("Ошибка чтения даты/времени"));  // Вывод сообщения об ошибке в последовательный порт
    return;  // Завершение функции
  }
  // Вывод дня недели
  strncpy_P(name, &(dayNames_P[wday * DATE_STRING_SHORT]), DATE_STRING_SHORT);  // Копирование строки дня недели из памяти программ в буфер
  name[DATE_STRING_SHORT] = '\0';  // Добавление завершающего символа строки
  Serial.print(name);  // Вывод дня недели в последовательный порт
  Serial.print(F(" "));  // Вывод пробела в последовательный порт
  // Вывод месяца
  strncpy_P(name, &(monthNames_P[(mon - 1) * DATE_STRING_SHORT]), DATE_STRING_SHORT);  // Копирование строки месяца из памяти программ в буфер
  name[DATE_STRING_SHORT] = '\0';  // Добавление завершающего символа строки
  Serial.print(name);  // Вывод месяца в последовательный порт
  Serial.print(F(" "));  // Вывод пробела в последовательный порт
  // Вывод дня месяца
  Serial.print(mday);  // Вывод дня месяца в последовательный порт
  Serial.print(F(" "));  // Вывод пробела в последовательный порт
  // Вывод времени
  Serial.print(hour);  // Вывод часов в последовательный порт
  Serial.print(F(":"));  // Вывод двоеточия в последовательный порт
  if (min < 10) {
    Serial.print(F("0"));  // Если минуты меньше 10, выводим "0" в последовательный порт
  }
  Serial.print(min);  // Вывод минут в последовательный порт
  Serial.print(F(":"));  // Вывод двоеточия в последовательный порт
  if (sec < 10) {
    Serial.print(F("0"));  // Если секунды меньше 10, выводим "0" в последовательный порт
  }
  Serial.print(sec);  // Вывод секунд в последовательный порт
  Serial.print(F(" "));  // Вывод пробела в последовательный порт
  // Вывод года
  Serial.println(year);  // Вывод года в последовательный порт
  // Пауза в одну секунду
  delay(1000);  // Задержка 1000 мс
}

Проверка

После загрузки скетча в Arduino и подключения модуля DS1302, откройте "Монитор порта" в Arduino IDE с скоростью 115200 бит/с. Если все подключено правильно, вы увидите текущую дату и время, установленную в модуле DS1302.

Заключение

Этот проект демонстрирует, как легко можно использовать модуль DS1302 RTC для работы с датой и временем на платформе Arduino. Такой подход полезен для различных проектов, требующих отслеживания времени.

Комментарии
Отзывов еще никто не оставлял
Товары упомянутые в статье
В наличии
Предзаказ
арт. 181
Довольно распространенный модуль часов реального времени на схеме DS1302. Для...
300 тг
Предзаказ
Предзаказ успешно отправлен!
Имя *
Телефон *
Добавить в корзину
Название товара
100 тг
1 шт.
Перейти в корзину
Обратный звонок
Запрос успешно отправлен!
Имя *
Телефон *
Заказ в один клик
С помощью уведомлений о заказе можно не только получать актуальную информацию по заказу, но и иметь быстрый канал связи с магазином