Στο προηγούμενο σεμινάριο, έχουμε φτιάξει ρολόι RTC χρησιμοποιώντας DS3231 και ESP32. Για να ελαχιστοποιήσουμε τις απαιτήσεις υλικού, θα κάνουμε ρολόι Διαδικτύου χωρίς τη χρήση της μονάδας RTC. Αυτό είναι πιο ακριβές σε σύγκριση με το ρολόι RTC. Το ESP32 είναι μια λειτουργική μονάδα Wi-Fi και μπορεί εύκολα να συνδεθεί στο Διαδίκτυο, οπότε θα χρησιμοποιήσουμε το NTP (Network Time Protocol) και το UDP (User Datagram Protocol) για τη λήψη χρόνου από το Διαδίκτυο χρησιμοποιώντας Wi-Fi. Αυτό το ρολόι Διαδικτύου μπορεί να είναι πολύ χρήσιμο κατά τη δημιουργία έργων IoT.
Τι είναι το NTP;
Το Network Time Protocol (NTP) είναι ένα πρωτόκολλο δικτύωσης που χρησιμοποιείται για το συγχρονισμό του χρόνου μεταξύ των συστημάτων και των δικτύων δεδομένων. Το πλαίσιο NTP εξαρτάται από διακομιστές Ώρας Διαδικτύου. Το NTP έχει αλγόριθμους για την ακριβή προσαρμογή της ώρας της ημέρας. Οι διακομιστές NTP διαθέτουν λογισμικό που στέλνει την ώρα της ημέρας σε υπολογιστές-πελάτες χρησιμοποιώντας το UDPport 123. Έτσι, σε αυτό το έργο, παίρνουμε χρόνο από το διακομιστή NTP χρησιμοποιώντας ESP32 και το εμφανίζουμε στην οθόνη OLED.
Απαιτούμενα υλικά:
- ESP32
- Οθόνη OLED 128 * 64
- Ψωμί
- Σύρματα αρσενικού-θηλυκού
Διάγραμμα κυκλώματος:
Εδώ, χρησιμοποιούμε τη λειτουργία 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.
Θα χρησιμοποιήσουμε το Arduino IDE για να γράψουμε το πρόγραμμά μας όπως εξηγείται στο παραπάνω άρθρο.
Επεξήγηση κώδικα:
Ο πλήρης κωδικός για το ESP32 Internet Clock δίνεται στο τέλος του άρθρου. Εδώ εξηγούμε μερικά σημαντικά μέρη του κώδικα.
Χρειαζόμαστε πολλές βιβλιοθήκες για χρήση στον κώδικά μας, τις οποίες μπορείτε να κατεβάσετε από τους παρακάτω συνδέσμους:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. NTPClient:
5.WiFiUdp:
Έτσι έχουμε συμπεριλάβει όλες τις βιβλιοθήκες και καθορισμένη μεταβλητή για την εισαγωγή ονόματος και κωδικού πρόσβασης Wi-Fi.
#περιλαμβάνω
Εδώ χρησιμοποιείται η βιβλιοθήκη NTPClient.h για σύνδεση με το διακομιστή ώρας. Χρειάζεται χρόνος από έναν διακομιστή NTP και διατηρείται σε συγχρονισμό Η βιβλιοθήκη Hhre WiFiUdp.h χρησιμοποιείται για την αποστολή και λήψη μηνυμάτων UDP. Το UDP είναι ένα πρωτόκολλο που στέλνει και λαμβάνει σύντομα μηνύματα από το σύστημά μας στον διακομιστή NTP.
Για να πάρουμε το χρόνο από το Διαδίκτυο, πρέπει να καθορίσουμε τρεις μεταβλητές στο πρόγραμμά μας για το NTP.
NTP_OFFSET που είναι η ζώνη ώρας της χώρας σας, δηλαδή για την Ινδία είναι +5: 30 ώρα. Έτσι είναι 19800 σε δευτερόλεπτα.
NTP_INTERVAL που είναι το χρονικό διάστημα που λαμβάνεται από το NTP για ενημέρωση του χρόνου. Είναι 60-64 δευτερόλεπτα.
Το NTP_ADDRESS είναι ο διακομιστής NTP της χώρας σας. Για την Ινδία μπορείτε να χρησιμοποιήσετε το " in.pool.ntp.org ".
#define NTP_OFFSET 19800 // Σε δευτερόλεπτα #define NTP_INTERVAL 60 * 1000 // Σε χιλιοστά του δευτερολέπτου #define NTP_ADDRESS "1.asia.pool.ntp.org" WiFiUDP ntpUDP; NTPClient timeClient (ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
Κατά τη ρύθμιση Function, αρχικοποιήστε τις ρυθμίσεις Wi-Fi για σύνδεση με το διαδίκτυο
άκυρη ρύθμιση () { display.begin (); Serial.begin (9600); Serial.println (); Serial.println (); Serial.print ("Σύνδεση σε"); Serial.println (SSD); WiFi.begin (SSD, κωδικός πρόσβασης); ενώ (WiFi.status ()! = WL_CONNECTED) { καθυστέρηση (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi συνδεδεμένο."); Serial.println ("Διεύθυνση IP:"); Serial.println (WiFi.localIP ()); timeClient.begin ();
Στη συνέχεια, αρχικοποιήστε τις λειτουργίες εμφάνισης για να δείξετε χρόνο στο OLED
display.begin (SSD1306_SWITCHCAPVCC);
Στη συνάρτηση loop, χρησιμοποιήσαμε το timeClient.update (), αυτή η συνάρτηση παίρνει ενημερωμένο χρόνο από το NTP σε μορφή συμβολοσειράς και την αποθηκεύει σε μεταβλητή formattedTime . Στη συνέχεια, εμφανίστε το στο OLED χρησιμοποιώντας τη λειτουργία display.println () .
void loop () { timeClient.update (); String formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // ορίστε αυτές τις παραμέτρους σύμφωνα με τις ανάγκες σας.. display.setCursor (0, 0); display.println (formattedTime);
Το πλήρες πρόγραμμα δίνεται παρακάτω. Τώρα, τέλος, προγραμματίστε το ESP32 με το Arduino IDE και το ρολόι σας στο Internet είναι έτοιμο να δείξει χρόνο.