I den här handledningen lär vi oss om Real Time Clock (RTC) och dess gränssnitt med ESP32 och OLED-skärmen.
Vi använder DS3231 RTC-modulen för att hålla reda på rätt tid och visa den på SPI OLED genom att använda ESP32 som vår mikrokontroller. ESP32 är mer än en mikrokontroller. Den har Wi-Fi och Bluetooth-chip inuti och 39 GPIO-stift. Den stöder alla kommunikationsprotokoll som SPI, I2C, UART, etc. Om du är ny på ESP32, gå först igenom vår Komma igång med ESP32-handledning.
Vad är RTC ??
DS3231 är en RTC- modul (Real Time Clock). Den används för att bibehålla datum och tid för de flesta av elektronikprojekten. Denna modul har sin egen myntcellströmförsörjning med vilken den behåller datum och tid även när huvudströmmen tas bort eller MCU har genomgått en hård återställning. Så när vi har ställt in datum och tid i den här modulen kommer det alltid att hålla koll på det. Det finns flera typer av RTC IC: er som DS1307, DS3231 etc.
Vi har tidigare använt DS3231 RTC med Arduino i nedanstående projekt:
- Automatisk husdjursmatare med Arduino
- Arduino Data Logger
Obs! När du använder den här modulen för första gången måste du ställa in datum och tid. Du kan också använda RTC IC DS1307, vi har tidigare använt DS1307 med Arduino.
Lär känna OLED-skärmar:
Uttrycket OLED står för " Organic Light emitting diode", det använder samma teknik som används i de flesta av våra tv-apparater men har färre pixlar jämfört med dem. Det är riktigt kul att ha dessa snygga displaymoduler eftersom det kommer att göra våra projekt ser coola ut. Vi har täckt en fullständig artikel om OLED-skärmar och dess typer här.
Vi använder en monokrom 7-stifts SSD1306 0,96-tums OLED-skärm. Anledningen till att du väljer den här skärmen är att den kan fungera på tre olika kommunikationsprotokoll, såsom SPI 3 Wire-läge, SPI-fyrtrådsläge och IIC-läge. Denna handledning kommer att beskriva hur man använder modulen i SPI 4-trådsläge, eftersom det är det snabbaste kommunikationsläget och standardläget.
Stiften och dess funktioner förklaras i tabellen nedan.
Pinkod |
Pin-namn |
Andra namn |
Användande |
1 |
Gnd |
Jord |
Jordens stift på modulen |
2 |
Vdd |
Vcc, 5V |
Strömstift (3-5 V acceptabelt) |
3 |
SCK |
D0, SCL, CLK |
Fungerar som klockstift. Används för både I2C och SPI |
4 |
SDA |
D1, MOSI |
Modulens datapinne. Används för både IIC och SPI |
5 |
RES |
RST, RESET |
Återställer modulen (användbar under SPI) |
6 |
DC |
A0 |
Data Command pin. Används för SPI-protokoll |
7 |
CS |
Chip Select |
Användbar när mer än en modul används under SPI-protokollet |
I denna handledning kommer vi helt enkelt att använda modulen i 4-Wire SPI-läge, vi lämnar resten för någon annan handledning.
Arduino-communityn har redan gett oss många bibliotek som kan användas direkt för att göra detta mycket enklare. Jag testade några bibliotek och fann att Adafruit_SSD1306-biblioteket var väldigt enkelt att använda och hade en handfull grafiska alternativ, därför kommer vi att använda detsamma i denna handledning. Men om ditt projekt har en minnes- / hastighetsbegränsning, försök använda U8g-biblioteket eftersom det fungerar snabbare och tar mindre programminne.
Vi har också kopplat OLED med Raspberry pi och Arduino.
Material som krävs:
- ESP32
- DS3231 RTC-modul
- 7-stifts 128 × 64 OLED-skärmmodul (SSD1306)
- Man-kvinnliga ledningar
- Bakbord
Kretsschema:
Kretsschema för anslutning av RTC3231 till ESP-kort ges nedan:
RTC DS3231 IC använder I2C- kommunikationssätt. Den har SCL-, SDA-, Vcc- och GND-stift som kommer ut ur den. Anslutning av RTC-modul med ESP32 ges nedan:
- SCL för RTC -> SCL för ESP32 dvs Pin D22
- SDA för RTC -> SDA för ESP32 dvs Pin D21
- GND för RTC -> GND för ESP32
- Vcc för RTC -> Vcc för ESP32
Här använder vi SPI-läge för att ansluta vår 128 × 64 OLED-skärmmodul (SSD1306) till ESP32. Så det kommer att använda 7 stift. Anslutningar med ESP32 ges som:
- CS (Chip select) stift av OLED -> PIN D5 för ESP32
- DC-stift för OLED -> PIN D4 för ESP32
- RES-stift för OLED -> PIN D2 för ESP32
- SDA-stift av OLED -> PIN D23 dvs MOSI för ESP32
- SCK-stift av OLED -> PIN D18 dvs SCK för ESP32
- Vdd av OLED -> Vcc av ESP32
- GND för OLED -> GND för ESP32
Du behöver kortfiler för din ESP32. Kontrollera i styrelsens rullgardinsmeny för Arduino IDE för ESP32 dev-kit. Om det inte finns följer du stegen i länken nedan:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Du kan också använda ESP12 för detta projekt, lär dig här att använda ESP12.
Kodförklaring:
Komplett kod för ESP32 ges i slutet av artikeln. Här förklarar vi några viktiga delar av koden.
Vi behöver flera bibliotek för att använda i vår kod som kan laddas ner från länkarna nedan:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. RTClib:
Så vi har inkluderat alla bibliotek
#omfatta
Definiera sedan alla OLED-stift. Du behöver inte definiera stift för RTC-modul eftersom dessa stift redan är definierade 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 kallar vi en funktion rtc.adjust (DateTime (__ DATE__, __TIME__)) som ställer in tiden enligt vår PC-tid.
ogiltig installation () { Serial.begin (9600); if (! rtc.begin ()) { Serial.println ("Det gick inte att hitta RTC"); medan (1); } rtc.adjust (DateTime (__ DATE__, __TIME__));
Efter det kallar vi displayfunktioner för att visa på OLED.
display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay (); display.setTextColor (WHITE); //display.startscrollright(0x00, 0x0F); // Du kan avmarkera den här raden för att bläddra i texten på oled display.setTextSize (2); display.setCursor (0,5); display.print ("Clock"); // Detta visar klockan på OLED i 3 sekunder display.display (); fördröjning (3000); }
Slutligen i loopfunktionen , lagrar vi vår tid i DateTime nu fördefinierad variabel och visar tiden med hjälp av visningsfunktioner som setTextSize, setCursor, etc. Ställ in dessa efter ditt behov och använd display.println- funktionen för att visa på OLED.
void loop () { DateTime now = rtc.now (); display.clearDisplay (); display.setTextSize (2); display.setCursor (75,0); display.println (now.second (), DEC);
Så detta är hur du kan visa tid på OLED med ESP32 och som du vet är ESP känt för sina IoT-funktioner, så du kan använda detta för att publicera tiden på internet. I nästa artikel visar vi dig att visa Internet Time på ESP utan att använda någon RTC-modul.