- ¿Qué es RTC?
- Familiarización con las pantallas OLED:
- Material requerido:
- Diagrama de circuito:
- Explicación del código:
En este tutorial, aprenderemos sobre el reloj en tiempo real (RTC) y su interfaz con el ESP32 y la pantalla OLED.
Vamos a utilizar el módulo RTC DS3231 para realizar un seguimiento de la hora correcta y mostrarlo en la pantalla OLED SPI utilizando ESP32 como nuestro microcontrolador. ESP32 es más que un microcontrolador. Tiene chip Wi-Fi y Bluetooth en su interior y 39 pines GPIO. Admite todos los protocolos de comunicación como SPI, I2C, UART, etc. Si es nuevo en ESP32, primero consulte nuestro tutorial Introducción a ESP32.
¿Qué es RTC?
DS3231 es un módulo RTC (reloj en tiempo real). Se utiliza para mantener la fecha y la hora de la mayoría de los proyectos de electrónica. Este módulo tiene su propia fuente de alimentación de celda de moneda con la que mantiene la fecha y la hora incluso cuando se desconecta la alimentación principal o la MCU ha pasado por un restablecimiento completo. Entonces, una vez que establezcamos la fecha y la hora en este módulo, siempre lo mantendrá al día. Hay varios tipos de circuitos integrados de RTC disponibles como DS1307, DS3231, etc.
Anteriormente hemos utilizado DS3231 RTC con Arduino en los siguientes proyectos:
- Alimentador automático de mascotas con Arduino
- Registrador de datos Arduino
Nota: Cuando utilice este módulo por primera vez, deberá configurar la fecha y la hora. También puede usar RTC IC DS1307, anteriormente hemos usado DS1307 con Arduino.
Familiarización con las pantallas OLED:
El término OLED significa " diodo emisor de luz orgánica" , utiliza la misma tecnología que se utiliza en la mayoría de nuestros televisores, pero tiene menos píxeles en comparación con ellos. Es muy divertido tener estos módulos de visualización de aspecto atractivo, ya que hará que nuestros proyectos se vean bien. Hemos cubierto un artículo completo sobre pantallas OLED y sus tipos aquí.
Estamos usando una pantalla OLED monocromática de 7 pines SSD1306 de 0.96 ”. La razón para elegir esta pantalla es que puede funcionar en tres protocolos de comunicación diferentes, como el modo SPI de 3 cables, el modo SPI de cuatro cables y el modo IIC. Este tutorial cubrirá cómo usar el módulo en modo SPI de 4 cables, ya que es el modo de comunicación más rápido y el predeterminado.
Los pines y sus funciones se explican en la tabla siguiente.
Número de PIN |
Nombre de PIN |
Otros nombres |
Uso |
1 |
Gnd |
Suelo |
Pin de tierra del módulo |
2 |
Vdd |
Vcc, 5 V |
Pin de alimentación (3-5 V tolerable) |
3 |
SCK |
D0, SCL, CLK |
Actúa como el pin del reloj. Utilizado tanto para I2C como para SPI |
4 |
SDA |
D1, MOSI |
Pin de datos del módulo. Utilizado tanto para IIC como para SPI |
5 |
RES |
RST, RESET |
Restablece el módulo (útil durante SPI) |
6 |
corriente continua |
A0 |
Pin de comando de datos. Utilizado para el protocolo SPI |
7 |
CS |
Selección de chip |
Útil cuando se usa más de un módulo bajo el protocolo SPI |
En este tutorial simplemente operaremos el módulo en modo 4-Wire SPI, dejaremos el resto para algún otro tutorial.
La comunidad de Arduino ya nos ha proporcionado muchas bibliotecas que se pueden usar directamente para hacer esto mucho más simple. Probé algunas bibliotecas y descubrí que la biblioteca Adafruit_SSD1306 era muy fácil de usar y tenía un puñado de opciones gráficas, por lo tanto, usaremos las mismas en este tutorial. Pero, si su proyecto tiene una restricción de memoria / velocidad, intente usar la biblioteca U8g, ya que funciona más rápido y ocupa menos memoria del programa.
También hemos interconectado OLED con Raspberry pi y con Arduino.
Material requerido:
- ESP32
- Módulo RTC DS3231
- Módulo de pantalla OLED de 7 pines 128 × 64 (SSD1306)
- Cables macho-hembra
- Tablero de circuitos
Diagrama de circuito:
El diagrama de circuito para conectar el RTC3231 a la placa ESP se muestra a continuación:
RTC DS3231 IC utiliza el modo de comunicación I2C. Tiene pines SCL, SDA, Vcc y GND que salen de él. La conexión del módulo RTC con ESP32 se da a continuación:
- SCL de RTC -> SCL de ESP32, es decir, Pin D22
- SDA de RTC -> SDA de ESP32, es decir, Pin D21
- GND de RTC -> GND de ESP32
- Vcc de RTC -> Vcc de ESP32
Aquí, estamos usando el modo SPI para conectar nuestro módulo de pantalla OLED de 128 × 64 (SSD1306) a ESP32. Entonces, usará 7 pines. Las conexiones con ESP32 se dan como:
- Pin CS (selección de chip) de OLED -> PIN D5 de ESP32
- Pin DC de OLED -> PIN D4 de ESP32
- RES pin de OLED -> PIN D2 de ESP32
- Pin SDA de OLED -> PIN D23, es decir, MOSI de ESP32
- Pin SCK de OLED -> PIN D18, es decir, SCK de ESP32
- Vdd de OLED -> Vcc de ESP32
- GND de OLED -> GND de ESP32
Necesita archivos de placa para su ESP32. Verifique el menú desplegable del administrador de la placa de Arduino IDE para el kit de desarrollo ESP32. Si no está allí, siga los pasos que se indican en el siguiente enlace:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
También puede usar ESP12 para este proyecto, aprenda aquí a usar ESP12.
Explicación del código:
El código completo para ESP32 se proporciona al final del artículo. Aquí explicamos algunas partes importantes del código.
Necesitamos varias bibliotecas para usar en nuestro código que se pueden descargar de los siguientes enlaces:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. RTClib:
Entonces hemos incluido todas las bibliotecas
#incluir
Luego defina todos los pines de OLED. No necesita definir pines para el módulo RTC porque estos pines ya están definidos en la biblioteca WIRE.
#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);
En la función de configuración , llamaremos a una función rtc.adjust (DateTime (__ DATE__, __TIME__)) que establecerá la hora de acuerdo con la hora de nuestra PC.
configuración vacía () { Serial.begin (9600); if (! rtc.begin ()) { Serial.println ("No se pudo encontrar RTC"); mientras (1); } rtc.adjust (DateTime (__ DATE__, __TIME__));
Después de eso, llamamos a las funciones de visualización para que se muestren en OLED.
display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay (); display.setTextColor (BLANCO); //display.startscrollright(0x00, 0x0F); // Puedes descomentar esta línea para desplazar tu texto en oled display.setTextSize (2); display.setCursor (0,5); display.print ("Reloj"); // Esto mostrará el reloj en OLED durante 3 segundos display.display (); retraso (3000); }
Luego, finalmente, en la función de bucle , almacenaremos nuestra hora en la variable DateTime ahora predefinida y mostraremos la hora usando funciones de visualización como setTextSize, setCursor, etc. Configúrelas de acuerdo con sus necesidades y use la función display.println para mostrar en OLED.
bucle vacío () { Fecha y hora ahora = rtc.now (); display.clearDisplay (); display.setTextSize (2); display.setCursor (75,0); display.println (ahora.segundo (), DEC);
Así es como puede mostrar la hora en OLED usando ESP32 y, como sabe, ESP es conocido por sus capacidades de IoT, por lo que puede usar esto para publicar la hora en Internet. En el próximo artículo, le mostraremos cómo mostrar la hora de Internet en ESP sin usar ningún módulo RTC.