Цель этого урока - объяснить, как подключить часы реального времени DS3231 к ESP8266 (Node MCU). В статье рассмотрим, как создать простую программу для настройки времени и даты RTC и выведем данные в монитор порта.
Модуль реального времени DS3231 бывает нескольких твипов. Самый распространённый приведён на картинке ниже.
У меня не было в наличии данного модуля, и я использовал вот такой.
Также есть версия DS3231 mini.
Распиновка DS3231 mini.
Которую я уже использовал в своих Arduino проектах. Не зависимо от вида модуля подключаются и работают они одинаково.
В уроке будем использовать библиотеки ESP8266 для Arduino IDE. Вы можете посмотреть здесь, как настроить Arduino IDE для поддержки ESP8266.
Аппаратная схема подключения платы DS3231 к ESP8266 очень проста и показана на рисунке ниже.
Как видно на схеме, DS3231 использует интерфейс I2C для взаимодействия с микроконтроллерами. Поскольку мы используем IDE Arduino, у нас есть библиотека Wire для обработки протокола I2C, которую позже будем использовать при создании программы для взаимодействия с RTC.
Как описано в документации библиотек ESP8266 для Arduino IDE, контакты по умолчанию I2C в библиотеке Wire - это контакты 4 (SDA) и 5 (SCL). Если вы используете плату NodeMCU, примите во внимание, что контакты платы не соответствуют контактам ESP8266. Подключать нужно к контактам D2 (SDA) и D1 (SCL).
Среда Arduino предоставляет широкий спектр библиотек для взаимодействия с различными устройствами, и DS3231 не является исключением. Итак, мы используем библиотеку, показанную на рисунке ниже, которая, как указано в описании, протестирована на ESP8266.
Её можно установить с помощью менеджера библиотек Arduino IDE.
Эта библиотека предоставляет простые в использовании функции для взаимодействия с RTC, при этом программисту не нужно беспокоиться о низкоуровневых деталях протокола I2C. Кроме того, в ней есть несколько примеров кода, которые помогут начать работу с DS3231.
Как было сказано ранее, создадим простую программу для настройки времени и даты часов реального времени, а затем считаем данные и выведем в монитор порта.
Во-первых, нам нужно подключить недавно установленную библиотеку, которая позволяет взаимодействовать с DS3231, а также библиотеку Arduino, которая реализует связь с устройствами I2C.
#include <Wire.h> //I2C библиотека #include <RtcDS3231.h> //RTC библиотека
Функции для взаимодействия с RTC предоставляются, как методы класса RtcDS3231:
RtcDS3231<TwoWire> rtcObject(Wire); //библиотека rtc
Библиотека RTC использует класс RtcDateTime, который позволяет нам создавать объекты для хранения информации о дате и времени.
Итак, объявляем объект этого класса и передаем в конструктор данных от года до секунд. Наконец, мы вызываем метод setDateTime для объекта RtcDS3231 и передаем ему объект RtcDateTime, содержащий информацию о дате и времени.
Затем считываем текущую дату и время из RTC в функции основного цикла. В этом простом примере мы будем опрашивать RTC каждые 5 секунд.
void setup() { Serial.begin(115200); //Запуск последовательного подключения rtcObject.Begin(); //Запуск I2C /* Установка времени */ RtcDateTime currentTime = RtcDateTime(21, 07, 18, 10, 20, 0); //2021/7/18 10:20:0 rtcObject.SetDateTime(currentTime); //Сохраняем время }
Чтобы получить текущее время и дату, вызываем метод GetDateTime для нашего ранее определенного объекта RtcDS3231 (который мы назвали «rtcObject»). Этот метод вернет объект RtcDateTime, как использовали ранее в функции настройки.
Класс RtcDateTime имеет метод для получения каждого из параметров даты и времени. Мы будем использовать эти методы, чтобы получить их в виде строки (с помощью функции sprintf ).
Когда у нас есть вся информация о дате и времени в строке, отправляем ее в последовательный порт.
void loop() { RtcDateTime currentTime = rtcObject.GetDateTime(); //получите время от RTC char str[20]; //объявите строку как массив символов sprintf(str, "%d/%d/%d %d:%d:%d", //%d позволяет вывести целое число в строку currentTime.Year(), //год currentTime.Month(), //месяц currentTime.Day(), //день currentTime.Hour(), //час currentTime.Minute(), //минуты currentTime.Second() //секунды ); Serial.println(str); //выводим строку в последовательный порт delay(5000); // ждем 5 сек. }
В конце основного цикла ставим задержку в 5 секунд.
Примечание. Хотя в этом примере используется массив символов, мы также можем использовать строковый объект для вывода параметров времени и даты. Тем не менее, важно знать, что мы можем использовать массивы символов как строки, что более эффективно. Кроме того, в чистом C нет объектов, поэтому строки всегда являются массивами символов.
Полный Скетч вывода даты и время с DS3231 в монитор порта, располагается ниже. Также скетч вы можете скачать внизу статьи в разделе «Файлы для скачивания»
#include <Wire.h> //I2C библиотека #include <RtcDS3231.h> //RTC библиотека RtcDS3231<TwoWire> rtcObject(Wire); //библиотека rtc void setup() { Serial.begin(115200); //Запуск последовательного подключения rtcObject.Begin(); //Запуск I2C /* Установка времени */ RtcDateTime currentTime = RtcDateTime(21, 07, 18, 10, 20, 0); //2021/7/18 10:20:0 rtcObject.SetDateTime(currentTime); //Сохраняем время } void loop() { RtcDateTime currentTime = rtcObject.GetDateTime(); //получите время от RTC char str[20]; //объявите строку как массив символов sprintf(str, "%d/%d/%d %d:%d:%d", //%d позволяет вывести целое число в строку currentTime.Year(), //год currentTime.Month(), //месяц currentTime.Day(), //день currentTime.Hour(), //час currentTime.Minute(), //минуты currentTime.Second() //секунды ); Serial.println(str); //выводим строку в последовательный порт delay(5000); // ждем 5 сек. }
После загрузки кода и открытия последовательного порта в Arduino IDE, должны получить результат, аналогичный представленному на рисунке ниже.
Заключение.
Это был простой пример по базовым возможностям DS3231. Тем не менее, у этого RTC модуля есть еще несколько функций, которые будем изучать в следующих уроках.
Понравился Урок Подключение DS3231 к NodeMCU? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.
Спасибо за внимание!
Технологии начинаются с простого!
Фотографии к статье
Файлы для скачивания
![]() |
Скетч вывода даты и время с DS3231 в монитор порта..ino | 1 Kb | 1117 | Скачать |
![]() |
Библиотека RtcDS3231 для ESP8266.zip | 45 Kb | 1245 | Скачать |
А зачем использовать DS3231 если можно время по wi-fi получать из сети?
Уроки ESP8266 (заметки)
8 июля , 2021
Комментариев:1
Файлов для скачивания:2
Фото:4
Понравилась статья? Нажми
Виджеты для Easy HMI
Читайте также
Мы в соц сетях
Комментарии