Урок ESP8266. Подключение DS3231 к NodeMCU.

Цель этого урока - объяснить, как подключить часы реального времени DS3231 к ESP8266 (Node MCU). В статье рассмотрим, как создать простую программу для настройки времени и даты RTC и выведем данные в монитор порта.

Для урока подключения DS3231 к NodeMCU понадобится.

Модуль реального времени DS3231 бывает нескольких твипов. Самый распространённый приведён на картинке ниже.

часы реального времени DS3231 к ESP8266 (Node MCU)

У меня не было в наличии данного модуля, и я использовал вот такой.

У меня не было в наличии данного модуля, и я использовал вот такой.


Также есть версия DS3231 mini.

версия DS3231 mini

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

Распиновка DS3231 mini

Которую я уже использовал в своих Arduino проектах. Не зависимо от вида модуля подключаются и работают они одинаково.

В уроке будем использовать библиотеки ESP8266 для Arduino IDE. Вы можете посмотреть здесь, как настроить Arduino IDE для поддержки ESP8266.

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

Аппаратная схема подключения платы DS3231 к ESP8266 очень проста и показана на рисунке ниже.

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

Как видно на схеме, DS3231 использует интерфейс I2C для взаимодействия с микроконтроллерами. Поскольку мы используем IDE Arduino, у нас есть библиотека Wire для обработки протокола I2C, которую позже будем использовать при создании программы для взаимодействия с RTC.

Как описано в документации библиотек ESP8266 для Arduino IDE, контакты по умолчанию I2C в библиотеке Wire - это контакты 4 (SDA) и 5 (SCL). Если вы используете плату NodeMCU, примите во внимание, что контакты платы не соответствуют контактам ESP8266. Подключать нужно к контактам D2 (SDA) и D1 (SCL).

Вот краткий обзор распиновки ESP-12E NodeMCU

Библиотека для работы с DS3231.

Среда Arduino предоставляет широкий спектр библиотек для взаимодействия с различными устройствами, и DS3231 не является исключением. Итак, мы используем библиотеку, показанную на рисунке ниже, которая, как указано в описании, протестирована на ESP8266.

Библиотека для работы с DS3231.

Её можно установить с помощью менеджера библиотек Arduino IDE.

менеджера библиотек Arduino IDE

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

Скетч вывода даты и время с DS3231 в монитор порта.

Как было сказано ранее, создадим простую программу для настройки времени и даты часов реального времени, а затем считаем данные и выведем в монитор порта.

Скетч вывода даты и время с 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 сек.

}

Тестирование Подключения DS3231 к NodeMCU.

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

Тестирование Подключения DS3231 к NodeMCU.

Заключение.

Это был простой пример по базовым возможностям DS3231.

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

Понравился Урок Подключение DS3231 к NodeMCU? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Скетч вывода даты и время с DS3231 в монитор порта. Скетч вывода даты и время с DS3231 в монитор порта..ino1 Kb 792 Скачать
Библиотека RtcDS3231 для ESP8266 Библиотека RtcDS3231 для ESP8266.zip45 Kb 852 Скачать

Комментарии

Ваше Имя*

Сава

Гость: Сава (19 июля, 2021 в 21:00)

А зачем использовать DS3231 если можно время по wi-fi получать из сети?


Разработка проектов