В этом проекте мы соединим модуль часов реального времени (Real Time Clock, RTC) DS3231 с платой NodeMCU ESP8266 и отобразим значение времени и даты на ЖК-дисплее 16×2. Альтернативная микросхема для DS3231 — это DS1307. Модуль часов реального времени DS3231 имеет встроенные функции сигнализации, а также датчик температуры с разрешением 0,25 и точностью ±3°C.
Ранее на нашем сайте мы рассматривали подключение модуля часов реального времени DS3231 к другим микроконтроллерам/платам:
Необходимые компоненты
- NodeMCU ESP8266 (купить на AliExpress).
- Модуль часов реального времени DS3231 (купить на AliExpress).
- ЖК дисплей 16x2 с интерфейсом I2C (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Модуль часов реального времени DS3231
DS3231 — это недорогие, чрезвычайно точные часы реального времени (RTC) I²C со встроенным кварцевым генератором с температурной компенсацией (TCXO) и кристаллом. Устройство имеет вход для батареи и поддерживает точный отсчет времени даже когда основное питание устройства прерывается.
Данный модуль RTC сохраняет информацию о секундах, минутах, часах, дне, дате, месяце и годе. Дата в конце месяца автоматически корректируется для месяцев с менее чем 31 днем, включая поправки на високосный год. Часы работают в 24-часовом или 12-часовом формате с активным индикатором AM/PM. Предусмотрены два программируемых будильника времени суток и программируемый выход прямоугольной волны.
Прецизионный температурно-компенсированный опорный источник напряжения и схема компаратора контролируют состояние VCC для обнаружения сбоев питания, обеспечения сброса выходного сигнала и автоматического переключения на резервный источник питания при необходимости. Кроме того, активно-низкий вывод RST контролируется как вход кнопки для генерации сброса микропроцессора.
Основные характеристики и особенности модуля
1. Высокоточные часы реального времени полностью управляют всеми функциями хронометража.
2. Часы реального времени отсчитывают секунды, минуты, часы, дату месяца, месяц, день недели и год с компенсацией високосного года, действительной до 2100 года.
3. Точность ±2 ppm от 0 °C до +40 °C.
4. Точность ±3,5 ppm от -40 °C до +85 °C.
5. Выход цифрового датчика температуры: точность ±3 °C.
6. Регистр для подстройки под старение.
7. Выход RST с активным низким уровнем/вход для устранения дребезга кнопки сброса.
8. Два будильника времени суток.
9. Программируемый выходной сигнал прямоугольной формы.
10. Простой последовательный интерфейс, подключаемый к большинству микроконтроллеров.
11. Быстрый (400 кГц) интерфейс I2C.
12. Вход резервного аккумулятора для непрерывного хронометража.
13. Работа в режиме низкого энергопотребления продлевает время работы от резервного аккумулятора.
14. Работа при напряжении 3,3 В.
15. Диапазоны рабочих температур: коммерческие (от 0 °C до +70 °C) и промышленные (от -40 °C до +85 °C).
16. Одобрено Underwriters Laboratories® (UL).
Схема проекта
Схема подключения модуля часов реального времени DS3231 к NodeMCU ESP8266 представлена на следующем рисунке.
DS3231 и ЖК-дисплей 16×2 оба являются модулями I2C. Поэтому нам нужно всего 2 контакта для их подключения. Итак, подключите контакт последовательных данных (SDA) к контакту NodeMCU D2, а контакт сигнала синхронизации (SCL) к контакту NodeMCU D1. Подайте 5 В на ЖК дисплей и RTC модуль через контакт Vin NodeMCU. Вы также можете использовать питание 3,3 В для модуля DS3231.
Исходный код программы
Исходный код для подключения модуля RTC DS3231 к плате NodeMCU ESP8266-12E приведен ниже. Вы можете скопировать код и загрузить его непосредственно на плату NodeMCU ESP8266-12E. Но перед этим вам понадобится одна библиотека, а именно библиотека для работы с модулей RTC. Поэтому сначала загрузите библиотеку по ссылке ниже и добавьте ее в Arduino IDE.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
#include <Wire.h> // Library for I2C communication #include <SPI.h> // not used here, but needed to prevent a RTClib compile error #include "RTClib.h" #include <LiquidCrystal_I2C.h> // Library for LCD LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2); RTC_DS1307 RTC; // Setup an instance of DS1307 naming it RTC void setup () { Serial.begin(57600); // Set serial port speed lcd.begin(); Wire.begin(); // Start the I2C RTC.begin(); // Init RTC RTC.adjust(DateTime(__DATE__, __TIME__)); // Time and date is expanded to date and time on your computer at compiletime Serial.print('Time and date set'); lcd.setCursor(0, 0); lcd.print("Real Time Clock"); delay(3000); lcd.clear(); } void loop () { DateTime now = RTC.now(); Serial.print(now.year(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print('/'); Serial.print(now.day(), DEC); Serial.print(' '); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.println(); lcd.setCursor(0, 0); lcd.print("Date: "); lcd.setCursor(0, 1); lcd.print("Time: "); lcd.setCursor(6, 0); lcd.print(now.year(), DEC); lcd.print(":"); lcd.print(now.month(), DEC); lcd.print(":"); lcd.print(now.day(), DEC); lcd.setCursor(6, 1); lcd.print(now.hour(), DEC); lcd.print(":"); lcd.print(now.minute(), DEC); lcd.print(":"); lcd.print(now.second(), DEC); delay(1000); lcd.clear(); } |
Тестирование работы проекта
После загрузки кода на плату модуль RTC начнет работать. Время и дата будут отображаться на ЖК-дисплее 16×2. Никаких других настроек не требуется, также нет необходимости в дополнительных кнопках или переключателях.
46 просмотров