Подключение 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.
Установка библиотеки
Для этого примера, необходимо скачать и установить две библиотеки «LiquidCrystal_I2C» и «DS3231». Самый простой способ, это воспользоваться «Управление библиотеками…» в среде разработке Arduino IDE.
Затем в поле поиска набираем первую библиотеку «RTClib» и устанавливаем.
Теперь вводим « LiquidCrystal_I2C″ и так же устанавливаем ее.
Если у кого не получиться, библиотеки можно скачать в конце статьи.
Программа:
После сборки и установки библиотек, можно запускать среду разработки Arduino IDE. Первом делом, необходимо установить поддержку NodeMCU в среде разработке Arduino IDE, как это сделать можно посмотреть в этом обзоре . Теперь, когда все готово, скачиваем или копируем скетч и загружаем его в NodeMCU.
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 61 62 63 64 65 |
#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 } |
Открыв мониторинг порта, можно увидеть данные. Описание скетча, можно посмотреть в комментариях.
Вот и все, пишите.
Ссылки
Скачать библиотеку 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
Доброго Времени суток) как не парадокс звучит, скажите а осуществимо подружить ESP, DS3231,lcd1602 таким образом, чтобы время синхронизировалось с NTP сервером? а при потерии соединения wi-fi часики шли от Ds3231? Очень признателен буду.
Павел здравствуйте. Тоже интересуюсь данным вопросом. Скажите у вас получилось?
А разве объект rtc не надо инициализировать в setup, как у вас без этого заработало?