Подключение DS3231 к NodeMCU (ESP8266)

Подключение DS3231 к NodeMCU (ESP8266)

В этой статье расскажу, как подключить часы реального времени DS3231 к плате NodeMCU (ESP8266-12E) и LCD1602. Для отслеживания времени будем использовать часы реального времени DS3231 (RTC), полученные данные будем отображать на LCD дисплей с использованию NodeMCU в качестве микроконтроллера.

Необходимые детали:
► Контроллер NodeMCU v.2 (ESP8266) x 1 шт.
► Провода DuPont, 2,54 мм, 20 см x 1 шт.
LCD-дисплей 1602A
Часы реального времени RTC DS3231

Подключение
Подробно о часах реального времени можно посмотреть в этой статье DS3231, так же есть статья о модуле LCD1602 и NodeMCU v.2. Ниже приведена схема подключения модуля DS3231 к плате NodeMCU (ESP8266) и LCD1602. Подключение очень просто, оба модуля DS3231 и LCD1602 работают по интерфейсу I2C, таким образом нам нужно всего два контакта для подключения. Подключаем вывод SDA с DS3231 и LCD1602 к выводу D2 NodeMCU и подключаем SCL с DS3231 и LCD1602 к выводу D1 NodeMCU. Напряжение 5В для модуля DS331 и LCD1602 берем с вывода Vin NodeMCU. Так же, можно использовать напряжение питания 3.3В, для модуля DS3231.

Подключение DS3231 к NodeMCU (ESP8266)

Установка библиотеки
Для этого примера, необходимо скачать и установить две библиотеки «LiquidCrystal_I2C» и «DS3231». Самый простой способ, это воспользоваться «Управление библиотеками…» в среде разработке Arduino IDE.

Подключение DS3231 к NodeMCU (ESP8266)

Затем в поле поиска набираем первую библиотеку «RTClib» и устанавливаем.

Подключение DS3231 к NodeMCU (ESP8266)

Теперь вводим « LiquidCrystal_I2C″ и так же устанавливаем ее.

Подключение DS3231 к NodeMCU (ESP8266)

Если у кого не получиться, библиотеки можно скачать в конце статьи.

Программа:
После сборки и установки библиотек, можно запускать среду разработки Arduino IDE. Первом делом, необходимо установить поддержку NodeMCU в среде разработке Arduino IDE, как это сделать можно посмотреть в этом обзоре . Теперь, когда все готово, скачиваем или копируем скетч и загружаем его в NodeMCU.

#include "Wire.h"                   // Подключаем библиотеку Wire
#include "RTClib.h"                 // Подключаем библиотеку RTClib
#include <LiquidCrystal_I2C.h>      // Подключаем библиотеку LiquidCrystal_I2C
 
LiquidCrystal_I2C lcd(0x3F,16,2);   // Задаем адрес и размер дисплея

RTC_DS3231 rtc;                     // Создаем объект rtc
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

void setup() 
{
	Serial.begin(9600);               // Инициализация Serial Port
	Serial.println("Serial OK");      // Отправка текста в Serial Port
  Wire.begin(4, 5);                 // Выводы интерфейса I2C ESP8266

  lcd.init();                       // Инициализация lcd    
  lcd.backlight();                  // Включаем подсветку

  // Автоматическая установка времени при загрузке скетча
  // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

  // Ручная установка времени
  // rtc.adjust(DateTime(2020, 03, 13, 14, 0, 0));
}

void loop() {
	DateTime now = rtc.now();
	Serial.print("now DateTime: ");     // Отправка текста в Serial Port
	Serial.print(now.year(), DEC);      // Отправка в Serial Port год 
	Serial.print('/');                  // Отправка текста в Serial Port 
	Serial.print(now.month(), DEC);     // Отправка в Serial Port месяц 
	Serial.print('/');                  // Отправка текста в Serial Port
	Serial.print(now.day(), DEC);       // Отправка в Serial Port дня
	Serial.print(' ');                  // Отправка текста в Serial Port
	Serial.print(now.hour(), DEC);      // Отправка в Serial Port час
	Serial.print(':');                  // Отправка текста в Serial Port
	Serial.print(now.minute(), DEC);    // Отправка в Serial Port минуты
	Serial.print(':');                  // Отправка текста в Serial Port
	Serial.print(now.second(), DEC);    // Отправка в Serial Port секунды
	Serial.print(" DOW: ");             // Отправка текста в Serial Port
	Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);  // Отправка в Serial Port день недели
	Serial.print(" - Temp: ");          // Отправка текста в Serial Port
	Serial.print(rtc.getTemperature()); // Отправка в Serial Port температуру
	Serial.println();                   // Новая строка
  delay(1000);
  
  lcd.clear();                        // Очистка дисплея
  lcd.setCursor(0, 0);                // Устанавливаем курсор на 0 строку, ячейка 0 
  lcd.print("Date: ");                // Выводим текст на LCD
  lcd.setCursor(0, 1);                // Устанавливаем курсор на 1 строку, ячейка 0 
  lcd.print("Time: ");                // Выводим текст на LCD
  lcd.setCursor(6, 0);                // Устанавливаем курсор на 0 строку, ячейка 6         
  lcd.print(now.year(), DEC);         // Отправка даты на LCD
  lcd.print(":");                     // Выводим текст на LCD
  lcd.print(now.month(), DEC);        // Отправка даты на LCD
  lcd.print(":");                     // Выводим текст на LCD
  lcd.print(now.day(), DEC);          // Отправка даты на LCD

  lcd.setCursor(6, 1);                // Устанавливаем курсор на 1 строку, ячейка 6      
  lcd.print(now.hour(), DEC);         // Отправка времени на LCD
  lcd.print(":");                     // Выводим текст на LCD
  lcd.print(now.minute(), DEC);       // Отправка времени на LCD
  lcd.print(":");                     // Выводим текст на LCD
  lcd.print(now.second(), DEC);       // Отправка времени на LCD
}

  Скачать скетч

Открыв мониторинг порта, можно увидеть данные. Описание скетча, можно посмотреть в комментариях.

Подключение DS3231 к NodeMCU (ESP8266)

Вот и все, пишите.

Ссылки
  
Скачать библиотеку RTClib v.1.4.0
  Скачать библиотеку OneWire v.2.2
  Скачать библиотеку LiquidCrystal_I2C
  Драйвер CP2102

Купить на Aliexpress
  Плата NodeMCU V2
  Провода DuPont, 2,54 мм, 20 см
  LCD-дисплей 1602A + I2C
 Часы реального времени RTC DS3231

Купить в Самаре и области
Плата NodeMCU V2
Провода DuPont, 2,54 мм, 20 см
LCD-дисплей 1602A
Часы реального времени RTC DS3231

Вам может также понравиться...

комментария 3

  1. Павел:

    Доброго Времени суток) как не парадокс звучит, скажите а осуществимо подружить ESP, DS3231,lcd1602 таким образом, чтобы время синхронизировалось с NTP сервером? а при потерии соединения wi-fi часики шли от Ds3231? Очень признателен буду.

  2. Сергей:

    А разве объект rtc не надо инициализировать в setup, как у вас без этого заработало?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *