V tej vadnici bomo spoznali uro realnega časa (RTC) in njeno povezavo z zaslonom ESP32 in OLED.
Z modulom DS3231 RTC bomo beležili pravi čas in ga prikazovali na SPI OLED z uporabo ESP32 kot našega mikrokrmilnika. ESP32 je več kot le mikrokrmilnik. V njem je čip Wi-Fi in Bluetooth ter 39 zatičev GPIO. Podpira vse komunikacijske protokole, kot so SPI, I2C, UART itd. Če ste novi ESP32, najprej preberite našo Uvodnico za začetek uporabe ESP32.
Kaj je RTC ??
DS3231 je RTC (Real Time Clock) modul. Uporablja se za vzdrževanje datuma in ure za večino projektov Elektronika. Ta modul ima lastno napajalno celico, s katero ohranja datum in čas, tudi ko je glavno napajanje odvzeto ali je MCU trdo ponastavljen. Torej, ko bomo v tem modulu nastavili datum in uro, ga bo vedno spremljal. Na voljo je več vrst RTC IC, kot so DS1307, DS3231 itd.
DS3231 RTC smo z Arduinom že uporabljali v spodnjih projektih:
- Samodejni podajalnik hišnih ljubljenčkov z uporabo Arduina
- Arduino Data Logger
Opomba: Ko prvič uporabljate ta modul, morate nastaviti datum in uro. Uporabite lahko tudi RTC IC DS1307, DS1307 smo že uporabljali z Arduino.
Spoznavanje zaslonov OLED:
Izraz OLED pomeni " organska dioda, ki oddaja svetlobo" . Uporablja isto tehnologijo, kot jo uporablja večina naših televizorjev, vendar ima manj slikovnih pik v primerjavi z njimi. Zelo zabavno je imeti te modne prikazovalne module, saj bodo tako naši projekti videti v redu. Tukaj smo zajeli celoten članek o OLED zaslonih in njihovih vrstah.
Uporabljamo enobarvni 7-pinski SSD1306 0,96-palčni OLED zaslon. Razlog za izbiro tega zaslona je, da lahko deluje na treh različnih komunikacijskih protokolih, kot so način SPI 3 Wire, način SPI s štirimi žicami in način IIC. Ta vadnica bo zajela uporabo modula v 4-žičnem načinu SPI, saj je najhitrejši in privzeti način komunikacije.
Nožice in njihove funkcije so razložene v spodnji tabeli.
PIN številka |
Pripnite ime |
Druga imena |
Uporaba |
1. |
Gnd |
Tla |
Ozemljitveni zatič modula |
2. |
Vdd |
Vcc, 5V |
Napajalni zatič (3-5V sprejemljivo) |
3. |
SCK |
D0, SCL, CLK |
Deluje kot zatič ure. Uporablja se za I2C in SPI |
4. |
SDA |
D1, MOSI |
Podatkovni zatič modula. Uporablja se za IIC in SPI |
5. |
OVE |
RST, PONASTAVI |
Ponastavi modul (uporabno med SPI) |
6. |
DC |
A0 |
Podatkovni ukazni zatič. Uporablja se za protokol SPI |
7. |
CS |
Chip Select |
Uporabno, če se po protokolu SPI uporablja več modulov |
V tej vadnici bomo modul preprosto upravljali v načinu 4-Wire SPI, ostalo bomo pustili za drugo vajo.
Skupnost Arduino nam je že dala veliko knjižnic, s katerimi lahko to poenostavimo. Preizkusil sem nekaj knjižnic in ugotovil, da je bila knjižnica Adafruit_SSD1306 zelo enostavna za uporabo in ima nekaj grafičnih možnosti, zato bomo v tej vadnici uporabili enako. Če pa ima vaš projekt omejitev pomnilnika / hitrosti, poskusite uporabiti knjižnico U8g, saj deluje hitreje in zavzame manj programskega pomnilnika.
OLED smo povezali tudi z Raspberry pi in Arduino.
Potreben material:
- ESP32
- Modul DS3231 RTC
- 7-pinski 128 × 64 OLED modul zaslona (SSD1306)
- Moško-ženske žice
- Breadboard
Shema vezja:
Shema vezja za povezavo RTC3231 na ploščo ESP je podana spodaj:
RTC DS3231 IC uporablja način komunikacije I2C. Iz njega prihajajo zatiči SCL, SDA, Vcc in GND. Povezava RTC modula z ESP32 je podana spodaj:
- SCL RTC -> SCL ESP32, tj. Pin D22
- SDA RTC -> SDA ESP32, tj. Pin D21
- GND RTC -> GND ESP32
- Vcc RTC -> Vcc ESP32
Tu uporabljamo način SPI za povezavo našega 128 × 64 OLED modula zaslona (SSD1306) z ESP32. Torej, uporabil bo 7 zatičev. Povezave z ESP32 so podane kot:
- CS (izbira čipa) zatič OLED -> PIN D5 ESP32
- Enosmerni zatič OLED -> PIN D4 ESP32
- RES pin OLED -> PIN D2 ESP32
- SDA pin OLED -> PIN D23, tj. MOSI ESP32
- SCK pin OLED -> PIN D18, tj. SCK ESP32
- Vdd OLED -> Vcc ESP32
- GND OLED -> GND ESP32
Za svoj ESP32 potrebujete datoteke na plošči. Preverite spustni meni upravitelja plošč Arduino IDE za razvojni komplet ESP32. Če ni, sledite korakom, navedenim na spodnji povezavi:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Za ta projekt lahko uporabite tudi ESP12, tukaj se naučite uporabljati ESP12.
Razlaga kode:
Popolna koda za ESP32 je podana na koncu članka. Tukaj razlagamo nekaj pomembnih delov kode.
Za uporabo naše kode potrebujemo več knjižnic, ki jih lahko prenesete s spodnjih povezav:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. RTClib:
Vključili smo torej vse knjižnice
#include
Nato določite vse nožice OLED-a. Za modul RTC vam ni treba definirati nožic, ker so ti nožki že definirani v knjiž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_CSK;
V nastavitveni funkciji bomo poklicali funkcijo rtc.adjust (DateTime (__ DATE__, __TIME__)), ki bo nastavila čas glede na naš čas v računalniku.
void setup () { Serial.begin (9600); if (! rtc.begin ()) { Serial.println ("RTC-ja ni bilo mogoče najti"); medtem ko (1); } rtc.adjust (DateTime (__ DATE__, __TIME__));
Po tem pokličemo funkcije prikaza za prikaz na OLED.
display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay (); display.setTextColor (BELA); //display.startscrollright(0x00, 0x0F); // To vrstico lahko razkomentirate, če se želite pomakniti po besedilu na oled display.setTextSize (2); display.setCursor (0,5); display.print ("Ura"); // To bo 3 ure prikazovalo uro na OLED display.display (); zamuda (3000); }
Nato bomo končno shranili funkcijo zanke v DateTime, ki je zdaj vnaprej določena spremenljivka, in prikazali čas z uporabo funkcij prikaza, kot so setTextSize, setCursor itd. Nastavite jih glede na vaše potrebe in uporabite funkcijo display.println za prikaz na OLED.
void loop () { DateTime zdaj = rtc.now (); display.clearDisplay (); display.setTextSize (2); display.setCursor (75,0); display.println (zdaj.second (), DEC);
Tako lahko na OLED prikažete čas s pomočjo ESP32 in kot veste, da je ESP znan po svojih IoT zmogljivostih, zato lahko to uporabite za objavo časa na internetu. V naslednjem članku vam bomo prikazali prikaz internetnega časa na ESP brez uporabe modula RTC.