In diesem Tutorial lernen wir die Echtzeituhr (RTC) und ihre Schnittstelle zum ESP32- und OLED-Display kennen.
Wir werden das RTC-Modul DS3231 verwenden, um die korrekte Zeit zu verfolgen und sie auf SPI OLED anzuzeigen, indem wir ESP32 als unseren Mikrocontroller verwenden. ESP32 ist mehr als ein Mikrocontroller. Es verfügt über Wi-Fi und Bluetooth-Chip und 39 GPIO-Pins. Es unterstützt alle Kommunikationsprotokolle wie SPI, I2C, UART usw. Wenn Sie mit ESP32 noch nicht vertraut sind, lesen Sie zuerst unser Tutorial Erste Schritte mit ESP32.
Was ist RTC?
DS3231 ist ein RTC- Modul (Real Time Clock). Es wird verwendet, um Datum und Uhrzeit für die meisten Elektronikprojekte zu verwalten. Dieses Modul verfügt über ein eigenes Knopfzellen-Netzteil, mit dem Datum und Uhrzeit auch dann beibehalten werden, wenn die Hauptstromversorgung unterbrochen wird oder die MCU einen Hard-Reset durchlaufen hat. Sobald wir also Datum und Uhrzeit in diesem Modul eingestellt haben, wird es immer verfolgt. Es gibt verschiedene Arten von RTC-ICs wie DS1307, DS3231 usw.
Wir haben zuvor DS3231 RTC mit Arduino in folgenden Projekten verwendet:
- Automatischer Tierfutterautomat mit Arduino
- Arduino Datenlogger
Hinweis: Wenn Sie dieses Modul zum ersten Mal verwenden, müssen Sie Datum und Uhrzeit einstellen. Sie können auch den RTC IC DS1307 verwenden. Wir haben zuvor DS1307 mit Arduino verwendet.
OLED-Displays kennenlernen:
Der Begriff OLED steht für „ Organic Light Emitting Diode “ ( Organische Leuchtdiode) und verwendet dieselbe Technologie wie die meisten unserer Fernseher, hat jedoch im Vergleich zu diesen weniger Pixel. Es macht wirklich Spaß, diese cool aussehenden Anzeigemodule zu haben, da unsere Projekte dadurch cool aussehen. Wir haben hier einen vollständigen Artikel über OLED-Displays und ihre Typen behandelt.
Wir verwenden ein monochromes 7-poliges SSD1306 0,96-Zoll-OLED-Display. Der Grund für die Auswahl dieses Displays ist, dass es mit drei verschiedenen Kommunikationsprotokollen arbeiten kann, z. B. dem SPI 3-Drahtmodus, dem SPI-Vierdrahtmodus und dem IIC-Modus. In diesem Tutorial wird beschrieben, wie Sie das Modul im SPI 4-Draht-Modus verwenden, da es der schnellste und der Standard-Kommunikationsmodus ist.
Die Stifte und ihre Funktionen werden in der folgenden Tabelle erläutert.
PIN Nummer |
Pin Name |
Andere Namen |
Verwendung |
1 |
Gnd |
Boden |
Erdungsstift des Moduls |
2 |
Vdd |
Vcc, 5V |
Stromanschluss (3-5V tolerierbar) |
3 |
SCK |
D0, SCL, CLK |
Dient als Clock. Wird sowohl für I2C als auch für SPI verwendet |
4 |
SDA |
D1, MOSI |
Daten-Pin des Moduls. Wird sowohl für IIC als auch für SPI verwendet |
5 |
RES |
RST, RESET |
Setzt das Modul zurück (nützlich während SPI) |
6 |
DC |
A0 |
Datenbefehls-Pin. Wird für das SPI-Protokoll verwendet |
7 |
CS |
Chipauswahl |
Nützlich, wenn mehr als ein Modul unter dem SPI-Protokoll verwendet wird |
In diesem Tutorial werden wir das Modul einfach im 4-Draht-SPI-Modus betreiben, den Rest lassen wir für ein anderes Tutorial.
Die Arduino-Community hat uns bereits viele Bibliotheken zur Verfügung gestellt, die direkt verwendet werden können, um dies viel einfacher zu machen. Ich habe einige Bibliotheken ausprobiert und festgestellt, dass die Adafruit_SSD1306-Bibliothek sehr einfach zu verwenden ist und über eine Handvoll grafischer Optionen verfügt. Daher werden wir diese in diesem Lernprogramm verwenden. Wenn Ihr Projekt jedoch Speicher- / Geschwindigkeitsbeschränkungen aufweist, verwenden Sie die U8g-Bibliothek, da diese schneller arbeitet und weniger Programmspeicher belegt.
Wir haben auch OLED mit Raspberry Pi und mit Arduino verbunden.
Erforderliches Material:
- ESP32
- DS3231 RTC-Modul
- 7-poliges 128 × 64-OLED-Anzeigemodul (SSD1306)
- Stecker-Buchse-Drähte
- Steckbrett
Schaltplan:
Der Schaltplan zum Anschließen des RTC3231 an die ESP-Karte ist unten angegeben:
Der RTC DS3231 IC verwendet den I2C- Kommunikationsmodus. Es hat SCL-, SDA-, Vcc- und GND-Pins. Der Anschluss des RTC-Moduls an ESP32 ist unten angegeben:
- SCL von RTC -> SCL von ESP32, dh Pin D22
- SDA von RTC -> SDA von ESP32, dh Pin D21
- GND von RTC -> GND von ESP32
- Vcc von RTC -> Vcc von ESP32
Hier verwenden wir den SPI-Modus, um unser 128 × 64-OLED-Anzeigemodul (SSD1306) an ESP32 anzuschließen. Es werden also 7 Pins verwendet. Verbindungen mit ESP32 werden wie folgt angegeben:
- CS-Pin (Chip Select) der OLED -> PIN D5 des ESP32
- DC-Pin von OLED -> PIN D4 von ESP32
- RES-Pin von OLED -> PIN D2 von ESP32
- SDA-Pin von OLED -> PIN D23, dh MOSI von ESP32
- SCK-Pin von OLED -> PIN D18, dh SCK von ESP32
- Vdd von OLED -> Vcc von ESP32
- GND von OLED -> GND von ESP32
Sie benötigen Board-Dateien für Ihr ESP32. Überprüfen Sie das Dropdown-Menü des Board Managers der Arduino IDE für das ESP32-Entwicklungskit. Wenn dies nicht der Fall ist, führen Sie die folgenden Schritte aus:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Sie können ESP12 auch für dieses Projekt verwenden. Erfahren Sie hier, wie Sie ESP12 verwenden.
Code Erläuterung:
Der vollständige Code für ESP32 ist am Ende des Artikels angegeben. Hier erklären wir einige wichtige Teile des Codes.
Wir benötigen mehrere Bibliotheken für unseren Code, die über die folgenden Links heruntergeladen werden können:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. RTClib:
Also haben wir alle Bibliotheken aufgenommen
#einschließen
Definieren Sie dann alle Pins von OLED. Sie müssen keine Pins für das RTC-Modul definieren, da diese Pins bereits in der WIRE-Bibliothek definiert sind.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2 Adafruit_SSD1306-Anzeige (OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
In der Setup- Funktion rufen wir eine Funktion rtc.adjust (DateTime (__ DATE__, __TIME__)) auf, die die Zeit entsprechend unserer PC-Zeit einstellt.
void setup () { Serial.begin (9600); if (! rtc.begin ()) { Serial.println ("RTC konnte nicht gefunden werden"); während (1); } rtc.adjust (DateTime (__ DATE__, __TIME__));
Danach rufen wir Anzeigefunktionen auf, um sie auf OLED anzuzeigen.
display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay (); display.setTextColor (WHITE); //display.startscrollright(0x00, 0x0F); // Sie können diese Zeile auskommentieren, um Ihren Text auf oled display.setTextSize (2) zu scrollen . display.setCursor (0,5); display.print ("Clock"); // Dies zeigt 3 Sekunden lang die Uhr auf der OLED an display.display (); Verzögerung (3000); }}
Dann, endlich in der Schleifenfunktion , speichern wir unsere Zeit in der jetzt vordefinierten Variablen DateTime und zeigen die Zeit mit Anzeigefunktionen wie setTextSize, setCursor usw. an. Stellen Sie diese entsprechend Ihren Anforderungen ein und verwenden Sie die Funktion display.println , um sie auf OLED anzuzeigen .
void loop () { DateTime now = rtc.now (); display.clearDisplay (); display.setTextSize (2); display.setCursor (75,0); display.println (now.second (), DEC);
Auf diese Weise können Sie die Zeit auf OLED mit ESP32 anzeigen. Wie Sie wissen, ist ESP für seine IoT-Funktionen bekannt. Auf diese Weise können Sie die Zeit im Internet veröffentlichen. Im nächsten Artikel zeigen wir Ihnen, wie Sie die Internetzeit auf ESP anzeigen können, ohne ein RTC-Modul zu verwenden.