- Τι είναι το RTC;
- Γνωριμία με τις οθόνες OLED:
- Απαιτούμενο υλικό:
- Διάγραμμα κυκλώματος:
- Επεξήγηση κώδικα:
Σε αυτό το σεμινάριο, θα μάθουμε για το Ρολόι πραγματικού χρόνου (RTC) και τη διασύνδεσή του με την οθόνη ESP32 και OLED.
Θα χρησιμοποιήσουμε τη μονάδα DS3231 RTC για να παρακολουθούμε τη σωστή ώρα και να την εμφανίζουμε στο SPI OLED χρησιμοποιώντας το ESP32 ως μικροελεγκτή μας. Το ESP32 είναι κάτι περισσότερο από μικροελεγκτή. Διαθέτει Wi-Fi και τσιπ Bluetooth και 39 καρφίτσες GPIO. Υποστηρίζει όλα τα πρωτόκολλα επικοινωνίας, όπως SPI, I2C, UART, κ.λπ. Εάν είστε νέοι στο ESP32, πρώτα ξεκινήστε το μάθημα Ξεκινώντας με το ESP32.
Τι είναι το RTC;
Το DS3231 είναι μια ενότητα RTC (Ρολόι πραγματικού χρόνου). Χρησιμοποιείται για τη διατήρηση της ημερομηνίας και της ώρας για τα περισσότερα από τα έργα Ηλεκτρονικής. Αυτή η μονάδα διαθέτει τη δική της τροφοδοσία κυψέλης νομισμάτων χρησιμοποιώντας την οποία διατηρεί την ημερομηνία και την ώρα ακόμα και όταν η κύρια τροφοδοσία αφαιρεθεί ή το MCU έχει περάσει από σκληρή επαναφορά. Έτσι, μόλις ορίσουμε την ημερομηνία και την ώρα σε αυτήν την ενότητα, θα την παρακολουθεί πάντα. Υπάρχουν διάφοροι τύποι RTC ICs διαθέσιμοι όπως DS1307, DS3231 κ.λπ.
Έχουμε χρησιμοποιήσει προηγουμένως DS3231 RTC με Arduino σε παρακάτω έργα:
- Αυτόματος τροφοδότης κατοικίδιων ζώων χρησιμοποιώντας το Arduino
- Καταγραφέας δεδομένων Arduino
Σημείωση: Όταν χρησιμοποιείτε αυτήν την ενότητα για πρώτη φορά, πρέπει να ορίσετε την ημερομηνία και την ώρα. Μπορείτε επίσης να χρησιμοποιήσετε το RTC IC DS1307, έχουμε προηγουμένως χρησιμοποιήσει το DS1307 με το Arduino.
Γνωριμία με τις οθόνες OLED:
Ο όρος OLED σημαίνει « Organic Light emitting diode» , χρησιμοποιεί την ίδια τεχνολογία που χρησιμοποιείται στις περισσότερες τηλεοράσεις μας, αλλά έχει λιγότερα pixel σε σύγκριση με αυτές. Είναι πραγματικά διασκεδαστικό να έχουμε αυτές τις εντυπωσιακές ενότητες εμφάνισης, καθώς θα κάνουν τα έργα μας να φαίνονται δροσερά. Εδώ έχουμε καλύψει ένα πλήρες άρθρο σχετικά με τις οθόνες OLED και τους τύπους του.
Χρησιμοποιούμε μια μονόχρωμη οθόνη 7 ιντσών SSD1306 0,96 ”OLED. Ο λόγος για την επιλογή αυτής της οθόνης είναι ότι μπορεί να λειτουργήσει σε τρία διαφορετικά πρωτόκολλα επικοινωνίας, όπως η λειτουργία WI SPI 3, η λειτουργία τεσσάρων καλωδίων SPI και η λειτουργία IIC. Αυτό το σεμινάριο θα καλύψει τον τρόπο χρήσης της μονάδας σε λειτουργία 4 συρμάτων SPI, καθώς είναι η ταχύτερη λειτουργία επικοινωνίας και η προεπιλεγμένη.
Οι καρφίτσες και οι λειτουργίες του εξηγούνται στον παρακάτω πίνακα.
Αριθμός Pin |
Όνομα καρφιτσώματος |
Αλλα ονόματα |
Χρήση |
1 |
Gnd |
Εδαφος |
Καρφίτσα γείωσης της μονάδας |
2 |
Vdd |
Vcc, 5V |
Τροφοδοτικό (3-5V ανεκτό) |
3 |
SCK |
D0, SCL, CLK |
Λειτουργεί ως καρφίτσα ρολογιού. Χρησιμοποιείται τόσο για I2C όσο και για SPI |
4 |
SDA |
D1, MOSI |
Καρφίτσα δεδομένων της ενότητας. Χρησιμοποιείται τόσο για IIC όσο και για SPI |
5 |
ΑΠΕ |
RST, ΕΠΑΝΑΦΟΡΑ |
Επαναφέρει τη μονάδα (χρήσιμο κατά τη διάρκεια SPI) |
6 |
DC |
Α0 |
Καρφίτσα εντολών δεδομένων. Χρησιμοποιείται για πρωτόκολλο SPI |
7 |
CS |
Επιλογή τσιπ |
Χρήσιμο όταν περισσότερες από μία λειτουργικές μονάδες χρησιμοποιούνται στο πρωτόκολλο SPI |
Σε αυτό το σεμινάριο θα λειτουργήσουμε απλώς τη μονάδα σε λειτουργία 4-Wire SPI, θα αφήσουμε τα υπόλοιπα για κάποιο άλλο σεμινάριο.
Η κοινότητα του Arduino μας έχει ήδη δώσει πολλές βιβλιοθήκες που μπορούν να χρησιμοποιηθούν άμεσα για να το κάνουν πολύ πιο απλό. Δοκίμασα μερικές βιβλιοθήκες και διαπίστωσα ότι η βιβλιοθήκη Adafruit_SSD1306 ήταν πολύ εύκολη στη χρήση και είχα μια χούφτα γραφικών επιλογών, επομένως θα χρησιμοποιήσουμε το ίδιο σε αυτό το σεμινάριο. Ωστόσο, εάν το έργο σας έχει περιορισμό μνήμης / ταχύτητας, δοκιμάστε να χρησιμοποιήσετε τη βιβλιοθήκη U8g καθώς λειτουργεί πιο γρήγορα και καταλαμβάνει λιγότερη μνήμη προγράμματος.
Έχουμε επίσης διασυνδέσει το OLED με το Raspberry pi και το Arduino.
Απαιτούμενο υλικό:
- ESP32
- Μονάδα DS3231 RTC
- Μονάδα οθόνης OLED 7 ακίδων 128 × 64 (SSD1306)
- Σύρματα αρσενικού-θηλυκού
- Ψωμί
Διάγραμμα κυκλώματος:
Το διάγραμμα κυκλώματος για τη σύνδεση του RTC3231 με την πλακέτα ESP δίνεται παρακάτω:
Το RTC DS3231 IC χρησιμοποιεί τρόπο επικοινωνίας I2C. Διαθέτει καρφίτσες SCL, SDA, Vcc και GND. Η σύνδεση της μονάδας RTC με ESP32 δίνεται παρακάτω:
- SCL του RTC -> SCL του ESP32 δηλ. Pin D22
- SDA του RTC -> SDA του ESP32 δηλ. Pin D21
- GND του RTC -> GND του ESP32
- Vcc του RTC -> Vcc του ESP32
Εδώ, χρησιμοποιούμε τη λειτουργία SPI για τη σύνδεση της μονάδας οθόνης OLED 128 × 64 (SSD1306) στο ESP32. Έτσι, θα χρησιμοποιεί 7 καρφίτσες. Οι συνδέσεις με το ESP32 δίνονται ως:
- CS (επιλογή τσιπ) OLED -> PIN D5 του ESP32
- DC pin OLED -> PIN D4 του ESP32
- RES καρφίτσα OLED -> PIN D2 ESP32
- Καρφίτσα SDA OLED -> PIN D23, δηλαδή MOSI ESP32
- Καρφίτσα SCK OLED -> PIN D18, δηλαδή SCK ESP32
- Vdd του OLED -> Vcc του ESP32
- GND OLED -> GND ESP32
Χρειάζεστε αρχεία πλακέτας για το ESP32 σας. Ανατρέξτε στο αναπτυσσόμενο μενού διαχειριστή του σκάφους του Arduino IDE για ESP32 dev kit. Εάν δεν υπάρχει, ακολουθήστε τα βήματα που δίνονται στον παρακάτω σύνδεσμο:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Μπορείτε επίσης να χρησιμοποιήσετε το ESP12 για αυτό το έργο, μάθετε εδώ να χρησιμοποιείτε το ESP12.
Επεξήγηση κώδικα:
Ο πλήρης κωδικός για το ESP32 δίνεται στο τέλος του άρθρου. Εδώ εξηγούμε μερικά σημαντικά μέρη του κώδικα.
Χρειαζόμαστε πολλές βιβλιοθήκες για χρήση στον κώδικά μας, τις οποίες μπορείτε να κατεβάσετε από τους παρακάτω συνδέσμους:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. RTClib:
Έχουμε συμπεριλάβει όλες τις βιβλιοθήκες
#περιλαμβάνω
Στη συνέχεια, ορίστε όλες τις καρφίτσες του OLED. Δεν χρειάζεται να ορίσετε καρφίτσες για μονάδα RTC επειδή αυτές οι ακίδες έχουν ήδη οριστεί στη βιβλιοθήκη WIRE.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2 Adafruit_SSD1306 οθόνη (OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Στη λειτουργία εγκατάστασης , θα καλέσουμε μια συνάρτηση rtc.adjust (DateTime (__ DATE__, __TIME__)) η οποία θα ορίσει την ώρα σύμφωνα με την ώρα του υπολογιστή μας.
άκυρη ρύθμιση () { Serial.begin (9600); if (! rtc.begin ()) { Serial.println ("Δεν ήταν δυνατή η εύρεση RTC"); ενώ (1) } rtc.adjust (DateTime (__ DATE__, __TIME__));
Μετά από αυτό καλούμε λειτουργίες οθόνης για εμφάνιση στο OLED.
display.begin (SSD1306_SWITCHCAPVCC); display.clearDisplay (); display.setTextColor (ΛΕΥΚΟ); //display.startscrollright(0x00, 0x0F); // Μπορείτε να αποσυμπιέσετε αυτήν τη γραμμή για να μετακινηθείτε στο κείμενό σας στο oled display.setTextSize (2); display.setCursor (0,5); display.print ("Ρολόι"); // Αυτό θα εμφανίσει το ρολόι στο OLED για 3 δευτερόλεπτα display.display (); καθυστέρηση (3000) }
Στη συνέχεια, τέλος στη λειτουργία βρόχου , θα αποθηκεύσουμε τον χρόνο μας στο DateTime τώρα προκαθορισμένη μεταβλητή και θα εμφανίσουμε την ώρα χρησιμοποιώντας λειτουργίες οθόνης όπως setTextSize, setCursor κ.λπ. Ρυθμίστε αυτές ανάλογα με τις ανάγκες σας και χρησιμοποιήστε τη λειτουργία display.println για εμφάνιση στο OLED.
void loop () { DateTime now = rtc.now (); display.clearDisplay (); display.setTextSize (2); display.setCursor (75,0); display.println (now.second (), DEC);
Έτσι μπορείτε να εμφανίζετε χρόνο στο OLED χρησιμοποιώντας ESP32 και όπως γνωρίζετε ότι το ESP είναι γνωστό για τις δυνατότητές του IoT, οπότε μπορείτε να το χρησιμοποιήσετε για να δημοσιεύσετε την ώρα στο Διαδίκτυο. Στο επόμενο άρθρο θα σας δείξουμε να προβάλλετε Ώρα Διαδικτύου σε ESP χωρίς να χρησιμοποιήσετε καμία Ενότητα RTC.