In deze zelfstudie leren we over Real Time Clock (RTC) en de koppeling met het ESP32- en OLED-scherm.
We zullen de DS3231 RTC-module gebruiken om de juiste tijd bij te houden en deze op SPI OLED weer te geven door ESP32 als onze microcontroller te gebruiken. ESP32 is meer dan een microcontroller. Het heeft Wi-Fi en Bluetooth-chip erin en 39 GPIO-pinnen. Het ondersteunt alle communicatieprotocollen zoals SPI, I2C, UART, enz. Als u nieuw bent bij ESP32, doorloop dan eerst onze handleiding Aan de slag met ESP32.
Wat is RTC ??
DS3231 is een RTC- module (Real Time Clock). Het wordt gebruikt om de datum en tijd bij te houden voor de meeste elektronicaprojecten. Deze module heeft zijn eigen knoopcelvoeding waarmee hij de datum en tijd behoudt, zelfs wanneer de hoofdstroom is verwijderd of de MCU een harde reset heeft ondergaan. Dus zodra we de datum en tijd in deze module hebben ingesteld, houdt deze deze altijd bij. Er zijn verschillende soorten RTC IC's beschikbaar zoals DS1307, DS3231 etc.
We hebben eerder DS3231 RTC met Arduino gebruikt in onderstaande projecten:
- Automatische voerautomaat met Arduino
- Arduino datalogger
Let op: Als u deze module voor het eerst gebruikt, moet u de datum en tijd instellen. Je kunt ook RTC IC DS1307 gebruiken, we hebben eerder DS1307 gebruikt met Arduino.
Kennismaken met OLED-schermen:
De term OLED staat voor " Organic Light Emitting diode". Het gebruikt dezelfde technologie die in de meeste van onze televisies wordt gebruikt, maar heeft minder pixels dan deze. Het is echt leuk om deze coole displaymodules te hebben, omdat het onze projecten er cool uit zal laten zien. We hebben hier een volledig artikel over OLED-schermen en de typen ervan behandeld.
We gebruiken een monochroom 7-pins SSD1306 0,96 ”OLED-scherm. De reden om voor dit beeldscherm te kiezen, is dat het kan werken op drie verschillende communicatieprotocollen, zoals de SPI 3-draadsmodus, SPI-vierdraadsmodus en IIC-modus. Deze tutorial behandelt het gebruik van de module in SPI 4-draads modus, aangezien dit de snelste communicatiemodus is en de standaard modus.
De pinnen en de functies ervan worden in de onderstaande tabel uitgelegd.
Pincode |
Pin Naam |
Andere namen |
Gebruik |
1 |
GND |
Grond |
Aardingspin van de module |
2 |
Vdd |
Vcc, 5V |
Power pin (3-5V aanvaardbaar) |
3 |
SCK |
D0, SCL, CLK |
Fungeert als de klokpen. Wordt gebruikt voor zowel I2C als SPI |
4 |
SDA |
D1, MOSI |
Datapin van de module. Wordt gebruikt voor zowel IIC als SPI |
5 |
RES |
RST, RESET |
Reset de module (handig tijdens SPI) |
6 |
DC |
A0 |
Data Command-pin. Gebruikt voor SPI-protocol |
7 |
CS |
Chip selecteren |
Handig als er meer dan één module wordt gebruikt onder het SPI-protocol |
In deze tutorial zullen we de module gewoon in 4-Wire SPI-modus bedienen, de rest laten we over voor een andere tutorial.
De Arduino-community heeft ons al veel bibliotheken gegeven die direct kunnen worden gebruikt om dit een stuk eenvoudiger te maken. Ik heb een paar bibliotheken uitgeprobeerd en ontdekte dat de Adafruit_SSD1306-bibliotheek erg gemakkelijk te gebruiken was en een handvol grafische opties had, vandaar dat we dezelfde in deze tutorial zullen gebruiken. Maar als uw project een geheugen- / snelheidsbeperking heeft, probeer dan de U8g-bibliotheek te gebruiken, omdat deze sneller werkt en minder programmageheugen in beslag neemt.
We hebben ook OLED gekoppeld aan Raspberry pi en met Arduino.
Materiaal vereist:
- ESP32
- DS3231 RTC-module
- 7-pins 128 × 64 OLED-weergavemodule (SSD1306)
- Man-vrouw draden
- Breadboard
Schakelschema:
Het schakelschema om de RTC3231 aan te sluiten op de ESP-kaart wordt hieronder gegeven:
RTC DS3231 IC gebruikt de I2C -communicatiemodus. Er komen SCL-, SDA-, Vcc- en GND-pinnen uit. De verbinding van de RTC-module met ESP32 wordt hieronder gegeven:
- SCL van RTC -> SCL van ESP32 dwz Pin D22
- SDA van RTC -> SDA van ESP32 dwz Pin D21
- GND van RTC -> GND van ESP32
- Vcc van RTC -> Vcc van ESP32
Hier gebruiken we de SPI-modus om onze 128 × 64 OLED-displaymodule (SSD1306) aan te sluiten op ESP32. Het gebruikt dus 7 pinnen. Verbindingen met ESP32 worden gegeven als:
- CS (Chip select) pin van OLED -> PIN D5 van ESP32
- DC-pin van OLED -> PIN D4 van ESP32
- RES-pin van OLED -> PIN D2 van ESP32
- SDA-pin van OLED -> PIN D23 dwz MOSI van ESP32
- SCK-pin van OLED -> PIN D18 dwz SCK van ESP32
- Vdd van OLED -> Vcc van ESP32
- GND van OLED -> GND van ESP32
U hebt bordbestanden nodig voor uw ESP32. Check in board manager drop-down menu van Arduino IDE voor ESP32 dev kit. Als het er niet is, volgt u de stappen in de onderstaande link:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
U kunt ook ESP12 gebruiken voor dit project, leer hier ESP12 gebruiken.
Code Verklaring:
De volledige code voor ESP32 wordt aan het einde van het artikel gegeven. Hier leggen we enkele belangrijke delen van de code uit.
We hebben verschillende bibliotheken nodig om in onze code te gebruiken, die kan worden gedownload via de onderstaande links:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. RTClib:
We hebben dus alle bibliotheken opgenomen
# omvatten
Definieer vervolgens alle pinnen van OLED. U hoeft geen pinnen te definiëren voor de RTC-module, omdat deze pinnen al zijn gedefinieerd in de WIRE-bibliotheek.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2 Adafruit_SSD1306-scherm (OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
In de setup- functie noemen we een functie rtc.adjust (DateTime (__ DATE__, __TIME__)) die de tijd zal instellen volgens onze pc-tijd.
ongeldige setup () { Serial.begin (9600); if (! rtc.begin ()) { Serial.println ("Kon RTC niet vinden"); terwijl (1); } rtc.adjust (DateTime (__ DATE__, __TIME__));
Daarna bellen we weergavefuncties om op OLED weer te geven.
display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay (); display.setTextColor (WIT); //display.startscrollright(0x00, 0x0F); // U kunt deze regel verwijderen om door uw tekst te scrollen op oled- display.setTextSize (2); display.setCursor (0,5); display.print ("Clock"); // Hierdoor wordt de klok gedurende 3 seconden weergegeven op OLED display.display (); vertraging (3000); }
Dan eindelijk in loop -functie, we zullen onze tijd op te slaan in DateTime nu vooraf gedefinieerde variabele en de tijd wordt weergegeven in weergave functies zoals setTextSize, SetCursor, enz. Stel deze op basis van uw behoefte en gebruik display.println functie voor weergave op OLED.
void loop () { DateTime now = rtc.now (); display.clearDisplay (); display.setTextSize (2); display.setCursor (75,0); display.println (now.second (), DEC);
Dit is dus hoe u tijd op OLED kunt weergeven met ESP32 en zoals u weet staat ESP bekend om zijn IoT-mogelijkheden, dus u kunt dit gebruiken om de tijd op internet te publiceren. In het volgende artikel laten we u zien hoe u internettijd op ESP kunt weergeven zonder een RTC-module te gebruiken.