Rellotge en temps real (RTC) ESP32 amb DS1307 i pantalla OLED

Rellotge En Temps Real Rtc Esp32 Amb Ds1307 I Pantalla Oled



ESP32 inclou un mòdul RTC integrat, però només funciona quan hi ha energia. Si es perd energia, el rellotge es reiniciarà i no podrà mantenir l'hora correcta. Per tant, si voleu fer un seguiment del temps o controlar qualsevol dispositiu basat en el temps, proveu el sensor DS1307 RTC. Tanmateix, és possible que estigueu pensant a connectar una bateria de seguretat amb la vostra placa ESP32, però aquest no és el millor dels casos si teniu una manca d'energia. La millor alternativa és utilitzar el sensor DS1307, ja que ve amb una bateria integrada que pot durar un mínim d'un any.

Per aclarir les coses, el rellotge en temps real (RTC) intern de l'ESP32 pot fer un seguiment del temps fins i tot quan el processador principal està apagat o en son profund. Podeu utilitzar l'ESP32 RTC per fer un seguiment del temps sense utilitzar molta potència ni afectar el processador principal. Però encara requereix energia per funcionar, no gaire, però es requereix una quantitat mínima d'energia perquè funcioni RTC intern.

Amb això, només ens queda la solució d'utilitzar el mòdul RTC extern. Vegem els passos per connectar la placa ESP32 amb el mòdul DS1307 RTC.







Continguts:

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

DS1307 és un dispositiu de baix consum que pot fer un seguiment de l'hora i la data amb precisió. Utilitza el format decimal codificat binari (BCD). Pot indicar-vos l'hora en un format detallat com ara segons, minuts i fins i tot hores i dies. També podeu imprimir la data en format complet com mes i any. També sap quan és un any de traspàs, fins al 2100. Per comunicar-se amb DS1307, podeu utilitzar el protocol I2C.





El DS1307 té una bateria integrada que pot alimentar-lo durant aproximadament un any sense una font externa de 5 V. Amb aquesta bateria de còpia de seguretat, pot retenir el temps fins i tot quan l'alimentació principal està apagada. També té 56 bytes de SRAM per emmagatzemar algunes dades. El DS1307 és un dispositiu pràctic que té moltes aplicacions quan es combina amb una placa Arduino o ESP32. Per exemple, aquestes dades poden ser útils en el registre de dades, sistemes d'alarma o control industrial. Si necessiteu un cronometratge fiable, el DS1307 és una opció fantàstica.





Especificacions del mòdul RTC DS1307

El mòdul RTC DS1307 consta del RTC IC, una EEPROM, un oscil·lador de cristall i un suport de bateria per a còpia de seguretat.



A continuació es detallen aquestes parts:

DS1307 RTC IC : El DS1307 RTC IC és un xip de 8 pins que fa un seguiment de l'hora i la data mitjançant el protocol I2C. Utilitza molt poca potència, menys de 500 nA. Pot mostrar el temps en segons, minuts i hores, i la data en dies, mesos i anys. També pot canviar entre els formats de 24 hores i de 12 hores.

24C32 IC EEPROM : El 24C32 EEPROM IC és un xip de 32 bytes d'Atmel que emmagatzema la configuració, l'hora i la data. També utilitza el protocol I2C.

Cristall de 32,768 kHz : L'oscil·lador de cristall de 32,768 kHz proporciona la freqüència de rellotge per al DS1307 RTC IC.

Porta bateria : El suport de la bateria conté una bateria CR2032. És una pila moneder de liti de 3V. Proporciona energia contínua al DS1307 RTC IC.

Provisió del sensor DS18B20 : La disposició del sensor DS18B20 us permet soldar i utilitzar el sensor de temperatura DS18B20. No està soldada prèviament. Podeu soldar el paquet del forat passant i obtenir la temperatura del pin DS del mòdul.

La llista següent ofereix algunes especificacions ràpides del sensor DS1307 RTC:

  • Tensió de funcionament: 4,5-5,5 V, normalment 5 V
  • Consum actual : Menys d'1,5 mA
  • Precisió : 0–40 °C, depèn del cristall
  • Bateria : CR2032 (moneda de 3 V)
  • Memòria : 56 bytes de RAM no volàtil
  • Interfície : Interfície sèrie de dos cables (I2C).
  • Sortida : pin de sortida d'1 Hz
  • Sortida d'ona quadrada programable : Consumeix menys de 500 nA en mode de seguretat de la bateria
  • Detecció de fallades d'alimentació : Circuit automàtic de detecció de fallades d'alimentació i commutació
  • Circuit de detecció de potència : Pot canviar automàticament per fer una còpia de seguretat del subministrament en cas d'escassetat d'energia
  • Compensació d'anys de traspàs : Vàlid fins a l'any 2100

Pinout del mòdul RTC DS1307

El mòdul té diversos pins amb diferents funcions.

  • VCC és el pin que necessita una tensió de CC entre 3,3 V i 5,5 V per alimentar el mòdul.
  • GND és el pin de baixa tensió o terra.
  • SDA i SCL són els pins que comuniquen dades i senyals de rellotge a través del bus I2C.
  • DS és el pin que mesura la temperatura amb el sensor DS1307 si en teniu un al mòdul RTC.
  • SQ és el pin que genera un senyal d'ona quadrada amb una freqüència d'1 Hz, 4 kHz, 8 kHz o 32 kHz, depenent de com el programeu.
  • UNA és el pin que utilitza una bateria de 3 V per mantenir l'hora precisa quan l'alimentació principal està apagada.

2. Com connectar RTC DS1307 i pantalla OLED amb ESP32

Per connectar ESP32 amb DS1307 i pantalla OLED, podeu utilitzar els pins I2C integrats de la placa ESP32. Tant la pantalla DS1307 com la pantalla OLED són dispositius basats en I2C. A continuació, es pot comunicar mitjançant el protocol esclau mestre I2C a través del bus I2C.

Abans de passar cap a la interfície d'ESP32 amb DS1307 i pantalla OLED, primer heu d'instal·lar algunes biblioteques necessàries.

Instal·lació de les biblioteques necessàries

Necessitareu dues biblioteques, una per al mòdul RTC i una altra per a la pantalla OLED. Utilitzant OLED amb un mòdul RTC, podeu crear visualitzacions prèvies del rellotge sorprenents i interactives. Si no teniu cap pla de mostrar l'hora a la pantalla, podeu ometre aquesta instal·lació de biblioteca.

A continuació es mostren les dues biblioteques que necessitareu:

  • RTClib (per Adafruit) és una biblioteca IDE d'Arduino per configurar i obtenir temps d'un RTC. També ofereix classes per manipular dates, hores i durades. Amb aquesta biblioteca, podeu connectar i programar els mòduls de rellotge en temps real (RTC), com ara DS1307 i DS3231.
  • S SD1306 (d'Adafruit) és una biblioteca per a Arduino, mitjançant la qual podeu connectar i programar les pantalles OLED amb Arduino o qualsevol altra placa de microcontrolador.

Per descarregar i instal·lar aquestes dues biblioteques a l'IDE d'Arduino, primer obriu el fitxer Gestor de biblioteca cerqueu la biblioteca RTClib i feu clic Instal·lar :

Tindreu l'opció d'instal·lar només la biblioteca o les seves dependències. Feu clic a Instal·leu-ho tot botó per instal·lar completament la biblioteca. D'aquesta manera no obtindreu cap error si modifiqueu el codi que depèn de les dependències d'aquesta biblioteca.

De la mateixa manera, cerqueu la biblioteca SSD1306. Aquesta biblioteca és necessària per a una pantalla OLED. Feu clic Instal·lar procedir.

Aquesta vegada també rebràs el mateix missatge de confirmació. Feu clic a Instal·leu-ho tot opció.

Ara les dues biblioteques per a OLED i DS1307 estan instal·lades i llestes per utilitzar. Però abans d'això, primer, esbrineu l'adreça I2C de la pantalla OLED.

3. Trobar l'adreça I2C de la pantalla OLED

L'adreça I2C és un identificador únic per a cada dispositiu del bus I2C. Permet que el dispositiu mestre es comuniqui amb un dispositiu esclau específic enviant dades a la seva adreça. L'objectiu de l'adreça I2C és evitar conflictes i confusió entre diversos dispositius del mateix bus.

Per obtenir l'adreça d'un dispositiu I2C, podeu utilitzar a esbós senzill que escaneja el bus i imprimeix les adreces dels dispositius que troba. Alternativament, podeu consultar el full de dades del dispositiu per veure la seva adreça predeterminada o configurable.

En el nostre cas, després d'executar el codi de l'escàner I2C, es mostra la següent adreça I2C de la pantalla OLED al terminal IDE d'Arduino.

La majoria de les vegades, hi ha una gran probabilitat que també obtingueu el mateix 0x3C adreça de la vostra pantalla OLED.

4. Interfície del mòdul OLED i RTC DS1307 amb ESP32

1. Connecteu els pins SDA i SCL tant del mòdul DS1307 com del Pantalla OLED als pins I2C de l'ESP32. Generalment, aquests són GPIO 21 i GPIO 22 , però també podeu assignar altres pins al codi si cal.

2. Connecteu tant el VCC com el GND del DS1307 i la pantalla OLED als pins de 3,3 V i GND de l'ESP32.

3. Inseriu una bateria de piles monedes CR2032 al mòdul DS1307 per proporcionar energia de reserva per al rellotge en temps real.

4. Carregueu el codi d'exemple d'aquest tutorial a la vostra placa ESP32. Modifiqueu el codi per a sortides personalitzades.

Després de la càrrega, un rellotge començarà des de l'hora establerta i mostrarà l'hora a la pantalla OLED.

5. Esquema del circuit

El diagrama de circuit de l'ESP32 amb DS1307 és senzill, amb només quatre cables que cal connectar. Podeu escurçar els cables I2C SDA i SCL dels sensors OLED i DS1307. De la mateixa manera, per alimentar aquests dos sensors, es pot utilitzar el pin 3V3 i GND de la placa ESP32. També podeu alimentar-vos des d'una font independent si cal.

Nota : És segur alimentar l'RTC DS1307 des d'un pin de 3,3 V d'ESP32 si no es supera el límit actual d'ESP32. Però si voleu estar en un lloc segur, podeu utilitzar una font d'alimentació independent per al mòdul RTC o provar el sensor DS3231 de baixa potència el rang de funcionament del qual és d'entre 3,3 i 5,5 VDC.

La imatge següent il·lustra la connexió de l'ESP32 amb el sensor RTC DS1307.

De la mateixa manera, si voleu connectar la pantalla OLED per mostrar l'hora, podeu utilitzar els mateixos pins I2C i els pins d'alimentació de la placa ESP32.

6. Codi

Amb el codi següent, establirem la data i l'hora actuals al RTC. Després de configurar l'hora, el codi mostrarà l'hora al terminal Arduino IDE. Abans de penjar el codi, cal que l'actualitzeu amb la vostra data i hora actuals.

#include 'RTClib.h'
RTC_DS1307 DS1307_RTC;
char Dies_setmana [ 7 ] [ 12 ] = { 'diumenge' , 'dilluns' , 'dimarts' , 'dimecres' , 'dijous' , 'divendres' , 'dissabte' } ;
configuració de buit ( ) {
Serial.begin ( 115200 ) ;
#ifndef ESP8266
mentre ( ! Serial ) ;
#endif
si ( ! DS1307_RTC.begin ( ) ) {
Serial.println ( 'No s'ha pogut trobar RTC' ) ;
mentre ( 1 ) ;
}
DS1307_RTC.ajustar ( Data i hora ( F ( __DATA__ ) , F ( __TEMPS__ ) ) ) ;
}
bucle buit ( ) {
DateTime now = DS1307_RTC.now ( ) ;
Impressió.sèria ( ara.any ( ) , DES ) ;
Impressió.sèria ( '/' ) ;
Impressió.sèria ( ara.mes ( ) , DES ) ;
Impressió.sèria ( '/' ) ;
Impressió.sèria ( now.day ( ) , DES ) ;
Impressió.sèria ( ' (' ) ;
Impressió.sèria ( Dies_setmana [ ara.dia de la setmana ( ) ] ) ;
Impressió.sèria ( ') ' ) ;
Impressió.sèria ( ara.hora ( ) , DES ) ;
Impressió.sèria ( ':' ) ;
Impressió.sèria ( ara.minut ( ) , DES ) ;
Impressió.sèria ( ':' ) ;
Impressió.sèria ( ara.segon ( ) , DES ) ;
Serial.println ( ) ;
retard ( 1000 ) ;
}

Aquest codi utilitza el Biblioteca RTClib per connectar amb un mòdul de rellotge en temps real DS1307 que fa un seguiment de la data i l'hora.

El configuració La funció va començar amb la inicialització de la velocitat de transmissió. Després d'això, dins d'aquest apartat, hem definit la funció per sincronitzar la data i l'hora de l'ordinador amb el sensor DS1307. Això carregarà el temps de compilació del codi al sensor RTC.

Podeu utilitzar el bucle funció per obtenir la data i l'hora de RTC. A continuació, podeu mostrar-lo al monitor sèrie així: any/mes/dia (dia de la setmana) hora:minut:segon. Recordeu afegir un retard d'un segon després de cada bucle, perquè el codi no s'executi massa ràpid.

Mostra l'hora actual a la pantalla OLED

Per mostrar la mateixa hora a la pantalla OLED, hem d'afegir una part de codi addicional per a la pantalla OLED. Simplement carregueu el codi donat. Aquest codi mostrarà l'hora actual a la pantalla OLED.

Recordeu que aquí fem servir el mòdul de pantalla OLED SSD I2C de 0,96 polzades 128 × 64. Si utilitzeu qualsevol altra mida, modifiqueu el codi en conseqüència. A més, comproveu l'adreça I2C i modifiqueu-la al codi indicat. En el nostre cas, tenim una adreça I2C 0x3C per a la pantalla OLED.

#inclou
#include
#inclou
#include 'RTClib.h'
#definir SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

Pantalla Adafruit_SSD1306 ( SCREEN_WIDTH, SCREEN_HEIGHT, & Filferro, - 1 ) ;
RTC_DS1307 RTC;
dies de char [ 7 ] [ 12 ] = { 'diumenge' , 'dilluns' , 'dimarts' , 'dimecres' , 'dijous' , 'divendres' , 'dissabte' } ;
configuració de buit ( ) {
Serial.begin ( 115200 ) ;
si ( ! RTC.begin ( ) ) {
Serial.println ( 'No s'ha pogut trobar RTC' ) ;
mentre ( 1 ) ;
}
RTC.ajustar ( Data i hora ( F ( __DATA__ ) , F ( __TEMPS__ ) ) ) ;
si ( ! mostrar.iniciar ( SSD1306_SWITCHCAPVCC, 0x3C ) ) {
Serial.println ( F ( 'Ha fallat l'assignació de SSD1306' ) ) ;
per ( ;; ) ;
}
retard ( 1000 ) ;
display.clearDisplay ( ) ;
display.setTextSize ( 2 ) ;
display.setTextColor ( BLANC ) ;
display.setCursor ( 30 , 20 ) ;
display.println ( 'Linux' ) ;
pantalla.visualització ( ) ;
retard ( 3000 ) ;
display.clearDisplay ( ) ;
}
bucle buit ( ) {
DateTime now = RTC.now ( ) ;
display.clearDisplay ( ) ;
display.setTextSize ( 2 ) ;
display.setCursor ( 0 , 0 ) ;
mostrar.imprimir ( now.day ( ) ) ;
mostrar.imprimir ( '/' ) ;
mostrar.imprimir ( ara.mes ( ) ) ;
mostrar.imprimir ( '/' ) ;
mostrar.imprimir ( ara.any ( ) ) ;
display.println ( dies [ ara.dia de la setmana ( ) ] ) ;
display.println ( ' ' ) ;
display.setCursor ( 0 , 40 ) ;
si ( ara.hora ( ) < 10 )
mostrar.imprimir ( '0' ) ;
mostrar.imprimir ( ara.hora ( ) ) ;
mostrar.imprimir ( ':' ) ;
si ( ara.minut ( ) < 10 )
mostrar.imprimir ( '0' ) ;
mostrar.imprimir ( ara.minut ( ) ) ;
mostrar.imprimir ( ':' ) ;
si ( ara.segon ( ) < 10 )
mostrar.imprimir ( '0' ) ;
display.println ( ara.segon ( ) ) ;
pantalla.visualització ( ) ;
}

El codi va començar amb les biblioteques que vam instal·lar per a l'RTC i la pantalla. Després d'això, defineix la mida de la pantalla i l'adreça de visualització. Inicialitza la matriu amb noms de dies laborables.

El configuració part comença amb la comunicació en sèrie. Comprova si l'RTC i la pantalla funcionen o no. Després d'això, hem definit una cadena de text 'Linuxhint' que es mostrarà durant 3 segons. Aquest és només un missatge d'obertura o d'inici, també podeu modificar aquest missatge amb el vostre text personalitzat.

El bucle La funció obté la data i l'hora del mòdul DS1307. Després d'això, esborra la pantalla i imprimeix la data i l'hora d'una manera formatada. El codi també afegeix zeros inicials a les hores, minuts i segons, en cas que els seus valors siguin inferiors a 10.

7. Maquinari

Després de carregar el codi a la placa ESP32, veureu la següent sortida a la pantalla OLED. Per al maquinari, hem utilitzat la pantalla OLED i un mòdul I2C RTC DS1307. S'utilitza una placa ESP32 amb 30 pins. També podeu experimentar amb qualsevol altra placa ESP32, però assegureu-vos de connectar correctament els pins I2C.

Conclusió

El RTC DS1307 té una SRAM de 56 bytes amb suport de bateria de seguretat. És un dispositiu de 8 pins que utilitza un protocol de comunicació I2C. Per connectar el mòdul DS1307 RTC amb l'ESP32, podeu utilitzar els pins I2C (GPIO 22 (SCL) i GPIO 21 (SDA)) de la placa ESP32. Podeu imprimir l'hora en una consola Arduino IDE o utilitzar qualsevol pantalla com OLED o I2C LCD per mostrar l'hora. El mòdul DS1307 RTC és un dispositiu útil per fer un seguiment de l'hora i la data en diverses aplicacions. Algunes aplicacions principals inclouen registradors de dades, rellotges digitals i rellotges intel·ligents.