Как использовать модуль часов реального времени (RTC) DS3231 с ESP32

Kak Ispol Zovat Modul Casov Real Nogo Vremeni Rtc Ds3231 S Esp32



ESP32 — это интеллектуальная плата микроконтроллера со встроенными возможностями Wi-Fi и Bluetooth. ESP32 оснащен внутренним RTC, но его работа зависит от питания. Поэтому, если вы хотите разрабатывать проекты или схемы, которые хотите запускать даже при отсутствии питания, вам необходимо использовать любой внешний модуль RTC, например DS1307 или DS3231.

Мы уже делали урок по Интерфейс DS1307 с модулем ESP32 . Сегодня мы обсудим основы датчика RTC DS3231 и проверим, как его можно связать с платой ESP32.

Оглавление:







1. Что такое модуль часов реального времени DS3231?



2. Как подключить DS3231 к ESP32



3. Аппаратное обеспечение





4. Код

5. Выход



6. Как отобразить время RTC DS3231 на OLED-экране с помощью ESP32

Заключение

1. Что такое модуль часов реального времени DS3231?

Модуль DS3231 обеспечивает высокоточное ведение времени. Он включает в себя встроенный кварцевый генератор с температурной компенсацией (TCXO), позволяющий определять время с большой точностью. Модуль работает по протоколу I2C с использованием конфигурации Master-Slave. Он может сохранять время и дату с помощью резервной батареи даже при отсутствии основного входного питания. Он обычно используется в устройствах, которые зависят от времени и даты.

DS3231 отслеживает секунды, минуты и часы. Он также может вести учет дат и дней недели. При работе с високосными годами время автоматически корректируется соответствующим образом. Кроме того, он может отображать время как в 12-часовом, так и в 24-часовом формате, а также имеет индикатор AM/PM.

1.1. DS3231 против DS1307

И DS3231, и DS1307 представляют собой модули учета времени с поддержкой резервного питания от батареи. Однако DS3231 более точен, чем DS1307. Основная причина заключается в том, что DS1307 зависит от внешнего кристалла с частотой 32 кГц для измерения времени.

Однако RTC DS3231 оснащен внутренним кварцевым генератором с температурной компенсацией (TCXO). Это делает его менее подверженным влиянию внешней температуры и, как следствие, имеет преимущество в точности на несколько минут в год по сравнению с DS1307.

1.2. Распиновка DS3231

DS3231 работает по протоколу I2C. В основе этого модуля RTC лежит точный чип RTC, разработанный Максимом. Этот чип выполняет все временные функции и обменивается данными с помощью I2C с платой ESP32 или Arduino.

Основные контакты модулей RTC DS3231:

  • ВКК: Подключите этот контакт к положительной клемме источника питания.
  • Земля: Заземляющее соединение.
  • ПДД: Вывод последовательных данных (используется для связи I2C).
  • СКЛ: Последовательный тактовый контакт (также часть интерфейса I2C).
  • Вопрос: Выходной контакт прямоугольной волны (может генерировать периодический сигнал, например, для сигнализации или других целей синхронизации).
  • 32К: Выход генератора 32 кГц (полезно для приложений с точной синхронизацией).

Ниже приведены основные встроенные компоненты модуля RTC DS3231:

  • Держатель батареи: Это позволяет модулю продолжать работу при отсутствии внешнего питания.
  • Чип RTC: Этот чип поддерживает время и дату.
  • AT24C32 ЭСППЗУ: Он обеспечивает энергонезависимое хранилище для регистрации данных и других целей с 1 000 000 циклов записи.
  • ТСХО: Генератор с температурной компенсацией, обеспечивающий правильное время для изменяющегося диапазона температур.
  • Датчик температуры: Он снимает показания температуры и предоставляет их как часть функции модуля.

2. Как подключить DS3231 к ESP32

Чтобы связать DS3231 с ESP32, вам необходимо установить библиотека RTClib первый. После установки этой библиотеки Adafruit RTC вы можете подключить плату ESP32 к DS3231 по протоколу I2C. Чтобы соединить ESP32 I2C с модулем RTC DS3231, вы можете использовать контакты ESP32 D21 и D22.

2.1. Схема подключения ESP32 с RTC DS3231

Во-первых, вам необходимо подключить ESP32 к модулю I2C RTC DS3231. Для подключения следуйте приведенной ниже конфигурации контактов:

После подключения ESP32 к RTC DS3231 ваша схема подключения должна выглядеть следующим образом. Вы также можете запитать DS3231 от контакта VIN ESP32. Рабочее напряжение DS3231 составляет от 3,3 до 5,5 В постоянного тока.

2.2. Установка необходимых библиотек

Когда схема готова, следующим шагом будет настройте свою плату ESP32 с помощью Arduino IDE . Для взаимодействия с DS3231 вам потребуется установить библиотека RTClib . Вы можете установить его с помощью менеджера библиотек Arduino IDE.

3. Аппаратное обеспечение

Для разработки часов реального времени на базе DS3231 с ESP32 вам понадобится следующее оборудование:

  • Плата разработки ESP32
  • Модуль РТК DS3231
  • Батарея CR2032
  • Перемычки
  • Макет

4. Код

После установки библиотеки RTC следующая часть — написать код для DS3231 и загрузить его на плату ESP32. Сначала вам нужно написать код для установки текущего времени. После того, как вы установите время в DS3231, он запомнит время и продолжит работу, даже если ваша плата ESP32 будет выключена.

Теперь откройте Arduino IDE, скомпилируйте и запишите код на плату ESP32.

#include
#include

RTC_DS3231 ртк ; // Инициализируем экземпляр класса RTC_DS3231

пустота настраивать ( ) {
Сериал. начинать ( 115200 ) ;
Проволока. начинать ( ) ;

если ( ! ртк. начинать ( ) ) {
Сериал. println ( «RTC не обнаружен» ) ;
пока ( 1 ) ; // Подвисаем на неопределенный срок, если RTC не найден
}

//Раскомментируйте строку ниже, чтобы установить начальную дату и время
//rtc.adjust(DateTime(__DATE__, __TIME__));
}

пустота петля ( ) {
// Считываем текущее время с датчика (DS3231)
Дата и время сейчас '=' ртк. сейчас ( ) ;

// Печатаем дату и время в одной строке с двумя цифрами для часов, минут и секунд
Сериал. Распечатать ( 'Текущая дата: ' ) ;
Сериал. Распечатать ( сейчас. год ( ) , Декабрь ) ;
Сериал. Распечатать ( '/' ) ;
printTwoDigits ( сейчас. месяц ( ) ) ;
Сериал. Распечатать ( '/' ) ;
printTwoDigits ( сейчас. день ( ) ) ;
Сериал. Распечатать ( ' Текущее время: ' ) ;
printTwoDigits ( сейчас. час ( ) ) ;
Сериал. Распечатать ( ':' ) ;
printTwoDigits ( сейчас. минута ( ) ) ;
Сериал. Распечатать ( ':' ) ;
printTwoDigits ( сейчас. второй ( ) ) ;
Сериал. println ( ) ;

задерживать ( 1000 ) ; // Обновление каждые 1 секунду
}

пустота printTwoDigits ( интервал число ) {
если ( число < 10 ) {
Сериал. Распечатать ( '0' ) ; // Добавляем начальный ноль для однозначных чисел
}
Сериал. Распечатать ( число ) ;
}

4.1. Объяснение кода

Код начинается с инициализации последовательной связи I2C с помощью библиотеки проводов. После этого мы подключили библиотеку RTC от Adafruit для взаимодействия с модулем DS3231. Эта библиотека предоставляет функцию для взаимодействия с модулем RTC DS3231.

в настраивать часть, шина I2C запускается и проверяется наличие доступных устройств I2C. Если не найден, программа зависает на неопределенный срок. Скорость передачи данных также определена, поэтому вы можете проверить вывод на последовательном мониторе Arduino IDE.

Установка часов в первый раз

При программировании DS3231 вам необходимо раскомментируйте эту строку . Это позволит получить ваше системное время и сохранить его в памяти RTC. При этом часы модуля RTC синхронизируются с системными часами.

//rtc.adjust(DateTime(__DATE__, __TIME__));

После установки времени вам придется повторно загрузить приведенный выше код, но на этот раз вам придется прокомментируйте строку функции rtc.adjust() . В противном случае это приведет к перезаписи вашего предыдущего установленного времени, и когда ваш ESP32 выключится, RTC запустится снова с момента загрузки кода.

При этом ваше время будет оставаться в фоновом режиме модуля RTC до тех пор, пока модуль RTC имеет питание в своей ячейке CR2032.

в петля часть, текущая дата и время считываются из модуля DS3231 с помощью функции rtc.now(). Компоненты даты и времени извлекаются, и отформатированная дата печатается на последовательном мониторе Arduino IDE каждую секунду.

5. Выход

После загрузки кода на плату ESP32 вы увидите, что время начнет печататься на последовательном мониторе Arduino IDE.

6. Как отобразить время RTC DS3231 на OLED-экране с помощью ESP32

Вы также можете пойти еще дальше и отобразить время на OLED-экране после считывания его с DS3231. Для этого вам необходимо установить Библиотека Adafruit GFX SSD1306 в среде разработки Arduino.

После установки подключите ESP32 к модулю OLED и RTC в следующей конфигурации.

После подключения датчика вы увидите схему, похожую на принципиальную схему ниже.

Теперь загрузите следующий код DS3231 на плату ESP32.

#include
#include
#include
#include 'RTClib.h'

RTC_DS3231 ртк ;

голец дни [ 7 ] [ 12 ] '=' { 'Воскресенье' , 'Понедельник' , 'Вторник' , 'Среда' , 'Четверг' , 'Пятница' , 'Суббота' } ;

Дисплей Adafruit_SSD1306 '=' Адафрут_SSD1306 ( 128 , 64 , & Проволока , - 1 ) ;

пустота настраивать ( ) {
Сериал. начинать ( 115200 ) ;

отображать. начинать ( SSD1306_SWITCHCAPVCC , 0x3C ) ;

если ( ! ртк. начинать ( ) ) {
Сериал. println ( «Не удалось найти RTC! Проверьте цепь». ) ;
пока ( 1 ) ;
}
//раскомментируем строку ниже при первой установке времени
//rtc.adjust(DateTime(__DATE__, __TIME__));
отображать. ОчиститьДисплей ( ) ;
отображать. setTextColor ( БЕЛЫЙ ) ;
отображать. setTextSize ( 2 ) ;
отображать. установитькурсор ( 0 , двадцать ) ;
отображать. Распечатать ( «РТК ЧАСЫ» ) ;
отображать. отображать ( ) ;
задерживать ( 5000 ) ;
}

пустота петля ( ) {
Дата и время сейчас '=' ртк. сейчас ( ) ;

отображать. ОчиститьДисплей ( ) ;
отображать. setTextSize ( 2 ) ;
отображать. установитькурсор ( 75 , 0 ) ;
отображать. println ( сейчас. второй ( ) , Декабрь ) ;
отображать. setTextSize ( 2 ) ;
отображать. установитькурсор ( 25 , 0 ) ;
отображать. println ( ':' ) ;
отображать. setTextSize ( 2 ) ;
отображать. установитькурсор ( 65 , 0 ) ;
отображать. println ( ':' ) ;
отображать. setTextSize ( 2 ) ;
отображать. установитькурсор ( 40 , 0 ) ;
отображать. println ( сейчас. минута ( ) , Декабрь ) ;
отображать. setTextSize ( 2 ) ;
отображать. установитькурсор ( 0 , 0 ) ;
отображать. println ( сейчас. час ( ) , Декабрь ) ;
отображать. setTextSize ( 2 ) ;
отображать. установитькурсор ( 0 , 25 ) ;
отображать. println ( сейчас. день ( ) , Декабрь ) ;
отображать. Распечатать ( дни [ сейчас. день недели ( ) ] ) ;
отображать. setTextSize ( 2 ) ;
отображать. установитькурсор ( двадцать , 25 ) ;
отображать. println ( '-' ) ;
отображать. setTextSize ( 2 ) ;
отображать. установитькурсор ( 35 , 25 ) ;
отображать. println ( сейчас. месяц ( ) , Декабрь ) ;
отображать. setTextSize ( 2 ) ;
отображать. установитькурсор ( 60 , 25 ) ;
отображать. println ( '-' ) ;
отображать. setTextSize ( 2 ) ;
отображать. установитькурсор ( 75 , 25 ) ;
отображать. println ( сейчас. год ( ) , Декабрь ) ;
отображать. отображать ( ) ;
}

Объяснение кода

Код начался с некоторых важных библиотек, необходимых для экранов RTC и OLED. OLED-дисплей настроен с использованием библиотеки Adafruit SSD1306.

В части цикла текущая дата и время получаются с помощью rtc.now(). После этого OLED-экран очищается и компоненты времени отображаются в формате цифровых часов. Вы также можете изменить код, чтобы настроить формат даты и времени.

Как только код будет загружен на вашу плату, вы увидите текущее время на OLED-экране.

Примечание: В приведенном выше коде используется 0x3C Адрес I2C для OLED. Это наиболее распространенный адрес I2C, доступный на OLED-дисплеях SSD1306. Если вы хотите найти адрес I2C для вашего OLED-экрана, вы можете запустить команду Код сканера I2C .

Заключение

DS3231 — это датчик RTC, который можно использовать для измерения времени. Он имеет резервную батарею, которая позволяет поддерживать точное время, даже если плата микроконтроллера выключена. Чтобы связать ESP2 с DS3231, вам необходимо установить библиотеку RTClib в вашу Arduino IDE. После этого вам необходимо подключить модуль RTC по протоколу I2C, используя цифровой вывод ESP32. После подключения просто загрузите код и настройте время. Теперь датчик RTC будет отслеживать время, и вы можете прочитать его на своем последовательном мониторе в проектах, основанных на времени разработки.