- O que é RTC ??
- Conhecendo os monitores OLED:
- Material necessário:
- Diagrama de circuito:
- Explicação do código:
Neste tutorial, aprenderemos sobre o Real Time Clock (RTC) e sua interface com o ESP32 e display OLED.
Usaremos módulo DS3231 RTC para manter o controle do tempo correto e exibi-lo em SPI OLED usando ESP32 como nosso microcontrolador. ESP32 é mais do que um microcontrolador. Possui chip de Wi-Fi e Bluetooth dentro dele e 39 pinos GPIO. Ele é compatível com todos os protocolos de comunicação, como SPI, I2C, UART, etc. Se você é novo no ESP32, primeiro consulte nosso tutorial de introdução ao ESP32.
O que é RTC ??
DS3231 é um módulo RTC (Real Time Clock). É usado para manter a data e a hora da maioria dos projetos de Eletrônica. Este módulo tem sua própria fonte de alimentação de célula tipo moeda, usando a qual ele mantém a data e a hora mesmo quando a alimentação principal é removida ou o MCU passou por um hard reset. Assim, uma vez que definimos a data e a hora neste módulo, ele manterá o controle sempre. Existem vários tipos de ICs RTC disponíveis como DS1307, DS3231 etc.
Anteriormente, usamos DS3231 RTC com Arduino nos projetos abaixo:
- Alimentador automático de animais de estimação usando Arduino
- Arduino Data Logger
Nota: Ao usar este módulo pela primeira vez, você deve definir a data e a hora. Você também pode usar o RTC IC DS1307, já usamos o DS1307 com o Arduino.
Conhecendo os monitores OLED:
O termo OLED significa “ diodo emissor de luz orgânico”, ele usa a mesma tecnologia que é usada na maioria de nossas televisões, mas tem menos pixels em comparação a eles. É muito divertido ter esses módulos de exibição legais, pois eles farão nossos projetos parecerem legais. Abordamos um artigo completo sobre monitores OLED e seus tipos aqui.
Estamos usando uma tela OLED SSD1306 monocromática de 7 pinos de 0,96 ”. A razão para escolher este display é que ele pode funcionar em três protocolos de comunicação diferentes, como o modo SPI de 3 fios, o modo de quatro fios SPI e o modo IIC. Este tutorial cobrirá como usar o módulo no modo SPI de 4 fios, pois é o modo de comunicação mais rápido e padrão.
Os pinos e suas funções são explicados na tabela abaixo.
Número do PIN |
Nome do Pin |
Outros nomes |
Uso |
1 |
Gnd |
Terra |
Pino de aterramento do módulo |
2 |
Vdd |
Vcc, 5V |
Pino de alimentação (3-5 V tolerável) |
3 |
SCK |
D0, SCL, CLK |
Atua como o pino do relógio. Usado para I2C e SPI |
4 |
SDA |
D1, MOSI |
Pino de dados do módulo. Usado para IIC e SPI |
5 |
RES |
RST, RESET |
Reinicia o módulo (útil durante o SPI) |
6 |
DC |
A0 |
Pino de comando de dados. Usado para protocolo SPI |
7 |
CS |
Chip Select |
Útil quando mais de um módulo é usado sob o protocolo SPI |
Neste tutorial iremos simplesmente operar o módulo no modo SPI 4-Wire, deixaremos o resto para algum outro tutorial.
A comunidade do Arduino já nos forneceu várias bibliotecas que podem ser usadas diretamente para tornar isso muito mais simples. Eu tentei algumas bibliotecas e descobri que a Biblioteca Adafruit_SSD1306 era muito fácil de usar e tinha um punhado de opções gráficas, portanto, usaremos as mesmas neste tutorial. Mas, se o seu projeto tiver uma restrição de memória / velocidade, tente usar a Biblioteca U8g, pois ela funciona mais rápido e ocupa menos memória do programa.
Também fizemos a interface do OLED com o Raspberry pi e com o Arduino.
Material necessário:
- ESP32
- Módulo DS3231 RTC
- Módulo de exibição OLED de 7 pinos 128 × 64 (SSD1306)
- Fios macho-fêmea
- Tábua de pão
Diagrama de circuito:
O diagrama de circuito para conectar RTC3231 à placa ESP é fornecido abaixo:
O RTC DS3231 IC usa o modo I2C de comunicação. Ele tem pinos SCL, SDA, Vcc e GND saindo dele. A conexão do módulo RTC com ESP32 é fornecida abaixo:
- SCL de RTC -> SCL de ESP32, ou seja, Pino D22
- SDA de RTC -> SDA de ESP32, ou seja, Pino D21
- GND de RTC -> GND de ESP32
- Vcc de RTC -> Vcc de ESP32
Aqui, estamos usando o modo SPI para conectar nosso Módulo de display OLED de 128 × 64 (SSD1306) ao ESP32. Portanto, ele usará 7 pinos. As conexões com ESP32 são fornecidas como:
- Pino CS (seleção de chip) de OLED -> PIN D5 de ESP32
- Pino DC do OLED -> PIN D4 do ESP32
- PIN RES de OLED -> PIN D2 de ESP32
- PIN SDA do OLED -> PIN D23, ou seja, MOSI do ESP32
- Pino SCK do OLED -> PIN D18 ou seja, SCK do ESP32
- Vdd de OLED -> Vcc de ESP32
- GND de OLED -> GND de ESP32
Você precisa de arquivos de placa para o ESP32. Verifique no menu suspenso do gerenciador de placa do Arduino IDE para o kit de desenvolvimento ESP32. Caso não esteja, siga os passos indicados no link abaixo:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Você também pode usar ESP12 para este projeto, aprenda aqui como usar ESP12.
Explicação do código:
O código completo para ESP32 é fornecido no final do artigo. Aqui estamos explicando algumas partes importantes do código.
Precisamos de várias bibliotecas para usar em nosso código, que podem ser baixadas nos links abaixo:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. RTClib:
Então, incluímos todas as bibliotecas
#incluir
Em seguida, defina todos os pinos do OLED. Você não precisa definir pinos para o módulo RTC porque esses pinos já estão definidos na biblioteca WIRE.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2 display Adafruit_SSD1306 (OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Na função de configuração , chamaremos a função rtc.adjust (DateTime (__ DATE__, __TIME__)) que definirá a hora de acordo com a hora do nosso PC.
void setup () { Serial.begin (9600); if (! rtc.begin ()) { Serial.println ("Não foi possível encontrar RTC"); enquanto (1); } rtc.adjust (DateTime (__ DATE__, __TIME__));
Depois disso, chamamos as funções de exibição para mostrar no OLED.
display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay (); display.setTextColor (WHITE); //display.startscrollright(0x00, 0x0F); // Você pode descomentar esta linha para rolar seu texto em oled display.setTextSize (2); display.setCursor (0,5); display.print ("Relógio"); // Isso exibirá o relógio no OLED por 3 segundos display.display (); atraso (3000); }
Então, finalmente, na função de loop , vamos armazenar nosso tempo na variável DateTime agora predefinida e exibir o tempo usando funções de exibição como setTextSize, setCursor, etc. Defina-as de acordo com sua necessidade e use a função display.println para mostrar no OLED.
void loop () { DateTime now = rtc.now (); display.clearDisplay (); display.setTextSize (2); display.setCursor (75,0); display.println (now.second (), DEC);
É assim que você pode exibir a hora no OLED usando ESP32 e, como você sabe, o ESP é conhecido por seus recursos de IoT, então você pode usar isso para publicar a hora na internet. No próximo artigo, mostraremos o horário da Internet no ESP sem usar nenhum módulo RTC.