цифровая электроника
вычислительная техника
встраиваемые системы

 

ESP32 и часы реального времени DS3231

Автор: Mike(admin) от 27-02-2020, 05:55

В этом уроке мы узнаем о работе часов реального времени (RTC) и их взаимодействии с ESP32 и дисплеем OLED.


ESP32 и часы реального времени DS3231

Мы будем использовать модуль DS3231 RTC, чтобы отслеживать правильное время и отображать его на OLED дисплее, используя ESP32 в качестве нашего микроконтроллера. ESP32 – это больше, чем микроконтроллер. Он имеет функции Wi-Fi и Bluetooth и 39 контактов GPIO. Также он поддерживает все протоколы связи, такие как SPI, I2C, UART и т. д.


DS3231 – это модуль часов реального времени. Он используется для поддержания актуальной даты и времени для большинства проектов в области электроники. Этот модуль имеет собственный источник питания типа батирейка-таблетка, с помощью которого он поддерживает дату и время, даже когда основное питание отключено или микроконтроллер прошел полный сброс. Поэтому, как только мы установим дату и время в этом модуле, он всегда будет поддерживать их. Существует несколько типов микросхем RTC, таких как DS1307, DS3231 и т. д.


DS3231

Для вывода даты и времени будем использовать OLED дисплей. Термин OLED обозначает «Органический светоизлучающий диод», он использует ту же технологию, которая используется в большинстве наших телевизоров, но имеет меньше пикселей по сравнению с ними.


OLED-дисплей SSD1306

OLED-дисплей SSD1306

Мы используем монохромный 7-контактный OLED-дисплей SSD1306 0,96”. Причина выбора этого дисплея заключается в том, что он может работать с тремя различными протоколами связи, такими как трехпроводной режим SPI 3, четырехпроводной режим SPI и I2C. В этом руководстве будет рассказано, как использовать модуль в 4-проводном режиме SPI, так как это самый быстрый и стандартный режим связи.


Сообщество Arduino уже предоставило нам много библиотек, которые можно напрямую использовать с ESP32. Например, библиотека Adafruit_SSD1306 очень проста в использовании и имеет несколько графических опций, поэтому мы будем использовать ее в этом руководстве. Но если у вашего проекта есть ограничение памяти/скорости, попробуйте использовать библиотеку U8g, поскольку она работает быстрее и занимает меньше памяти.


Принципиальная схема подключения модуля RTC3231 на основе DS3231 и OLED-дисплея SSD1306 к ESP32 представлена далее.


ESP32 и часы реального времени DS3231

Физически все это может выглядеть следующим образом.


ESP32 и часы реального времени DS3231

Код программы часов реального времени на ESP32 и DS3231 приведен далее.



#include <SPI.h> // https://github.com/PaulStoffregen/SPI
#include <Wire.h>
#include <Adafruit_GFX.h> // https://github.com/adafruit/Adafruit-GFX-Library
#include <Adafruit_SSD1306.h> // https://github.com/adafruit/Adafruit_SSD1306
#include "RTClib.h" // https://github.com/adafruit/RTClib
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
#define OLED_MOSI  23
#define OLED_CLK   18
#define OLED_DC    4
#define OLED_CS    5
#define OLED_RESET 2
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

void setup() 
{

Serial.begin(9600);

if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}

rtc.adjust(DateTime(__DATE__, __TIME__));
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();
display.setTextColor(WHITE);
//display.startscrollright(0x00, 0x0F);
display.setTextSize(2);
display.setCursor(0,5);
display.print("  Clock ");
display.display();
delay(3000);
}

void loop()
{
DateTime now = rtc.now();

display.clearDisplay();
display.setTextSize(2);
display.setCursor(75,0);
display.println(now.second(), DEC);

display.setTextSize(2);
display.setCursor(25,0);
display.println(":");

display.setTextSize(2);
display.setCursor(65,0);
display.println(":");

display.setTextSize(2);
display.setCursor(40,0);
display.println(now.minute(), DEC);

display.setTextSize(2);
display.setCursor(0,0);
display.println(now.hour(), DEC);

display.setTextSize(1);
display.setCursor(0,15);
display.println(now.day(), DEC);
display.print(daysOfTheWeek[now.dayOfTheWeek()]);

display.setTextSize(1);
display.setCursor(25,15);
display.println("-");

display.setTextSize(1);
display.setCursor(40,15);
display.println(now.month(), DEC);

display.setTextSize(1);
display.setCursor(55,15);
display.println("-");

display.setTextSize(1);
display.setCursor(70,15);
display.println(now.year(), DEC);

display.display(); 
}



© digitrode.ru


Теги: ESP32, часы реального времени




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

Комментарии:

Оставить комментарий