V tomto tutoriálu se dozvíme o Real Time Clock (RTC) a jeho propojení s ESP32 a OLED displejem.
Budeme používat DS3231 RTC modul sledovat správný čas a zobrazit ji na SPI OLED pomocí ESP32 jako naše mikroprocesoru. ESP32 je více než mikrokontrolér. Má v sobě čip Wi-Fi a Bluetooth a 39 pinů GPIO. Podporuje všechny komunikační protokoly jako SPI, I2C, UART atd. Pokud jste v ESP32 noví, projděte si nejprve náš Začínáme s výukovým programem ESP32.
Co je RTC ??
DS3231 je modul RTC (hodiny reálného času). Používá se k udržení data a času pro většinu projektů elektroniky. Tento modul má vlastní napájecí zdroj knoflíkových článků, pomocí kterého udržuje datum a čas, i když je odpojeno hlavní napájení nebo MCU prošel tvrdým resetem. Jakmile tedy v tomto modulu nastavíme datum a čas, bude to vždy sledovat. Existuje několik typů integrovaných obvodů RTC, jako jsou DS1307, DS3231 atd.
Již dříve jsme použili DS3231 RTC s Arduino v níže uvedených projektech:
- Automatický podavač zvířat pomocí Arduina
- Záznamník dat Arduino
Poznámka: Při prvním použití tohoto modulu musíte nastavit datum a čas. Můžete také použít RTC IC DS1307, dříve jsme používali DS1307 s Arduino.
Seznámení s OLED displeji:
Termín OLED znamená „ Organic Light emitting diode“ , používá stejnou technologii, která se používá ve většině našich televizorů, ale ve srovnání s nimi má méně pixelů. Je opravdu zábavné mít tyto skvěle vypadající moduly displeje, protože díky nim budou naše projekty vypadat skvěle. Zde jsme se zabývali celým článkem o OLED displejích a jejich typech.
Používáme monochromatický 7pinový displej SSD1306 0,96 ”OLED. Důvodem pro výběr tohoto displeje je, že může pracovat na třech různých komunikačních protokolech, jako je režim SPI 3 Wire, režim SPI se čtyřmi vodiči a režim IIC. Tento výukový program se bude zabývat tím, jak používat modul ve 4vodičovém režimu SPI, protože se jedná o nejrychlejší a výchozí režim komunikace.
Piny a jejich funkce jsou vysvětleny v tabulce níže.
Číslo PIN |
Název PIN |
Ostatní jména |
Používání |
1 |
Gnd |
Přízemní |
Uzemňovací kolík modulu |
2 |
Vdd |
Vcc, 5V |
Napájecí kolík (tolerovatelný 3-5 V) |
3 |
SCK |
D0, SCL, CLK |
Funguje jako hodinový kolík. Používá se pro I2C i SPI |
4 |
SDA |
D1, MOSI |
Datový kolík modulu. Používá se pro IIC i SPI |
5 |
RES |
RST, RESET |
Resetuje modul (užitečné během SPI) |
6 |
DC |
A0 |
Datový příkazový kolík. Používá se pro protokol SPI |
7 |
CS |
Výběr čipu |
Užitečné, když se v protokolu SPI používá více než jeden modul |
V tomto tutoriálu budeme modul jednoduše ovládat v režimu 4-Wire SPI, zbytek necháme na nějaký další tutoriál.
Komunita Arduino nám již poskytla mnoho knihoven, které lze přímo použít, aby to bylo mnohem jednodušší. Vyzkoušel jsem několik knihoven a zjistil jsem, že knihovna Adafruit_SSD1306 se velmi snadno používá a má několik grafických možností, proto v tomto tutoriálu použijeme totéž. Pokud však váš projekt má omezení paměti / rychlosti, zkuste použít knihovnu U8g, protože pracuje rychleji a zabírá méně programové paměti.
Také jsme propojili OLED s Raspberry pi a s Arduino.
Potřebný materiál:
- ESP32
- Modul RTC DS3231
- 7 pinový 128 × 64 OLED displejový modul (SSD1306)
- Dráty samec-samice
- Nepájivá deska
Kruhový diagram:
Schéma zapojení RTC3231 k desce ESP je uvedeno níže:
RTC DS3231 IC používá komunikační režim I2C. Z ní vycházejí kolíky SCL, SDA, Vcc a GND. Připojení modulu RTC k ESP32 je uvedeno níže:
- SCL RTC -> SCL ESP32 tj. Pin D22
- SDA RTC -> SDA ESP32 tj. Pin D21
- GND RTC -> GND ESP32
- Vcc RTC -> Vcc ESP32
Zde používáme režim SPI k připojení našeho 128 × 64 OLED zobrazovacího modulu (SSD1306) k ESP32. Bude tedy používat 7 pinů. Spojení s ESP32 jsou uvedena jako:
- CS (výběr čipu) pin OLED -> PIN D5 ESP32
- DC kolík OLED -> PIN D4 ESP32
- RES pin OLED -> PIN D2 ESP32
- Pin SDA OLED -> PIN D23 tj. MOSI ESP32
- SCK pin OLED -> PIN D18 tj. SCK ESP32
- Vdd OLED -> Vcc ESP32
- GND OLED -> GND ESP32
Potřebujete soubory desky pro váš ESP32. Podívejte se do rozevírací nabídky správce desky na Arduino IDE pro soupravu ESP32 dev. Pokud tam není, postupujte podle pokynů uvedených v odkazu níže:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Pro tento projekt můžete také použít ESP12, zde se naučte používat ESP12.
Vysvětlení kódu:
Kompletní kód pro ESP32 je uveden na konci článku. Zde vysvětlujeme několik důležitých částí kódu.
V našem kódu potřebujeme několik knihoven, které lze stáhnout z níže uvedených odkazů:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. RTClib:
Zahrnuli jsme tedy všechny knihovny
#zahrnout
Poté definujte všechny piny OLED. Pro modul RTC nemusíte definovat piny, protože tyto piny jsou již definovány v knihovně 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);
Ve funkci nastavení zavoláme funkci rtc.adjust (DateTime (__ DATE__, __TIME__)), která nastaví čas podle našeho PC času.
void setup () { Serial.begin (9600); if (! rtc.begin ()) { Serial.println ("Nelze najít RTC"); while (1); } rtc.adjust (DateTime (__ DATE__, __TIME__));
Poté zavoláme funkce displeje, které se zobrazí na OLED.
display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay (); display.setTextColor (BÍLÁ); //display.startscrollright(0x00, 0x0F); // Tento řádek můžete odkomentovat a posouvat text na oled displeji. SetTextSize (2); display.setCursor (0,5); display.print ("Hodiny"); // Tím se na 3 vteřiny zobrazí hodiny na displeji OLED display. Display (); zpoždění (3000); }
Nakonec ve funkci smyčky uložíme náš čas do předem definované proměnné DateTime a zobrazíme čas pomocí funkcí zobrazení, jako je setTextSize, setCursor atd. Nastavte je podle své potřeby a použijte funkci display.println k zobrazení na OLED.
void loop () { DateTime now = rtc.now (); display.clearDisplay (); display.setTextSize (2); display.setCursor (75,0); display.println (now.second (), DEC);
Takto můžete zobrazit čas na OLED pomocí ESP32 a jak víte, ESP je známý svými schopnostmi IoT, takže můžete použít k publikování času na internetu. V následujícím článku si ukážeme, jak zobrazit internetový čas na ESP bez použití jakéhokoli modulu RTC.