Com utilitzar el mòdul de rellotge en temps real (RTC) DS3231 amb un ESP32

Com Utilitzar El Modul De Rellotge En Temps Real Rtc Ds3231 Amb Un Esp32



ESP32 és una placa de microcontrolador intel·ligent amb capacitats Wi-Fi i Bluetooth integrades. L'ESP32 inclou un RTC intern, però el seu funcionament depèn de la potència. Per tant, si voleu dissenyar projectes o circuits que voleu executar fins i tot quan no hi ha energia, heu d'utilitzar qualsevol mòdul RTC extern com DS1307 o DS3231.

Ja hem fet un tutorial sobre DS1307 interfície amb el mòdul ESP32 . Avui parlarem dels conceptes bàsics del sensor DS3231 RTC i comprovarem com es pot connectar amb la placa ESP32.

Taula de continguts:







1. Què és el mòdul DS3231 RTC



2. Com connectar DS3231 amb ESP32



3. Maquinari





4. Codi

5. Sortida



6. Com mostrar l'hora RTC DS3231 en una pantalla OLED mitjançant ESP32

Conclusió

1. Què és el mòdul DS3231 RTC

El mòdul DS3231 proporciona una cronometratge molt precisa. Inclou un oscil·lador de cristall integrat amb compensació de temperatura (TCXO) per donar-nos el temps amb gran precisió. El mòdul funciona amb el protocol I2C mitjançant la configuració mestre-esclau. Pot mantenir l'hora i la data amb una bateria de seguretat fins i tot quan no hi ha energia d'entrada principal. S'utilitza habitualment en dispositius que depenen de l'hora i la data.

El DS3231 fa un seguiment dels segons, minuts i hores. També pot mantenir un registre de dates i dies laborables. Quan es tracta d'anys de traspàs, ajusta automàticament el temps en conseqüència. A més, pot mostrar l'hora tant en format de 12 hores com de 24 hores, amb un indicador AM/PM.

1.1. DS3231 vs DS1307

Tant DS3231 com DS1307 són mòduls de cronometratge amb suport de bateria de seguretat. Tanmateix, el DS3231 és més precís que el DS1307. El motiu principal és que DS1307 depèn d'un cristall extern de 32 kHz per a l'hora.

Tanmateix, l'RTC DS3231 inclou un oscil·lador de cristall compensat per temperatura (TCXO). Això fa que sigui menys afectat per la temperatura externa i, com a resultat, té un avantatge de precisió d'uns minuts per any que el DS1307.

1.2. Pinout DS3231

DS3231 funciona mitjançant el protocol I2C. Al cor d'aquest mòdul RTC, tenim el xip RTC precís dissenyat per Maxim. Aquest xip gestiona totes les funcions de temps i es comunica mitjançant l'I2C amb ESP32 o placa Arduino.

Els pins principals dels mòduls RTC DS3231 són:

  • VCC: Connecteu aquest pin al terminal positiu de la vostra font d'alimentació.
  • GND: Connexió a terra.
  • SDA: Pin de dades sèrie (utilitzat per a la comunicació I2C).
  • SCL: Pin del rellotge sèrie (també part de la interfície I2C).
  • QW: Pin de sortida d'ona quadrada (pot generar un senyal periòdic, per exemple, per a alarmes o altres finalitats de temporització).
  • 32K: Sortida d'oscil·lador de 32 KHz (útil per a aplicacions de sincronització precisa).

Els següents són els principals components integrats del mòdul RTC DS3231:

  • Porta bateria: Permet que el mòdul continuï funcionant quan no hi ha alimentació externa.
  • Xip RTC: Aquest xip manté l'hora i la data.
  • EEPROM AT24C32: Proporciona emmagatzematge no volàtil per al registre de dades i altres propòsits amb 1.000.000 de cicles d'escriptura.
  • TCXO: Oscil·lador compensat per temperatura per proporcionar el temps correcte per a un rang variable de temperatures.
  • Sensor de temperatura: Pren lectures de temperatura i les proporciona com a part de la funció del mòdul.

2. Com connectar DS3231 amb ESP32

Per connectar DS3231 amb ESP32, cal instal·lar el Biblioteca RTClib primer. Després d'instal·lar aquesta biblioteca Adafruit RTC, podeu connectar la vostra placa ESP32 amb DS3231 mitjançant el protocol I2C. Per connectar ESP32 I2C amb el mòdul RTC DS3231, podeu utilitzar els pins ESP32 D21 i D22.

2.1. Esquema de cablejat d'ESP32 amb RTC DS3231

Primer, heu de connectar l'ESP32 amb el vostre mòdul I2C RTC DS3231. Seguiu la configuració del pin que es mostra a continuació per al cablejat:

Després de connectar l'ESP32 amb l'RTC DS3231, el vostre diagrama de cablejat hauria de ser així. També podeu alimentar el DS3231 des del pin VIN de l'ESP32. Les tensions de funcionament del DS3231 són de 3,3 a 5,5 VDC.

2.2. Instal·lació de les biblioteques necessàries

Un cop el circuit estigui preparat, el següent pas és fer-ho configureu la vostra placa ESP32 amb Arduino IDE . Per connectar amb DS3231, haureu d'instal·lar el fitxer Biblioteca RTClib . Podeu instal·lar-lo mitjançant el gestor de biblioteques Arduino IDE.

3. Maquinari

Necessitareu el següent maquinari per dissenyar el rellotge RTC basat en DS3231 amb ESP32:

  • Placa de desenvolupament ESP32
  • Mòdul RTC DS3231
  • Bateria CR2032
  • Cables de pont
  • Tauler

4. Codi

Després d'instal·lar la biblioteca RTC, la següent part és escriure el codi per a DS3231 i carregar-lo a la placa ESP32. Primer, heu d'escriure el codi per configurar la vostra hora actual. Després de configurar l'hora a DS3231, recordarà l'hora i continuarà funcionant fins i tot si s'apaga el tauler ESP32.

Ara obriu l'IDE Arduino, compileu i enregistreu el codi a la placa ESP32.

#inclou
#inclou

RTC_DS3231 rtc ; // Inicialitzar una instància de la classe RTC_DS3231

buit configuració ( ) {
Serial. començar ( 115200 ) ;
Filferro. començar ( ) ;

si ( ! rtc. començar ( ) ) {
Serial. imprimirln ( 'RTC no detectat' ) ;
mentre ( 1 ) ; // Penja indefinidament si no es troba RTC
}

//Descomenteu la línia següent per definir la data i l'hora inicials
//rtc.adjust(DateTime(__DATE__, __TIME__));
}

buit bucle ( ) {
// Llegir l'hora actual del sensor (DS3231)
DateTime ara = rtc. ara ( ) ;

// Imprimeix la data i l'hora a la mateixa línia amb dos dígits per hores, minuts i segons
Serial. imprimir ( 'Data corrent: ' ) ;
Serial. imprimir ( ara. curs ( ) , DES ) ;
Serial. imprimir ( '/' ) ;
imprimir dos dígits ( ara. mes ( ) ) ;
Serial. imprimir ( '/' ) ;
imprimir dos dígits ( ara. dia ( ) ) ;
Serial. imprimir ( ' Hora actual: ' ) ;
imprimir dos dígits ( ara. hores ( ) ) ;
Serial. imprimir ( ':' ) ;
imprimir dos dígits ( ara. minut ( ) ) ;
Serial. imprimir ( ':' ) ;
imprimir dos dígits ( ara. segon ( ) ) ;
Serial. imprimirln ( ) ;

retard ( 1000 ) ; // Actualitza cada segon
}

buit imprimir dos dígits ( int nombre ) {
si ( nombre < 10 ) {
Serial. imprimir ( '0' ) ; // Afegeix un zero inicial per als números d'un sol dígit
}
Serial. imprimir ( nombre ) ;
}

4.1. Explicació del codi

El codi comença inicialitzant la comunicació sèrie I2C amb l'ajuda d'una biblioteca de cables. Després d'això, vam incloure la biblioteca RTC d'Adafruit per a la interfície amb el mòdul DS3231. Aquesta biblioteca proporciona una funció per interactuar amb el mòdul RTC DS3231.

En el configuració part, el bus I2C s'inicia i es comprova els dispositius I2C disponibles. Si no es troba, el programa es penja indefinidament. La velocitat de transmissió també es defineix perquè pugueu comprovar la sortida al monitor sèrie Arduino IDE.

Configuració del rellotge per primera vegada

Quan programeu el DS3231, heu de fer-ho descomenta aquesta línia . Això obtindrà l'hora del vostre sistema i l'emmagatzemarà a la memòria RTC. En fer això, el rellotge del mòdul RTC es sincronitza amb el rellotge del vostre sistema.

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

Un cop establerta l'hora, heu de tornar a carregar el codi anterior, però aquesta vegada ho heu de fer comentar la línia de funció rtc.adjust(). . En cas contrari, això sobreescriurà l'hora establerta anteriorment i quan l'ESP32 s'apaga, l'RTC es tornarà a iniciar des del moment en què heu penjat el codi.

En fer això, el vostre temps romandrà present al fons del mòdul RTC sempre que el mòdul RTC tingui energia a la seva cel·la CR2032.

En el bucle part, la data i l'hora actuals es llegeixen des del mòdul DS3231 mitjançant la funció rtc.now(). S'extreuen els components de la data i l'hora i la data amb format s'imprimeix al monitor sèrie Arduino IDE cada segon.

5. Sortida

Després de carregar el codi a la placa ESP32, veureu que l'hora començarà a imprimir-se al monitor sèrie Arduino IDE.

6. Com mostrar l'hora de RTC DS3231 a la pantalla OLED mitjançant ESP32

També podeu anar un pas més enllà i mostrar l'hora a la vostra pantalla OLED després de llegir-la des del DS3231. Per a això, cal instal·lar el Biblioteca Adafruit GFX SSD1306 a l'IDE d'Arduino.

Un cop instal·lat, connecteu l'ESP32 amb el mòdul OLED i RTC amb la configuració següent.

Després de connectar el sensor, veureu que el circuit s'assembla al diagrama esquemàtic següent.

Ara carregueu el següent codi DS3231 a la placa ESP32.

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

RTC_DS3231 rtc ;

char dies [ 7 ] [ 12 ] = { 'diumenge' , 'dilluns' , 'dimarts' , 'dimecres' , 'dijous' , 'divendres' , 'dissabte' } ;

Pantalla Adafruit_SSD1306 = Adafruit_SSD1306 ( 128 , 64 , & Filferro , - 1 ) ;

buit configuració ( ) {
Serial. començar ( 115200 ) ;

visualització. començar ( SSD1306_SWITCHCAPVCC , 0x3C ) ;

si ( ! rtc. començar ( ) ) {
Serial. imprimirln ( 'No s'ha pogut trobar RTC! Comproveu el circuit'. ) ;
mentre ( 1 ) ;
}
// descomenta la línia de sota mentre estableix l'hora per primera vegada
//rtc.adjust(DateTime(__DATE__, __TIME__));
visualització. clearDisplay ( ) ;
visualització. setTextColor ( BLANC ) ;
visualització. setTextSize ( 2 ) ;
visualització. setCursor ( 0 , 20 ) ;
visualització. imprimir ( 'RELLOTGE RTC' ) ;
visualització. visualització ( ) ;
retard ( 5000 ) ;
}

buit bucle ( ) {
DateTime ara = rtc. ara ( ) ;

visualització. clearDisplay ( ) ;
visualització. setTextSize ( 2 ) ;
visualització. setCursor ( 75 , 0 ) ;
visualització. imprimirln ( ara. segon ( ) , DES ) ;
visualització. setTextSize ( 2 ) ;
visualització. setCursor ( 25 , 0 ) ;
visualització. imprimirln ( ':' ) ;
visualització. setTextSize ( 2 ) ;
visualització. setCursor ( 65 , 0 ) ;
visualització. imprimirln ( ':' ) ;
visualització. setTextSize ( 2 ) ;
visualització. setCursor ( 40 , 0 ) ;
visualització. imprimirln ( ara. minut ( ) , DES ) ;
visualització. setTextSize ( 2 ) ;
visualització. setCursor ( 0 , 0 ) ;
visualització. imprimirln ( ara. hores ( ) , DES ) ;
visualització. setTextSize ( 2 ) ;
visualització. setCursor ( 0 , 25 ) ;
visualització. imprimirln ( ara. dia ( ) , DES ) ;
visualització. imprimir ( dies [ ara. dia de la setmana ( ) ] ) ;
visualització. setTextSize ( 2 ) ;
visualització. setCursor ( 20 , 25 ) ;
visualització. imprimirln ( '-' ) ;
visualització. setTextSize ( 2 ) ;
visualització. setCursor ( 35 , 25 ) ;
visualització. imprimirln ( ara. mes ( ) , DES ) ;
visualització. setTextSize ( 2 ) ;
visualització. setCursor ( 60 , 25 ) ;
visualització. imprimirln ( '-' ) ;
visualització. setTextSize ( 2 ) ;
visualització. setCursor ( 75 , 25 ) ;
visualització. imprimirln ( ara. curs ( ) , DES ) ;
visualització. visualització ( ) ;
}

Explicació del codi

El codi va començar amb algunes biblioteques importants que són necessàries per a les pantalles RTC i OLED. La pantalla OLED es configura mitjançant la biblioteca Adafruit SSD1306.

A la part del bucle, la data i l'hora actuals s'obtenen mitjançant rtc.now(). Després d'això, la pantalla OLED s'esborra i els components de l'hora es mostren en un format de rellotge digital. També podeu modificar el codi per ajustar el format de data i hora.

Un cop carregat el codi al vostre tauler, obtindreu l'hora actual a la pantalla OLED.

Nota: El codi anterior utilitza el 0x3C Adreça I2C per a OLED. Aquesta és l'adreça I2C més comuna disponible a les pantalles OLED SSD1306. Si voleu trobar l'adreça I2C per a la vostra pantalla OLED, podeu executar el Codi de l'escàner I2C .

Conclusió

DS3231 és un sensor RTC que es pot utilitzar per cronometrar. Té una bateria de còpia de seguretat que pot mantenir l'hora precisa fins i tot si la placa del microcontrolador està apagada. Per connectar ESP2 amb DS3231, heu d'instal·lar la biblioteca RTClib al vostre IDE d'Arduino. Després d'això, heu de connectar el mòdul RTC a través del protocol I2C mitjançant el pin digital de l'ESP32. Un cop connectat, només cal que carregueu el codi i ajusteu l'hora. Ara el sensor RTC mantindrà el temps i el podeu llegir al vostre monitor sèrie en projectes de disseny basats en el temps.