- Hvad er RTC ??
- Lær om OLED-skærme at kende:
- Nødvendigt materiale:
- Kredsløbsdiagram:
- Kode Forklaring:
I denne vejledning lærer vi om Real Time Clock (RTC) og dets grænseflade til ESP32 og OLED-skærmen.
Vi bruger DS3231 RTC-modulet til at holde styr på det korrekte tidspunkt og vise det på SPI OLED ved hjælp af ESP32 som vores mikrocontroller. ESP32 er mere end en mikrocontroller. Den har Wi-Fi og Bluetooth-chip inde i den og 39 GPIO-ben. Det understøtter alle kommunikationsprotokoller som SPI, I2C, UART osv. Hvis du er ny på ESP32, skal du først gennemgå vores Kom godt i gang med ESP32-tutorial.
Hvad er RTC ??
DS3231 er et RTC- modul (Real Time Clock). Det bruges til at opretholde dato og tid for de fleste af elektronikprojekterne. Dette modul har sin egen møntcelleforsyning, ved hjælp af hvilken det opretholder datoen og klokkeslættet, selv når hovedstrømmen fjernes, eller MCU'en har gennemgået en hård nulstilling. Så når vi har indstillet dato og klokkeslæt i dette modul, vil det altid holde styr på det. Der er flere typer RTC IC'er tilgængelige som DS1307, DS3231 osv.
Vi har tidligere brugt DS3231 RTC med Arduino i nedenstående projekter:
- Automatisk kæledyrsføder ved hjælp af Arduino
- Arduino datalogger
Bemærk: Når du bruger dette modul for første gang, skal du indstille dato og klokkeslæt. Du kan også bruge RTC IC DS1307, vi har tidligere brugt DS1307 med Arduino.
Lær om OLED-skærme at kende:
Udtrykket OLED står for " Organisk lysemitterende diode", det bruger den samme teknologi, der bruges i de fleste af vores fjernsyn, men har færre pixels i forhold til dem. Det er rigtig sjovt at have disse seje displaymoduler, da det får vores projekter til at se seje ud. Vi har dækket en komplet artikel om OLED-skærme og dens typer her.
Vi bruger en monokrom 7-benet SSD1306 0,96 ”OLED-skærm. Årsagen til at vælge denne skærm er, at den kan arbejde på tre forskellige kommunikationsprotokoller, såsom SPI 3 Wire-tilstand, SPI-firetrådstilstand og IIC-tilstand. Denne vejledning vil dække, hvordan du bruger modulet i SPI 4-leder tilstand, da det er den hurtigste kommunikationsmetode og standard.
Stifterne og dens funktioner er forklaret i nedenstående tabel.
Pinkode |
Pin-navn |
Andre navne |
Anvendelse |
1 |
Gnd |
Jord |
Jordstiften på modulet |
2 |
Vdd |
Vcc, 5V |
Power pin (3-5V tolerabel) |
3 |
SCK |
D0, SCL, CLK |
Fungerer som urstiften. Bruges til både I2C og SPI |
4 |
SDA |
D1, MOSI |
Modulets datapind. Bruges til både IIC og SPI |
5 |
RES |
RST, RESET |
Nulstiller modulet (nyttigt under SPI) |
6 |
DC |
A0 |
Data Command pin. Bruges til SPI-protokol |
7 |
CS |
Chip Select |
Nyttigt, når der bruges mere end et modul under SPI-protokol |
I denne vejledning betjener vi simpelthen modulet i 4-Wire SPI-tilstand, vi overlader resten til en anden tutorial.
Arduino-samfundet har allerede givet os en masse biblioteker, som kan bruges direkte til at gøre dette meget enklere. Jeg prøvede et par biblioteker og fandt ud af, at Adafruit_SSD1306-biblioteket var meget let at bruge og havde en håndfuld grafiske muligheder, derfor bruger vi det samme i denne vejledning. Men hvis dit projekt har en hukommelse / hastighedsbegrænsning, prøv at bruge U8g-biblioteket, da det fungerer hurtigere og optager mindre programhukommelse.
Vi har også interfacet OLED med Raspberry pi og Arduino.
Nødvendigt materiale:
- ESP32
- DS3231 RTC-modul
- 7-pin 128 × 64 OLED-skærmmodul (SSD1306)
- Han-hun ledninger
- Brødbræt
Kredsløbsdiagram:
Kredsløbsdiagram til tilslutning af RTC3231 til ESP-kort er vist nedenfor:
RTC DS3231 IC bruger I2C kommunikationstilstand. Det har SCL, SDA, Vcc og GND-ben, der kommer ud af det. Forbindelse af RTC-modul med ESP32 er angivet nedenfor:
- SCL for RTC -> SCL for ESP32 dvs. Pin D22
- SDA for RTC -> SDA for ESP32 dvs. Pin D21
- GND af RTC -> GND af ESP32
- Vcc af RTC -> Vcc af ESP32
Her bruger vi SPI-tilstand til at forbinde vores 128 × 64 OLED-skærmmodul (SSD1306) til ESP32. Så det bruger 7 ben. Forbindelser med ESP32 gives som:
- CS (Chip select) pin af OLED -> PIN D5 af ESP32
- DC-stift af OLED -> PIN D4 af ESP32
- RES pin af OLED -> PIN D2 af ESP32
- SDA pin af OLED -> PIN D23 dvs. MOSI af ESP32
- SCK pin af OLED -> PIN D18 dvs. SCK af ESP32
- Vdd af OLED -> Vcc af ESP32
- GND af OLED -> GND af ESP32
Du har brug for kortfiler til din ESP32. Tjek ind i board manager drop down menu of Arduino IDE for ESP32 dev kit. Hvis det ikke er der, skal du følge trinene i nedenstående link:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Du kan også bruge ESP12 til dette projekt. Lær her at bruge ESP12.
Kode Forklaring:
Komplet kode til ESP32 findes i slutningen af artiklen. Her forklarer vi nogle få vigtige dele af koden.
Vi har brug for flere biblioteker, der skal bruges i vores kode, som kan downloades fra nedenstående links:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. RTClib:
Så vi har inkluderet alle bibliotekerne
#omfatte
Definer derefter alle OLED-benene. Du behøver ikke at definere stifter til RTC-modul, fordi disse stifter allerede er defineret i WIRE-biblioteket.
#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);
I installationsfunktionen kalder vi en funktion rtc.adjust (DateTime (__ DATE__, __TIME__)), der indstiller tiden i henhold til vores pc-tid.
ugyldig opsætning () { Serial.begin (9600); hvis (! rtc.begin ()) { Serial.println ("Kunne ikke finde RTC"); mens (1); } rtc.adjust (DateTime (__ DATE__, __TIME__));
Derefter kalder vi displayfunktioner for at vise på OLED.
display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay (); display.setTextColor (HVID); //display.startscrollright(0x00, 0x0F); // Du kan fjerne kommentar fra denne linje for at rulle din tekst på oled display.setTextSize (2); display.setCursor (0,5); display.print ("Clock"); // Dette viser uret på OLED i 3 sekunder display.display (); forsinkelse (3000); }
Så endelig i loop- funktion gemmer vi vores tid i DateTime nu foruddefineret variabel og viser klokkeslættet ved hjælp af displayfunktioner som setTextSize, setCursor osv. Indstil disse efter dit behov og brug display.println- funktionen til at vise på OLED.
ugyldig loop () { DateTime nu = rtc.now (); display.clearDisplay (); display.setTextSize (2); display.setCursor (75,0); display.println (now.second (), DEC);
Så dette er, hvordan du kan vise tid på OLED ved hjælp af ESP32, og som du ved, er ESP kendt for sine IoT-funktioner, så du kan bruge dette til at offentliggøre tiden på internettet. I næste artikel viser vi dig, at du skal vise Internettet på ESP uden at bruge noget RTC-modul.