- Co to jest RTC?
- Zapoznanie się z wyświetlaczami OLED:
- Wymagany materiał:
- Schemat obwodu:
- Objaśnienie kodu:
W tym samouczku dowiemy się o zegarze czasu rzeczywistego (RTC) i jego połączeniu z wyświetlaczem ESP32 i OLED.
Będziemy używać modułu DS3231 RTC, aby śledzić prawidłowy czas i wyświetlać go na SPI OLED, używając ESP32 jako naszego mikrokontrolera. ESP32 to więcej niż mikrokontroler. Posiada wbudowany układ Wi-Fi i Bluetooth oraz 39 pinów GPIO. Obsługuje wszystkie protokoły komunikacyjne, takie jak SPI, I2C, UART itp. Jeśli nie masz doświadczenia z ESP32, najpierw zapoznaj się z naszym samouczkiem Pierwsze kroki z ESP32.
Co to jest RTC?
DS3231 to moduł RTC (Real Time Clock). Służy do utrzymywania daty i godziny dla większości projektów elektroniki. Ten moduł ma własny zasilacz do baterii pastylkowej, za pomocą którego utrzymuje datę i godzinę nawet po odłączeniu głównego zasilania lub po przeprowadzeniu twardego resetu MCU. Więc kiedy ustawimy datę i godzinę w tym module, będzie to zawsze śledzić. Dostępnych jest kilka typów układów scalonych RTC, takich jak DS1307, DS3231 itp.
Wcześniej używaliśmy DS3231 RTC z Arduino w poniższych projektach:
- Automatyczny karmnik dla zwierząt wykorzystujący Arduino
- Rejestrator danych Arduino
Uwaga: Korzystając z tego modułu po raz pierwszy, musisz ustawić datę i godzinę. Możesz również użyć RTC IC DS1307, wcześniej używaliśmy DS1307 z Arduino.
Zapoznanie się z wyświetlaczami OLED:
Termin OLED oznacza „ organiczną diodę elektroluminescencyjną” . Wykorzystuje tę samą technologię, która jest używana w większości naszych telewizorów, ale ma mniej pikseli w porównaniu z nimi. Fajnie jest mieć te fajnie wyglądające moduły wyświetlania, ponieważ dzięki temu nasze projekty będą wyglądać fajnie. Omówiliśmy tutaj cały artykuł dotyczący wyświetlaczy OLED i ich typów.
Używamy monochromatycznego 7-pinowego wyświetlacza OLED SSD1306 0,96 ”. Powodem wyboru tego wyświetlacza jest to, że może on pracować z trzema różnymi protokołami komunikacyjnymi, takimi jak tryb SPI 3-przewodowy, tryb czteroprzewodowy SPI i tryb IIC. W tym samouczku omówimy, jak używać modułu w trybie SPI 4-przewodowym, ponieważ jest to najszybszy i domyślny tryb komunikacji.
Piny i ich funkcje są wyjaśnione w poniższej tabeli.
Kod PIN |
Nazwa pinu |
Inne nazwy |
Stosowanie |
1 |
Gnd |
Ziemia |
Pin uziemienia modułu |
2 |
Vdd |
Vcc, 5 V. |
Pin zasilania (tolerowane 3-5 V) |
3 |
SCK |
D0, SCL, CLK |
Działa jako pin zegara. Używany zarówno dla I2C, jak i SPI |
4 |
SDA |
D1, MOSI |
Pin danych modułu. Używany zarówno do IIC, jak i SPI |
5 |
RES |
RST, RESET |
Resetuje moduł (przydatne podczas SPI) |
6 |
DC |
A0 |
Pin polecenia danych. Używany do protokołu SPI |
7 |
CS |
Chip Select |
Przydatne, gdy w protokole SPI używany jest więcej niż jeden moduł |
W tym samouczku po prostu będziemy obsługiwać moduł w trybie 4-Wire SPI, resztę zostawimy na inny tutorial.
Społeczność Arduino dała nam już wiele bibliotek, które można bezpośrednio wykorzystać, aby to znacznie uprościć. Wypróbowałem kilka bibliotek i stwierdziłem, że biblioteka Adafruit_SSD1306 była bardzo łatwa w użyciu i miała kilka opcji graficznych, dlatego użyjemy tego samego w tym samouczku. Ale jeśli twój projekt ma ograniczenia pamięci / szybkości, spróbuj użyć biblioteki U8g, ponieważ działa ona szybciej i zajmuje mniej pamięci programu.
Połączyliśmy również OLED z Raspberry pi i Arduino.
Wymagany materiał:
- ESP32
- Moduł DS3231 RTC
- 7-pinowy moduł wyświetlacza OLED 128 × 64 (SSD1306)
- Przewody męsko-żeńskie
- Płytka prototypowa
Schemat obwodu:
Schemat obwodu do podłączenia RTC3231 do płyty ESP przedstawiono poniżej:
RTC DS3231 IC wykorzystuje tryb komunikacji I2C. Ma wychodzące z niego piny SCL, SDA, Vcc i GND. Podłączenie modułu RTC z ESP32 przedstawiono poniżej:
- SCL z RTC -> SCL z ESP32 tj. Pin D22
- SDA z RTC -> SDA z ESP32 tj. Pin D21
- GND RTC -> GND ESP32
- Vcc z RTC -> Vcc z ESP32
Tutaj używamy trybu SPI, aby podłączyć nasz moduł wyświetlacza OLED 128 × 64 (SSD1306) do ESP32. Więc użyje 7 pinów. Połączenia z ESP32 są podane jako:
- Pin CS (Chip select) w OLED -> PIN D5 w ESP32
- Pin DC OLED -> PIN D4 ESP32
- Pin RES z OLED -> PIN D2 z ESP32
- Pin SDA OLED -> PIN D23 czyli MOSI ESP32
- Pin SCK OLED -> PIN D18 czyli SCK ESP32
- Vdd z OLED -> Vcc z ESP32
- GND OLED -> GND ESP32
Potrzebujesz plików płytki dla swojego ESP32. Sprawdź w rozwijanym menu menedżera płyty Arduino IDE dla zestawu deweloperskiego ESP32. Jeśli go tam nie ma, wykonaj czynności podane w linku poniżej:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Możesz również użyć ESP12 do tego projektu, dowiedz się tutaj, jak używać ESP12.
Objaśnienie kodu:
Pełny kod dla ESP32 podany jest na końcu artykułu. Tutaj wyjaśniamy kilka ważnych części kodu.
Potrzebujemy kilku bibliotek do wykorzystania w naszym kodzie, które można pobrać z poniższych linków:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. RTClib:
Więc zawarliśmy wszystkie biblioteki
#zawierać
Następnie zdefiniuj wszystkie piny OLED. Nie musisz definiować pinów dla modułu RTC, ponieważ te piny są już zdefiniowane w bibliotece WIRE.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2 Wyświetlacz Adafruit_SSD1306 (OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
W funkcji konfiguracji wywołamy funkcję rtc.adjust (DateTime (__ DATE__, __TIME__)), która ustawi czas zgodnie z czasem naszego komputera.
void setup () { Serial.begin (9600); if (! rtc.begin ()) { Serial.println ("Nie można znaleźć RTC"); podczas gdy (1); } rtc.adjust (DateTime (__ DATE__, __TIME__));
Następnie wywołujemy funkcje wyświetlania, aby pokazać je na OLED.
display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay (); display.setTextColor (BIAŁY); //display.startscrollright(0x00, 0x0F); // Możesz odkomentować tę linię, aby przewijać tekst na oled display.setTextSize (2); display.setCursor (0,5); display.print ("Zegar"); // Spowoduje to wyświetlenie zegara na OLED przez 3 sekundy display.display (); opóźnienie (3000); }
Następnie w funkcji pętli będziemy przechowywać czas w predefiniowanej zmiennej DateTime i wyświetlać czas za pomocą funkcji wyświetlania, takich jak setTextSize, setCursor, itp. Ustaw je zgodnie z potrzebami i użyj funkcji display.println, aby wyświetlić na OLED.
void loop () { DateTime now = rtc.now (); display.clearDisplay (); display.setTextSize (2); display.setCursor (75,0); display.println (now.second (), DEC);
W ten sposób możesz wyświetlać czas na OLED za pomocą ESP32, a jak wiesz, ESP jest znane ze swoich możliwości IoT, więc możesz użyć tego do opublikowania czasu w Internecie. W następnym artykule pokażemy, jak wyświetlać czas internetowy w ESP bez użycia modułu RTC.