In questo tutorial, impareremo a conoscere l' orologio in tempo reale (RTC) e la sua interfaccia con il display ESP32 e OLED.
Useremo modulo DS3231 RTC per tenere traccia del tempo corretto e visualizzarlo sul SPI OLED utilizzando ESP32 come il nostro microcontrollore. ESP32 è più di un microcontrollore. Ha chip Wi-Fi e Bluetooth al suo interno e 39 pin GPIO. Supporta tutti i protocolli di comunicazione come SPI, I2C, UART, ecc. Se non conosci ESP32, segui prima il nostro tutorial Introduzione a ESP32.
Cos'è RTC?
DS3231 è un modulo RTC (Real Time Clock). Viene utilizzato per mantenere la data e l'ora per la maggior parte dei progetti di elettronica. Questo modulo dispone di un proprio alimentatore a celle a bottone che mantiene la data e l'ora anche quando l'alimentazione principale viene rimossa o l'MCU ha subito un hard reset. Quindi una volta impostate la data e l'ora in questo modulo, ne terrà sempre traccia. Sono disponibili diversi tipi di circuiti integrati RTC come DS1307, DS3231 ecc.
Abbiamo già utilizzato DS3231 RTC con Arduino nei seguenti progetti:
- Alimentatore automatico di animali domestici utilizzando Arduino
- Registratore di dati Arduino
Nota: quando si utilizza questo modulo per la prima volta è necessario impostare la data e l'ora. Puoi anche utilizzare RTC IC DS1307, abbiamo già utilizzato DS1307 con Arduino.
Conoscere i display OLED:
Il termine OLED sta per " diodo organico a emissione di luce" e utilizza la stessa tecnologia che viene utilizzata nella maggior parte dei nostri televisori ma ha meno pixel rispetto ad essi. È davvero divertente avere questi moduli di visualizzazione dall'aspetto accattivante poiché renderanno i nostri progetti fantastici. Abbiamo coperto un articolo completo sui display OLED e sui suoi tipi qui.
Stiamo utilizzando un display OLED SSD1306 da 0,96 pollici monocromatico a 7 pin. Il motivo per cui si sceglie questo display è che può funzionare su tre diversi protocolli di comunicazione come la modalità SPI a 3 fili, la modalità SPI a quattro fili e la modalità IIC. Questo tutorial tratterà come utilizzare il modulo in modalità SPI a 4 fili poiché è la modalità di comunicazione più veloce e quella predefinita.
I pin e le sue funzioni sono spiegati nella tabella seguente.
Codice PIN |
Nome pin |
Altri nomi |
Utilizzo |
1 |
Gnd |
Terra |
Pin di massa del modulo |
2 |
Vdd |
Vcc, 5V |
Pin di alimentazione (3-5 V tollerabile) |
3 |
SCK |
D0, SCL, CLK |
Funge da perno dell'orologio. Utilizzato sia per I2C che per SPI |
4 |
SDA |
D1, MOSI |
Pin dati del modulo. Utilizzato sia per IIC che per SPI |
5 |
RES |
RST, RESET |
Resetta il modulo (utile durante SPI) |
6 |
DC |
A0 |
Pin di comando dati. Utilizzato per il protocollo SPI |
7 |
CS |
Chip Select |
Utile quando più di un modulo viene utilizzato con il protocollo SPI |
In questo tutorial useremo semplicemente il modulo in modalità SPI a 4 fili, lasceremo il resto per qualche altro tutorial.
La comunità di Arduino ci ha già fornito molte librerie che possono essere utilizzate direttamente per rendere tutto più semplice. Ho provato alcune librerie e ho scoperto che la libreria Adafruit_SSD1306 era molto facile da usare e aveva una manciata di opzioni grafiche, quindi useremo la stessa in questo tutorial. Tuttavia, se il tuo progetto ha un vincolo di memoria / velocità, prova a utilizzare la libreria U8g poiché funziona più velocemente e occupa meno memoria del programma.
Abbiamo anche interfacciato OLED con Raspberry pi e con Arduino.
Materiale richiesto:
- ESP32
- Modulo RTC DS3231
- Modulo display OLED 128 × 64 a 7 pin (SSD1306)
- Fili maschio-femmina
- Breadboard
Schema elettrico:
Di seguito è riportato lo schema del circuito per collegare l'RTC3231 alla scheda ESP:
L'IC RTC DS3231 utilizza la modalità di comunicazione I2C. Ha pin SCL, SDA, Vcc e GND che escono da esso. Di seguito viene fornito il collegamento del modulo RTC con ESP32:
- SCL di RTC -> SCL di ESP32 ovvero Pin D22
- SDA di RTC -> SDA di ESP32 ovvero Pin D21
- GND di RTC -> GND di ESP32
- Vcc di RTC -> Vcc di ESP32
Qui, stiamo utilizzando la modalità SPI per collegare il nostro modulo display OLED 128 × 64 (SSD1306) a ESP32. Quindi, utilizzerà 7 pin. I collegamenti con ESP32 sono indicati come:
- Pin CS (Chip select) di OLED -> PIN D5 di ESP32
- Pin DC di OLED -> PIN D4 di ESP32
- Pin RES di OLED -> PIN D2 di ESP32
- Pin SDA di OLED -> PIN D23 cioè MOSI di ESP32
- Pin SCK di OLED -> PIN D18 cioè SCK di ESP32
- Vdd di OLED -> Vcc di ESP32
- GND di OLED -> GND di ESP32
Hai bisogno di file di bordo per il tuo ESP32. Controlla il menu a discesa del gestore della scheda dell'IDE di Arduino per il kit di sviluppo ESP32. Se non è presente, segui i passaggi indicati nel link sottostante:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Puoi anche usare ESP12 per questo progetto, impara qui come usare ESP12.
Spiegazione del codice:
Il codice completo per ESP32 è fornito alla fine dell'articolo. Qui stiamo spiegando alcune parti importanti del codice.
Abbiamo bisogno di diverse librerie da utilizzare nel nostro codice che può essere scaricato dai link sottostanti:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. RTClib:
Quindi abbiamo incluso tutte le librerie
#includere
Quindi definire tutti i pin di OLED. Non è necessario definire i pin per il modulo RTC perché questi pin sono già definiti nella libreria 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);
Nella funzione di configurazione , chiameremo una funzione rtc.adjust (DateTime (__ DATE__, __TIME__)) che imposterà l'ora in base all'ora del nostro PC.
void setup () { Serial.begin (9600); if (! rtc.begin ()) { Serial.println ("Could not find RTC"); mentre (1); } rtc.adjust (DateTime (__ DATE__, __TIME__));
Dopodiché chiamiamo le funzioni di visualizzazione da mostrare su OLED.
display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay (); display.setTextColor (WHITE); //display.startscrollright(0x00, 0x0F); // Puoi rimuovere il commento da questa riga per scorrere il testo su display.setTextSize (2); display.setCursor (0,5); display.print ("Orologio"); // Questo mostrerà l'orologio su OLED per 3 secondi display.display (); ritardo (3000); }
Poi finalmente nel ciclo funzione, noi conserviamo il nostro tempo in DateTime ormai variabili pre-definite e visualizzare l'ora utilizzando funzioni di visualizzazione come setTextSize, setCursor, ecc impostare questi base alle vostre necessità e l'uso display.println funzione per mostrare sul display OLED.
void loop () { DateTime now = rtc.now (); display.clearDisplay (); display.setTextSize (2); display.setCursor (75,0); display.println (now.second (), DEC);
Quindi è così che puoi visualizzare l'ora su OLED usando ESP32 e, come sai, ESP è noto per le sue capacità IoT, quindi puoi usarlo per pubblicare l'ora su Internet. Nel prossimo articolo ti mostreremo come visualizzare l'ora di Internet su ESP senza utilizzare alcun modulo RTC.