I denne opplæringen vil vi lære om Real Time Clock (RTC) og grensesnittet med ESP32 og OLED-skjermen.
Vi vil bruke DS3231 RTC-modul for å holde rede på riktig tid og vise den på SPI OLED ved å bruke ESP32 som vår mikrokontroller. ESP32 er mer enn en mikrokontroller. Den har Wi-Fi og Bluetooth-brikke inni seg og 39 GPIO-pinner. Den støtter alle kommunikasjonsprotokoller som SPI, I2C, UART, etc. Hvis du er ny på ESP32, må du først gå gjennom Kom i gang med ESP32-opplæringen.
Hva er RTC ??
DS3231 er en RTC- modul (Real Time Clock). Den brukes til å opprettholde dato og tid for de fleste av elektronikkprosjektene. Denne modulen har sin egen myntcelle strømforsyning ved hjelp av hvilken den opprettholder dato og klokkeslett selv når hovedstrømmen er fjernet eller MCU har gått gjennom en hard tilbakestilling. Så når vi har satt dato og klokkeslett i denne modulen, vil den alltid holde rede på det. Det er flere typer RTC ICer som DS1307, DS3231 etc.
Vi har tidligere brukt DS3231 RTC med Arduino i prosjekter nedenfor:
- Automatisk kjæledyrsmater ved hjelp av Arduino
- Arduino datalogger
Merk: Når du bruker denne modulen for første gang, må du stille inn dato og klokkeslett. Du kan også bruke RTC IC DS1307, vi har tidligere brukt DS1307 med Arduino.
Bli kjent med OLED-skjermer:
Uttrykket OLED står for " Organic Light emitting diode". Den bruker den samme teknologien som brukes i de fleste av våre TV-er, men har færre piksler i forhold til dem. Det er veldig gøy å ha disse kule utstillingsmodulene, siden det vil gjøre prosjektene våre kule. Vi har dekket en full artikkel om OLED-skjermer og dens typer her.
Vi bruker en monokrom 7-pin SSD1306 0,96 ”OLED-skjerm. Årsaken til at du valgte denne skjermen er at den kan fungere på tre forskjellige kommunikasjonsprotokoller, som SPI 3 Wire-modus, SPI firetrådsmodus og IIC-modus. Denne opplæringen vil dekke hvordan du bruker modulen i SPI 4-ledermodus, siden den er den raskeste kommunikasjonsmodusen og standardmodusen.
Pinnene og dens funksjoner er forklart i tabellen nedenfor.
PIN-kode |
Pin-navn |
Andre navn |
Bruk |
1 |
Gnd |
Bakke |
Jordingsstift på modulen |
2 |
Vdd |
Vcc, 5V |
Strømstift (3-5 V tolerabel) |
3 |
SCK |
D0, SCL, CLK |
Fungerer som klokken. Brukes til både I2C og SPI |
4 |
SDA |
D1, MOSI |
Datapinnen til modulen. Brukes til både IIC og SPI |
5 |
RES |
RST, RESET |
Tilbakestiller modulen (nyttig under SPI) |
6 |
DC |
A0 |
Data Command pin. Brukes til SPI-protokoll |
7 |
CS |
Chip Select |
Nyttig når mer enn én modul brukes under SPI-protokoll |
I denne opplæringen vil vi ganske enkelt bruke modulen i 4-Wire SPI-modus, vi vil la resten være til en annen opplæring.
Arduino-samfunnet har allerede gitt oss mange biblioteker som kan brukes direkte til å gjøre dette mye enklere. Jeg prøvde noen få biblioteker og fant ut at Adafruit_SSD1306-biblioteket var veldig enkelt å bruke og hadde en håndfull grafiske alternativer, derfor vil vi bruke det samme i denne opplæringen. Men hvis prosjektet har en minne / hastighetsbegrensning, prøv å bruke U8g-biblioteket, da det fungerer raskere og opptar mindre programminne.
Vi har også grensesnitt OLED med Raspberry pi og med Arduino.
Nødvendig materiale:
- ESP32
- DS3231 RTC-modul
- 7-pin 128 × 64 OLED-skjermmodul (SSD1306)
- Mann-hunn ledninger
- Brettbrett
Kretsdiagram:
Kretsskjema for å koble RTC3231 til ESP-kort er gitt nedenfor:
RTC DS3231 IC bruker I2C- modus for kommunikasjon. Den har SCL, SDA, Vcc og GND-pinner som kommer ut av den. Tilkobling av RTC-modul med ESP32 er gitt nedenfor:
- SCL for RTC -> SCL for ESP32 dvs. Pin D22
- SDA for RTC -> SDA for ESP32 dvs. Pin D21
- GND av RTC -> GND av ESP32
- Vcc av RTC -> Vcc av ESP32
Her bruker vi SPI-modus for å koble 128 × 64 OLED-skjermmodulen (SSD1306) til ESP32. Så det vil bruke 7 pinner. Forbindelser med ESP32 er gitt som:
- CS (Chip select) pin of OLED -> PIN D5 of ESP32
- DC-pin av OLED -> PIN D4 av ESP32
- RES pin av OLED -> PIN D2 av ESP32
- SDA-pin av OLED -> PIN D23 dvs. MOSI av ESP32
- SCK pin av OLED -> PIN D18 dvs. SCK av ESP32
- Vdd av OLED -> Vcc av ESP32
- GND of OLED -> GND of ESP32
Du trenger tavlefiler for ESP32. Sjekk inn styrelederens rullegardinmeny med Arduino IDE for ESP32 dev kit. Hvis det ikke er der, følg trinnene i lenken nedenfor:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Du kan også bruke ESP12 for dette prosjektet. Lær her å bruke ESP12.
Kode Forklaring:
Komplett kode for ESP32 er gitt på slutten av artikkelen. Her forklarer vi noen viktige deler av koden.
Vi trenger flere biblioteker for å bruke i koden vår, som kan lastes ned fra linkene nedenfor:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. RTClib:
Så vi har tatt med alle bibliotekene
#inkludere
Definer deretter alle pinnene til OLED. Du trenger ikke definere pinner for RTC-modulen fordi disse pinnene allerede er definert 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 oppsettfunksjonen vil vi kalle en funksjon rtc.adjust (DateTime (__ DATE__, __TIME__)) som vil stille inn tiden i henhold til PC-tiden vår.
ugyldig oppsett () { Serial.begin (9600); hvis (! rtc.begin ()) { Serial.println ("Kunne ikke finne RTC"); mens (1); } rtc.adjust (DateTime (__ DATE__, __TIME__));
Etter det kaller vi displayfunksjoner for å vise på OLED.
display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay (); display.setTextColor (HVIT); //display.startscrollright(0x00, 0x0F); // Du kan fjerne merkingen fra denne linjen for å bla i teksten din på oled display.setTextSize (2); display.setCursor (0,5); display.print ("Clock"); // Dette vil vise klokken på OLED i 3 sekunder display. Display (); forsinkelse (3000); }
Så til slutt i sløyfefunksjon , lagrer vi tiden vår i DateTime nå forhåndsdefinerte variabel og viser klokkeslettet ved hjelp av skjermfunksjoner som setTextSize, setCursor, etc. Still disse inn etter behov og bruk display.println- funksjonen for å vise på OLED.
ugyldig sløyfe () { DateTime now = 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 hjelp av ESP32, og som du vet er ESP kjent for sine IoT-muligheter, slik at du kan bruke dette til å publisere tiden på internett. I neste artikkel viser vi deg å vise Internett-tid på ESP uten å bruke noen RTC-modul.