V tomto výučbe sa dozvieme o hodinách v reálnom čase (RTC) a ich prepojení s displejom ESP32 a OLED.
Použijeme modul DS3231 RTC na sledovanie správneho času a jeho zobrazenie na SPI OLED pomocou ESP32 ako nášho mikrokontroléra. ESP32 je viac ako mikrokontrolér. Má v sebe čip Wi-Fi a Bluetooth a 39 pinov GPIO. Podporuje všetky komunikačné protokoly ako SPI, I2C, UART atď. Ak ste v ESP32 nováčikom, najskôr si prečítajte náš návod Začíname s ESP32.
Čo je RTC ??
DS3231 je modul RTC (hodiny v reálnom čase). Používa sa na zachovanie dátumu a času pre väčšinu projektov elektroniky. Tento modul má vlastné napájanie z gombíkových článkov, pomocou ktorého udržiava dátum a čas, aj keď je odpojené hlavné napájanie alebo MCU prešiel tvrdým resetom. Akonáhle teda nastavíme dátum a čas v tomto module, bude ho vždy sledovať. Existuje niekoľko typov integrovaných obvodov RTC, ako napríklad DS1307, DS3231 atď.
DS3231 RTC s Arduino sme predtým používali v nasledujúcich projektoch:
- Automatický podávač domácich zvierat pomocou Arduina
- Záznamník údajov Arduino
Poznámka: Pri prvom použití tohto modulu musíte nastaviť dátum a čas. Môžete tiež použiť RTC IC DS1307, predtým sme používali DS1307 s Arduino.
Zoznámenie sa s OLED displejmi:
Pojem OLED znamená „ organická dióda vyžarujúca svetlo“. Používa rovnakú technológiu, ktorá sa používa vo väčšine našich televízorov, ale má v porovnaní s nimi menej pixelov. Je skutočne zábavné mať tieto skvelo vyzerajúce moduly displeja, pretože vďaka nim budú naše projekty vyzerať skvele. Celý článok o OLED displejoch a ich typoch sme prebrali tu.
Používame Monochrome 7-pin SSD1306 0,96 ”OLED displej. Dôvodom pre výber tohto displeja je, že môže pracovať na troch rôznych komunikačných protokoloch, ako je režim SPI 3 Wire, režim SPI so štyrmi drôtmi a režim IIC. V tomto výučbe sa dozviete, ako používať modul v štvorvodičovom režime SPI, pretože ide o najrýchlejší komunikačný režim a predvolený režim.
Kolíky a ich funkcie sú vysvetlené v nasledujúcej tabuľke.
PIN kód |
Názov špendlíka |
Ostatné mená |
Využitie |
1 |
Gnd |
Uzemnenie |
Uzemňovací kolík modulu |
2 |
Vdd |
Vcc, 5V |
Napájací kolík (tolerovateľný 3 - 5 V) |
3 |
SCK |
D0, SCL, CLK |
Funguje ako špendlík hodín. Používa sa pre I2C aj SPI |
4 |
SDA |
D1, MOSI |
Dátový kolík modulu. Používa sa pre IIC aj SPI |
5 |
OZE |
RST, RESET |
Resetuje modul (užitočné počas SPI) |
6 |
DC |
A0 |
PIN príkazového riadku. Používa sa pre protokol SPI |
7 |
CS |
Vyberte čip |
Užitočné, ak sa v protokole SPI používa viac ako jeden modul |
V tomto výučbe budeme modul jednoducho prevádzkovať v 4-drôtovom režime SPI, zvyšok si necháme na ďalší výučbový program.
Komunita Arduino nám už poskytla veľa knižníc, ktoré je možné priamo použiť na ďalšie zjednodušenie. Vyskúšal som niekoľko knižníc a zistil som, že knižnica Adafruit_SSD1306 sa používa veľmi ľahko a má niekoľko grafických možností, preto ich v tomto návode použijeme rovnako. Ak má váš projekt obmedzenie pamäte a rýchlosti, skúste použiť knižnicu U8g, ktorá pracuje rýchlejšie a zaberá menej programovej pamäte.
Taktiež sme prepojili OLED s Raspberry pi a s Arduinom.
Potrebný materiál:
- ESP32
- Modul RTC DS3231
- 7 pinový 128 × 64 OLED displejový modul (SSD1306)
- Vodiče samec-samica
- Nepál
Schéma zapojenia:
Schéma zapojenia RTC3231 k doske ESP je uvedená nižšie:
RTC DS3231 IC používa komunikačný režim I2C. Z neho vychádzajú kolíky SCL, SDA, Vcc a GND. Pripojenie modulu RTC k ESP32 je uvedené nižšie:
- SCL RTC -> SCL ESP32 tj Pin D22
- SDA pre RTC -> SDA pre ESP32, tj. Kolík D21
- GND RTC -> GND ESP32
- Vcc RTC -> Vcc ESP32
Tu používame režim SPI na pripojenie nášho 128 × 64 OLED zobrazovacieho modulu (SSD1306) k ESP32. Bude teda používať 7 pinov. Spojenia s ESP32 sú uvedené ako:
- CS (výber čipu) pin OLED -> PIN D5 ESP32
- DC kolík OLED -> PIN D4 ESP32
- RES pin z OLED -> PIN D2 z ESP32
- Pin SDA OLED -> PIN D23 tj MOSI z ESP32
- SCK pin OLED -> PIN D18 tj SCK ESP32
- Vdd OLED -> Vcc ESP32
- GND OLED -> GND ESP32
Potrebujete súbory palubných dosiek pre váš ESP32. Skontrolujte rozbaľovaciu ponuku správcu dosky Arduino IDE pre súpravu ESP32 dev. Ak nie je, postupujte podľa krokov uvedených v nasledujúcom odkaze:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Pre tento projekt môžete tiež použiť ESP12, tu sa naučte používať ESP12.
Vysvetlenie kódu:
Celý kód pre ESP32 je uvedený na konci článku. Tu vysvetľujeme niekoľko dôležitých častí kódu.
V našom kóde potrebujeme niekoľko knižníc, ktoré je možné stiahnuť z nasledujúcich odkazov:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. RTClib:
Zahrnuli sme teda všetky knižnice
#include
Potom definujte všetky piny OLED. Pre modul RTC nemusíte definovať piny, pretože tieto piny sú už definované v knižnici 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);
Vo funkcii nastavenia zavoláme funkciu rtc.adjust (DateTime (__ DATE__, __TIME__)), ktorá nastaví čas podľa nášho PC času.
void setup () { Serial.begin (9600); if (! rtc.begin ()) { Serial.println ("Nepodarilo sa nájsť RTC"); while (1); } rtc.adjust (DateTime (__ DATE__, __TIME__));
Potom nazývame funkcie displeja, ktoré sa majú zobrazovať na OLED.
display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay (); display.setTextColor (BIELA); //display.startscrollright(0x00, 0x0F); // Tento riadok môžete odkomentovať, aby ste rolovali text na oled display.setTextSize (2); display.setCursor (0,5); display.print („Hodiny“); // Toto zobrazí hodiny na OLED na 3 sekundy display.display (); oneskorenie (3 000); }
Nakoniec do funkcie slučky uložíme náš čas do teraz preddefinovanej premennej DateTime a zobrazíme čas pomocou funkcií displeja ako setTextSize, setCursor atď. Nastavte si ich podľa svojej potreby a pomocou funkcie display.println zobrazte na OLED.
void loop () { DateTime now = rtc.now (); display.clearDisplay (); display.setTextSize (2); display.setCursor (75,0); display.println (now.second (), DEC);
Takto teda môžete zobraziť čas na OLED pomocou ESP32 a ako viete, ESP je známy svojimi schopnosťami internetu vecí, takže ho môžete použiť na zverejnenie času na internete. V nasledujúcom článku si ukážeme, ako zobraziť internetový čas na ESP bez použitia ktoréhokoľvek modulu RTC.