Как да използвате модула за часовник в реално време (RTC) DS3231 с ESP32

Kak Da Izpolzvate Modula Za Casovnik V Realno Vreme Rtc Ds3231 S Esp32



ESP32 е интелигентна микроконтролерна платка с вградени Wi-Fi и Bluetooth възможности. ESP32 идва с вътрешен RTC, но работата му зависи от мощността. Така че, ако искате да проектирате проекти или вериги, които искате да работят дори когато няма захранване, трябва да използвате всеки външен RTC модул като DS1307 или DS3231.

Вече направихме урок по DS1307 взаимодействие с модула ESP32 . Днес ще обсъдим основите на RTC сензора DS3231 и ще проверим как може да се свърже с платката ESP32.

Съдържание:







1. Какво е DS3231 RTC модул



2. Как да свържете DS3231 с ESP32



3. Хардуер





4. Код

5. Изход



6. Как да покажете времето на RTC DS3231 на OLED екран с помощта на ESP32

Заключение

1. Какво представлява модулът DS3231 RTC

Модулът DS3231 осигурява много точно отчитане на времето. Той включва интегриран кристален осцилатор с температурна компенсация (TCXO), който ни дава време с голяма точност. Модулът работи по I2C протокол, като използва конфигурацията Master-Slave. Може да поддържа час и дата с резервна батерия, дори когато няма основно захранване. Обикновено се използва в устройства, които зависят от часа и датата.

DS3231 следи секунди, минути и часове. Може също така да поддържа запис на дати и дни от седмицата. Когато се работи с високосни години, той автоматично коригира времето съответно. Освен това може да показва времето както в 12-часов, така и в 24-часов формат, заедно с индикатор AM/PM.

1.1. DS3231 срещу DS1307

И DS3231, и DS1307 са модули за отчитане на времето с поддръжка на резервна батерия. Въпреки това, DS3231 е по-точен от DS1307. Основната причина е, че DS1307 зависи от външен 32kHz кристал за отчитане на времето.

Въпреки това, RTC DS3231 разполага с вътрешен температурно компенсиран кристален осцилатор (TCXO). Това го прави по-малко засегнат от външната температура и в резултат на това има предимство в точността от няколко минути годишно в сравнение с DS1307.

1.2. DS3231 Pinout

DS3231 работи с I2C протокол. В сърцето на този RTC модул имаме точния RTC чип, проектиран от Maxim. Този чип обработва всички времеви функции и комуникира чрез I2C с ESP32 или Arduino платка.

Основните изводи на RTC DS3231 модулите са:

  • VCC: Свържете този щифт към положителния извод на вашия източник на захранване.
  • GND: Земна връзка.
  • SDA: Пин за серийни данни (използван за I2C комуникация).
  • SCL: Пин за сериен часовник (също част от интерфейса I2C).
  • QW: Изходен щифт Square Wave (може да генерира периодичен сигнал, напр. за аларми или други цели за синхронизиране).
  • 32K: 32KHz осцилаторен изход (полезен за приложения за прецизно синхронизиране).

По-долу са основните вградени компоненти на модула RTC DS3231:

  • Държач за батерия: Това позволява на модула да продължи да работи, когато външното захранване липсва.
  • RTC чип: Този чип поддържа часа и датата.
  • AT24C32 EEPROM: Той осигурява енергонезависимо съхранение за регистриране на данни и други цели с 1 000 000 цикъла на запис.
  • TCXO: Температурно компенсиран осцилатор за осигуряване на правилното време за вариращ диапазон от температури.
  • Температурен сензор: Той взема температурни показания и ги предоставя като част от функцията на модула.

2. Как да свържете DS3231 с ESP32

За да свържете DS3231 с ESP32, трябва да инсталирате Библиотека RTClib първи. След като инсталирате тази библиотека Adafruit RTC, можете да свържете вашата платка ESP32 с DS3231, като използвате протокола I2C. За да свържете ESP32 I2C с модула RTC DS3231, можете да използвате щифтовете ESP32 D21 и D22.

2.1. Схема на свързване на ESP32 с RTC DS3231

Първо, трябва да свържете ESP32 с вашия I2C RTC DS3231 модул. Следвайте дадената по-долу конфигурация на щифтове за окабеляване:

След като свържете ESP32 с RTC DS3231, вашата електрическа схема трябва да изглежда така. Можете също да захранвате DS3231 от VIN щифта на ESP32. Работното напрежение на DS3231 е от 3,3 до 5,5 VDC.

2.2. Инсталиране на необходимите библиотеки

След като веригата е готова, следващата стъпка е да конфигурирайте вашата платка ESP32 с Arduino IDE . За свързване на DS3231 ще трябва да инсталирате Библиотека RTClib . Можете да го инсталирате, като използвате мениджъра на библиотеката Arduino IDE.

3. Хардуер

Ще ви е необходим следният хардуер за проектиране на базиран на DS3231 RTC часовник с ESP32:

  • Платка за разработка ESP32
  • RTC DS3231 модул
  • батерия CR2032
  • Джъмперни проводници
  • Бредборд

4. Код

След като инсталирате RTC библиотеката, следващата част е да напишете кода за DS3231 и да го качите на платката ESP32. Първо, трябва да напишете кода, за да зададете текущото си време. След като зададете часа в DS3231, той ще запомни часа и ще продължи да работи, дори ако вашата платка ESP32 бъде изключена.

Сега отворете Arduino IDE, компилирайте и запишете кода на платката ESP32.

#include
#include

RTC_DS3231 rtc ; // Инициализиране на екземпляр на класа RTC_DS3231

невалиден настройвам ( ) {
Сериен. започвам ( 115200 ) ;
Тел. започвам ( ) ;

ако ( ! rtc. започвам ( ) ) {
Сериен. println ( „RTC не е открит“ ) ;
докато ( 1 ) ; // Виси за неопределено време, ако RTC не бъде намерен
}

//Разкоментирайте реда по-долу, за да зададете началната дата и час
//rtc.adjust(DateTime(__DATE__, __TIME__));
}

невалиден цикъл ( ) {
// Прочетете текущото време от сензора (DS3231)
Дата и час сега = rtc. сега ( ) ;

// Отпечатайте датата и часа на един ред с две цифри за часове, минути и секунди
Сериен. печат ( 'Текуща дата: ' ) ;
Сериен. печат ( сега. година ( ) , ДЕК ) ;
Сериен. печат ( '/' ) ;
printTwoDigits ( сега. месец ( ) ) ;
Сериен. печат ( '/' ) ;
printTwoDigits ( сега. ден ( ) ) ;
Сериен. печат ( ' Текущо време: ' ) ;
printTwoDigits ( сега. час ( ) ) ;
Сериен. печат ( ':' ) ;
printTwoDigits ( сега. минута ( ) ) ;
Сериен. печат ( ':' ) ;
printTwoDigits ( сега. второ ( ) ) ;
Сериен. println ( ) ;

забавяне ( 1000 ) ; // Актуализиране на всяка 1 секунда
}

невалиден printTwoDigits ( вътр номер ) {
ако ( номер < 10 ) {
Сериен. печат ( '0' ) ; // Добавете водеща нула за едноцифрени числа
}
Сериен. печат ( номер ) ;
}

4.1. Код Обяснение

Кодът започва с инициализиране на серийната I2C комуникация с помощта на жична библиотека. След това включихме RTC библиотеката от Adafruit за взаимодействие с модула DS3231. Тази библиотека предоставя функция за взаимодействие с модула RTC DS3231.

В настройвам част, I2C шината се стартира и проверява за наличните I2C устройства. Ако не бъде намерена, програмата виси за неопределено време. Скоростта на предаване също е дефинирана, така че можете да проверите изхода на серийния монитор на Arduino IDE.

Сверяване на часовника за първи път

Когато програмирате DS3231, трябва разкоментирайте този ред . Това ще получи вашето системно време и ще го съхрани в RTC паметта. По този начин часовникът на RTC модула се синхронизира с вашия системен часовник.

//rtc.adjust(DateTime(__DATE__, __TIME__));

След като времето е зададено, трябва да качите отново горния код, но този път трябва коментирайте функционалния ред rtc.adjust(). . В противен случай това ще презапише предишното ви зададено време и когато вашият ESP32 бъде изключен, RTC ще започне отново от момента, в който сте качили кода.

Правейки това, вашето време ще остане във фона на RTC модула, докато RTC модулът има захранване в своята клетка CR2032.

В цикъл част, текущата дата и час се четат от модула DS3231 с помощта на функцията rtc.now(). Компонентите за дата и час се извличат и форматираната дата се отпечатва на серийния монитор Arduino IDE на всяка секунда.

5. Изход

След като качите кода на платката ESP32, ще видите, че часът ще започне да се отпечатва на серийния монитор Arduino IDE.

6. Как да покажете времето на RTC DS3231 на OLED екран с помощта на ESP32

Можете също да отидете една крачка напред и да покажете часа на вашия OLED екран, след като го прочетете от DS3231. За целта трябва да инсталирате Библиотека Adafruit GFX SSD1306 в Arduino IDE.

Веднъж инсталиран, свържете ESP32 с OLED и RTC модула в следната конфигурация.

След като свържете вашия сензор, ще видите, че веригата изглежда като схематичната диаграма по-долу.

Сега качете следния код DS3231 на платката ESP32.

#include
#include
#include
#include 'RTClib.h'

RTC_DS3231 rtc ;

въглен дни [ 7 ] [ 12 ] = { 'неделя' , 'понеделник' , 'вторник' , 'сряда' , 'четвъртък' , 'петък' , 'събота' } ;

Adafruit_SSD1306 дисплей = Adafruit_SSD1306 ( 128 , 64 , и Тел , - 1 ) ;

невалиден настройвам ( ) {
Сериен. започвам ( 115200 ) ;

дисплей. започвам ( SSD1306_SWITCHCAPVCC , 0x3C ) ;

ако ( ! rtc. започвам ( ) ) {
Сериен. println ( 'Не може да се намери RTC! Проверете веригата.' ) ;
докато ( 1 ) ;
}
//декоментирайте реда по-долу, докато задавате време за първи път
//rtc.adjust(DateTime(__DATE__, __TIME__));
дисплей. clearDisplay ( ) ;
дисплей. setTextColor ( БЯЛ ) ;
дисплей. setTextSize ( 2 ) ;
дисплей. setCursor ( 0 , двадесет ) ;
дисплей. печат ( 'RTC ЧАСОВНИК' ) ;
дисплей. дисплей ( ) ;
забавяне ( 5000 ) ;
}

невалиден цикъл ( ) {
Дата и час сега = rtc. сега ( ) ;

дисплей. clearDisplay ( ) ;
дисплей. setTextSize ( 2 ) ;
дисплей. setCursor ( 75 , 0 ) ;
дисплей. println ( сега. второ ( ) , ДЕК ) ;
дисплей. setTextSize ( 2 ) ;
дисплей. setCursor ( 25 , 0 ) ;
дисплей. println ( ':' ) ;
дисплей. setTextSize ( 2 ) ;
дисплей. setCursor ( 65 , 0 ) ;
дисплей. println ( ':' ) ;
дисплей. setTextSize ( 2 ) ;
дисплей. setCursor ( 40 , 0 ) ;
дисплей. println ( сега. минута ( ) , ДЕК ) ;
дисплей. setTextSize ( 2 ) ;
дисплей. setCursor ( 0 , 0 ) ;
дисплей. println ( сега. час ( ) , ДЕК ) ;
дисплей. setTextSize ( 2 ) ;
дисплей. setCursor ( 0 , 25 ) ;
дисплей. println ( сега. ден ( ) , ДЕК ) ;
дисплей. печат ( дни [ сега. ден от седмицата ( ) ] ) ;
дисплей. setTextSize ( 2 ) ;
дисплей. setCursor ( двадесет , 25 ) ;
дисплей. println ( '-' ) ;
дисплей. setTextSize ( 2 ) ;
дисплей. setCursor ( 35 , 25 ) ;
дисплей. println ( сега. месец ( ) , ДЕК ) ;
дисплей. setTextSize ( 2 ) ;
дисплей. setCursor ( 60 , 25 ) ;
дисплей. println ( '-' ) ;
дисплей. setTextSize ( 2 ) ;
дисплей. setCursor ( 75 , 25 ) ;
дисплей. println ( сега. година ( ) , ДЕК ) ;
дисплей. дисплей ( ) ;
}

Код Обяснение

Кодът започна с някои важни библиотеки, които са необходими за RTC и OLED екрани. OLED дисплеят е настроен с помощта на библиотеката Adafruit SSD1306.

В частта за цикъл текущата дата и час се получават с помощта на rtc.now(). След това OLED екранът се изчиства и компонентите на времето се показват във формат на цифров часовник. Можете също така да промените кода, за да коригирате формата на датата и часа.

След като кодът бъде качен на вашата дъска, ще получите текущия час на OLED екрана.

Забележка: Горният код използва 0x3C I2C адрес за OLED. Това е най-често срещаният I2C адрес, наличен на SSD1306 OLED дисплеи. Ако искате да намерите I2C адреса за вашия OLED екран, можете да стартирате Код на I2C скенер .

Заключение

DS3231 е RTC сензор, който може да се използва за отчитане на времето. Има резервна батерия, която може да поддържа времето точно, дори ако платката на микроконтролера ви е изключена. За да свържете ESP2 с DS3231, трябва да инсталирате библиотеката RTClib във вашата Arduino IDE. След това трябва да свържете RTC модула през I2C протокола, като използвате цифровия щифт на ESP32. След като се свържете, просто качете кода и коригирайте часа. Сега RTC сензорът ще пази времето и вие можете да го четете на вашия сериен монитор при проекти, базирани на време.