Όταν δημιουργείτε ένα έργο IoT που εξαρτάται από την ώρα της ημέρας, θέλετε να δείχνει τη σωστή ώρα χωρίς να χρειάζεται χειροκίνητες προσαρμογές. Φαίνεται ότι αυτό θα ήταν εύκολο να επιτευχθεί με το ESP32, καθώς έχει ενσωματωμένη ασύρματη σύνδεση και μπορεί να συνδεθεί στο Διαδίκτυο.
Ωστόσο, ενώ υπάρχουν πολλά διαδικτυακά παραδείγματα που δείχνουν πώς να ρυθμίσετε τις παραμέτρους του ESP32 για να συνδεθείτε στο Διαδίκτυο και να συγχρονίσετε την ώρα με μια ώρα διακομιστή, οι περισσότεροι από αυτούς απαιτούν από εσάς να προσαρμόζετε τη θερινή ώρα χειροκίνητα δύο φορές το χρόνο, κάτι που φαίνεται πολύ γελοίο για κάθε ηλεκτρονικό του 21ου αιώνα συσκευή.
Εδώ θα σας παρουσιάσουμε μια λύση που θα επιτρέψει στο ESP32 να δείχνει τη σωστή ώρα, για οποιοδήποτε μέρος του κόσμου, όλο το χρόνο. Αλλά πρώτα, ας ρίξουμε μια ματιά στο παράδειγμα SimpleTime στο Arduino IDE και ας δούμε τι κάνει και πώς μπορούμε να το βελτιώσουμε.
Το Παράδειγμα SimpleTime
Εάν χρησιμοποιείτε το Arduino IDE με το ESP32, θα διαπιστώσετε ότι έχει ένα παράδειγμα που ονομάζεται SimpleTime που μοιάζει με αυτό:
Μπορείτε να αποκτήσετε πρόσβαση σε αυτό το παράδειγμα διαμορφώνοντας το Arduino IDE ώστε να χρησιμοποιεί μια πλακέτα ESP32, από το Εργαλεία μενού, όπως επιλέγοντας το ESP32 Dev Module. Αφού το κάνετε, μπορείτε να αποκτήσετε πρόσβαση στο παράδειγμα SimpleTime από το Εργαλεία μενού κάτω Παραδείγματα,ESP32,Χρόνος, και Απλός Χρόνος.
Θα περίμενε κανείς ότι αυτό το επίσημο παράδειγμα θα δείξει τον καλύτερο τρόπο να κάνεις πράγματα, αλλά υπάρχει ένα τεράστιο πρόβλημα σε αυτό το παράδειγμα. Για να διαμορφώσετε τη ζώνη ώρας και τη θερινή ώρα, πρέπει να αλλάξετε τις ακόλουθες δύο γραμμές:
const long gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;
Ρύθμιση της ζώνης ώρας χρησιμοποιώντας gmtOffset_sec δεν είναι βολικό επειδή πρέπει να βρείτε τη μετατόπιση GMT για τη συγκεκριμένη τοποθεσία σας. Μπορείτε να το κάνετε αυτό συμβουλευόμενοι το Ιστοσελίδα της ώρας Γκρίνουιτς. Ευτυχώς, χρειάζεται να το κάνετε μόνο μία φορά. ο daylightOffset_sec παρουσιάζει μεγαλύτερο πρόβλημα, ωστόσο, γιατί πρέπει να το προσαρμόζετε δύο φορές το χρόνο. Αυτό μπορεί να σας ζητήσει να καταργήσετε το έργο σας και να το συνδέσετε στο Arduino IDE δύο φορές το χρόνο, καθιστώντας το εντελώς ακατάλληλο για ένα έργο IoT που θέλετε να ρυθμίσετε και να ξεχάσετε.
Ψάχνετε για μια καλύτερη προσέγγιση
Ποιος θα ήταν λοιπόν καλύτερος τρόπος για να διαμορφώσετε τη ζώνη ώρας και τη θερινή ώρα; Για να απαντήσετε σε αυτήν την ερώτηση, μην ψάξετε περισσότερο από το πώς χειρίζεται την κατάσταση ο υπολογιστής σας με Windows:
Παρατηρήστε πώς αντί να χρειάζεται να του δίνουμε αντισταθμίσεις ώρας από το GMT, λέμε στα Windows ποια είναι η ζώνη ώρας και η τοποθεσία μας—στην περίπτωσή μας Ορεινή ώρα (ΗΠΑ & Καναδάς)—και, στη συνέχεια, επιλέξτε το πλαίσιο ελέγχου Αυτόματη προσαρμογή του ρολογιού για τη θερινή ώρα. Από εκείνο το σημείο και μετά, τα Windows το χειρίζονται αυτόματα για εμάς όλο το χρόνο. Αυτό είναι το είδος της ευκολίας που θέλουμε από το ESP32 μας.
Σχετίζεται με: Πώς να προσαρμόσετε το ρολόι του δίσκου συστήματος στα Windows
Δημιουργία βάσης δεδομένων τοποθεσίας για το ESP32
Το να κάνετε το ίδιο πράγμα στο ESP32 απαιτεί κάποιο legwork. ξεκινήσαμε με ένα ανάρτηση που περιέγραφε πώς να ρυθμίσετε τη ζώνη ώρας χρησιμοποιώντας τη μεταβλητή περιβάλλοντος TZ. Για την τοποθεσία μας, έτυχε να είναι MST7MDT, M3.2.0, M11.1.0, σύμφωνα με αυτό πίνακας ζώνης ώρας. Αν και αυτό έλυσε το πρόβλημα της μη αυτόματης προσαρμογής για τη θερινή ώρα, θέλαμε η διαδικασία να είναι πιο απλή, χωρίς να χρειάζεται να αναζητήσετε μια σειρά αριθμών και γραμμάτων για το καθένα τοποθεσία.
Μετατρέψαμε τα δεδομένα από τον ιστότοπο σε μια βάση δεδομένων που μπορείτε να χρησιμοποιήσετε απευθείας από τα σκίτσα σας στο Arduino. Ακολουθηστε αυτός ο σύνδεσμος για να κατεβάσετε απευθείας ένα αρχείο zip με το σκίτσο του Arduino.
Η ίδια η βάση δεδομένων αποθηκεύεται στο αρχείο time_zone.h. Χρησιμοποιώντας τη βάση δεδομένων, ο κώδικας για το SimpleTime μοιάζει με αυτό:
Έχουμε επισημάνει τις τροποποιήσεις στο παράδειγμα SimpleTime με κίτρινο χρώμα. Αυτή η γραμμή θα επιτρέψει στο σκίτσο να χρησιμοποιήσει τη βάση δεδομένων:
#include "time_zones.h"
Αυτή η γραμμή διαμορφώνει την τοποθεσία σας:
const char* location = "America/Denver";
Υπάρχουν 461 πιθανές τοποθεσίες. Μπορείτε να βρείτε τις διαθέσιμες τοποθεσίες ρίχνοντας μια ματιά στο time_zone.h αρχείο ή κοιτάζοντας την καταχώριση ζώνης ώρας στο αυτόν τον ιστότοπο.
Τέλος, η ακόλουθη γραμμή λέει στο ESP32 να συγχρονίσει την ώρα με έναν διακομιστή Διαδικτύου χρησιμοποιώντας το Πρωτόκολλο ώρας δικτύου (NTP):
configTimeWithTz (getTzByLocation (τοποθεσία), ntpServer);
Ο συγκεκριμένος διακομιστής ώρας Διαδικτύου μπορεί να ρυθμιστεί χρησιμοποιώντας την ακόλουθη γραμμή, αν και η προεπιλογή θα λειτουργεί καλά για εσάς:
const char* ntpServer = "pool.ntp.org";
Θέλετε επίσης να βεβαιωθείτε ότι έχετε προσθέσει τις πληροφορίες για το σημείο ασύρματης πρόσβασης στις ακόλουθες δύο γραμμές:
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASS";
Αντικαθιστώ YOUR_SSID με το όνομα του ασύρματου δικτύου σας και YOUR_PASS με τον κωδικό πρόσβασης που χρησιμοποιήθηκε για τη σύνδεση σε αυτό.
Σχετίζεται με: Τρόποι για την ασφαλή διαμόρφωση ενός ασύρματου δρομολογητή ως δημόσιου σημείου πρόσβασης
Τελειώνω
Αφού ολοκληρώσετε τα βήματα διαμόρφωσης, ανεβάστε το σκίτσο στο ESP32 και θα χρησιμοποιήσει τη σωστή ώρα όλο το χρόνο χωρίς καμία παρέμβαση!
Αν και αυτός ο κώδικας σας δίνει ένα καλό σημείο εκκίνησης, υπάρχουν πιο φιλικοί προς το χρήστη τρόποι για να επιτύχετε το ίδιο πράγμα. Για παράδειγμα, μπορεί να θέλετε να επιτρέψετε στον χρήστη να διαμορφώσει τα πάντα από μια ιστοσελίδα αντί να τα κάνει κατά τη στιγμή της μεταγλώττισης. Κάνοντας αυτό είναι πολύ περισσότερη δουλειά, καθώς θα χρειαστεί να κάνετε τα ακόλουθα πράγματα στο σκίτσο του Arduino:
- Διαμορφώστε το ESP32 ως σημείο ασύρματης πρόσβασης για την αρχική διαμόρφωση
- Εκκινήστε έναν διακομιστή web για να παρουσιάσετε στον χρήστη μια σελίδα διαμόρφωσης
- Δημιουργήστε μια φόρμα HTML για να επιτρέψετε στον χρήστη να εισαγάγει τις πληροφορίες ασύρματου δικτύου και να επιλέξει την τοποθεσία του
- Δημιουργήστε τον κώδικα για να επεξεργαστείτε τις επιλογές του χρήστη και να τον αποθηκεύσετε σε μη πτητική μνήμη
- Κατά την ενεργοποίηση της πλακέτας:
- Διαβάστε τη διαμόρφωση από μη πτητική μνήμη
- Συνδεθείτε στο ασύρματο δίκτυο και συγχρονίστε την ώρα
Ένα έργο που δείχνει αυτά τα βήματα είναι το ESP32 Ρολόι Dali. Ήταν αυτό το έργο που μας οδήγησε να βρούμε έναν καλύτερο τρόπο για να κάνουμε συγχρονισμό χρόνου στο ESP32.
Ελέγξτε το πηγαίος κώδικας για το ESP32 Dali Clock για να δείτε πώς να εμφανίσετε μια πλήρης σελίδα διαμόρφωσης web. Η σελίδα διαμόρφωσης εμφανίζει ένα αναπτυσσόμενο μενού που επιτρέπει στον χρήστη να επιλέξει την τοποθεσία και τη ζώνη ώρας του και επιτρέπει επίσης στον χρήστη να ορίζει την ώρα χειροκίνητα χρησιμοποιώντας ένα γραφικό στοιχείο ώρας και ημερολογίου, για μη συνδεδεμένο εναλλακτική λύση!
Συγχρονισμός χρόνου δικτύου βάσει τοποθεσίας στο ESP32
Τώρα έχετε όλες τις πληροφορίες που χρειάζεστε για να μπορείτε να ρυθμίσετε αυτόματα το ρολόι του ESP32 στη σωστή ώρα και επίσης να το προσαρμόσετε για τη θερινή ώρα. Αυτό είναι τέλειο για έργα IoT που δεν θέλετε να χρειαστεί να προσαρμόσετε χειροκίνητα.
Αν ψάχνετε για ενδιαφέροντα έργα με το ESP32, βρίσκεστε στο σωστό μέρος.
Διαβάστε Επόμενο
- DIY
- ESP32
- το διαδίκτυο των πραγμάτων
Είμαι κατασκευαστής με ιδιαίτερο ενδιαφέρον για λογισμικό ανοιχτού κώδικα, ηλεκτρονικά είδη, τρισδιάστατη εκτύπωση, γραφικά υπολογιστών και ρετρό υπολογιστές.
Εγγραφείτε στο ενημερωτικό μας δελτίο
Εγγραφείτε στο ενημερωτικό μας δελτίο για συμβουλές τεχνολογίας, κριτικές, δωρεάν ebook και αποκλειστικές προσφορές!
Κάντε κλικ εδώ για να εγγραφείτε