Πίνακας περιεχομένων:

Internet Clock: Εμφάνιση ημερομηνίας και ώρας με OLED χρησιμοποιώντας ESP8266 NodeMCU με πρωτόκολλο NTP: 6 βήματα
Internet Clock: Εμφάνιση ημερομηνίας και ώρας με OLED χρησιμοποιώντας ESP8266 NodeMCU με πρωτόκολλο NTP: 6 βήματα

Βίντεο: Internet Clock: Εμφάνιση ημερομηνίας και ώρας με OLED χρησιμοποιώντας ESP8266 NodeMCU με πρωτόκολλο NTP: 6 βήματα

Βίντεο: Internet Clock: Εμφάνιση ημερομηνίας και ώρας με OLED χρησιμοποιώντας ESP8266 NodeMCU με πρωτόκολλο NTP: 6 βήματα
Βίντεο: Tasmota #06 | SSD1306 Display | Show Sensor data with Displaytext and rules 2024, Ιούλιος
Anonim
Internet Clock: Εμφάνιση ημερομηνίας και ώρας με OLED χρησιμοποιώντας ESP8266 NodeMCU με πρωτόκολλο NTP
Internet Clock: Εμφάνιση ημερομηνίας και ώρας με OLED χρησιμοποιώντας ESP8266 NodeMCU με πρωτόκολλο NTP

Γεια σας παιδιά σε αυτά τα εκπαιδευτικά θα δημιουργήσουμε ένα ρολόι διαδικτύου το οποίο θα παίρνει χρόνο από το διαδίκτυο, οπότε αυτό το έργο δεν θα χρειαστεί κανένα RTC για να τρέξει, θα χρειαστεί μόνο μια λειτουργική σύνδεση στο Διαδίκτυο

Και για αυτό το έργο χρειάζεστε ένα esp8266 το οποίο θα έχει wifi για πρόσβαση στο διαδίκτυο και μια οθόνη για να εμφανίζει την ώρα σε αυτό και το esp8266 θα αντλεί χρόνο από το διαδίκτυο χρησιμοποιώντας πρωτόκολλο NTP, το ntp σημαίνει πρωτόκολλο χρόνου δικτύου, οπότε βασικά υπάρχουν διακομιστές ntp στο διαδίκτυο που χρησιμοποιούνται για συγχρονισμό ρολογιών υπολογιστών και θα χρησιμοποιήσουμε αυτούς τους διακομιστές για να έχουμε χρόνο στο έργο μας.

Βήμα 1: Πράγματα που χρειάζεστε

Πράγματα που χρειάζεστε
Πράγματα που χρειάζεστε
Πράγματα που χρειάζεστε
Πράγματα που χρειάζεστε
Πράγματα που χρειάζεστε
Πράγματα που χρειάζεστε

για αυτό το έργο θα χρειαστείτε τα ακόλουθα πράγματα:

Esp8266/nodemcu

Oled ssd1306 0,96"

Καλώδια βραχυκυκλωτήρων

Breadboard

Καλώδιο USB

Βήμα 2: Συνδέσεις

Συνδέσεις
Συνδέσεις

Αυτή η οθόνη 4 ακίδων OLED επικοινωνεί με τη μονάδα ESP8266 χρησιμοποιώντας το πρωτόκολλο I2C, παρακάτω είναι το διάγραμμα κυκλώματος και ο πίνακας συνδέσεων για τη σύνδεση των ακίδων OLED I2C με το NodeMCU για την εμφάνιση του χρόνου Internet.

Βήμα 3: Λήψη Βιβλιοθηκών

Λήψη Βιβλιοθηκών
Λήψη Βιβλιοθηκών
Λήψη Βιβλιοθηκών
Λήψη Βιβλιοθηκών

Βεβαιωθείτε ότι έχετε κατεβάσει τις βιβλιοθήκες SD1306 στο Arduino ide σας, όπως φαίνεται στην εικόνα και βεβαιωθείτε ότι έχετε και τη βιβλιοθήκη Adafruit GFX, αν όχι, τότε εγκαταστήστε αυτές τις δύο βιβλιοθήκες.

Στο Arduino IDE, μεταβείτε στον Διαχειριστή Βιβλιοθηκών και αναζητήστε το NTP και απλώς κατεβάστε τη βιβλιοθήκη του προγράμματος -πελάτη NTP όπως το κατέβασα, ανατρέξτε στην εικόνα για περαιτέρω βοήθεια.

Βήμα 4: Τι είναι το NTP

Τι είναι το NTP
Τι είναι το NTP

Το NTP είναι ένα από τα παλαιότερα πρωτόκολλα δικτύου (IP) για συγχρονισμό ρολογιών μεταξύ δικτύων υπολογιστών. Σχεδιάστηκε από τον David L. Mills του Πανεπιστημίου του Delaware το 1981. Αυτό το πρωτόκολλο μπορεί να χρησιμοποιηθεί για συγχρονισμό πολλών δικτύων με τον συντονισμένο καθολικό χρόνο (UTC) μέσα σε λίγα χιλιοστά του δευτερολέπτου. Το UTC είναι το κύριο πρότυπο ώρας με το οποίο ο κόσμος ρυθμίζει το ρολόι και την ώρα. Το UTC δεν αλλάζει και διαφέρει για διαφορετικές γεωγραφικές τοποθεσίες. Το NTP χρησιμοποιεί το UTC ως αναφορά ώρας και παρέχει ακριβή και συγχρονισμένο χρόνο στο Διαδίκτυο.

Το NTP λειτουργεί σε ένα ιεραρχικό μοντέλο πελάτη-διακομιστή. Το κορυφαίο μοντέλο διαθέτει ρολόγια αναφοράς γνωστά ως "stratum0" όπως ατομικά ρολόγια, ραδιοκύματα, GPS, GSM που λαμβάνει χρόνο από τον δορυφόρο. Οι διακομιστές που λαμβάνουν χρόνο από το στρώμα0 ονομάζονται "στρώμα1" και οι διακομιστές που λαμβάνουν χρόνο από το στρώμα 1 ονομάζονται "στρώμα2" και ούτω καθεξής. Αυτό συνεχίζεται και η ακρίβεια του χρόνου συνεχίζει να μειώνεται μετά από κάθε στάδιο. Το NTP επιλέγει αυτόματα την καλύτερη από πολλές διαθέσιμες πηγές χρόνου για συγχρονισμό, γεγονός που το καθιστά ανεκτό σε σφάλματα ικανό πρωτόκολλο. Έτσι εδώ σε αυτό το έργο, παίρνουμε χρόνο από τον διακομιστή NTP χρησιμοποιώντας το ESP8266 NodeMCU και το εμφανίζουμε σε οθόνη OLED. Αυτό το ίδιο είδος ρολογιού Internet δημιουργείται χρησιμοποιώντας το ESP32 στο προηγούμενο σεμινάριο.

Βήμα 5: Μέρος κωδικοποίησης

Κωδικοποιητικό Μέρος
Κωδικοποιητικό Μέρος

Για να ζητήσετε ημερομηνία και ώρα, προετοιμάστε τον πελάτη ώρας με τη διεύθυνση των διακομιστών NTP. Για καλύτερη ακρίβεια, επιλέξτε τη διεύθυνση των διακομιστών NTP που βρίσκονται κοντά στη γεωγραφική σας περιοχή. Εδώ χρησιμοποιούμε το "pool.ntp.org" το οποίο παρέχει διακομιστές από όλο τον κόσμο. Εάν επιθυμείτε να επιλέξετε διακομιστές από την Ασία, μπορείτε να χρησιμοποιήσετε το "asia.pool.ntp.org". Το timeClient μετατοπίζει επίσης το χρόνο UTC σε χιλιοστά του δευτερολέπτου της ζώνης ώρας σας. Για παράδειγμα, η μετατόπιση UTC για την Ινδία είναι +5: 30, οπότε μετατρέπουμε αυτήν την αντιστάθμιση σε χιλιοστά του δευτερολέπτου που είναι ίση με 5*60*60 +30*60 = 19800.

Περιοχή. Μετατόπιση ώρας UTC (ώρες και λεπτά). Μετατόπιση χρόνου UTC (δευτερόλεπτα)

ΙΝΔΙΑ +5: 30 19800

ΛΟΝΔΙΝΟ 0:00. 0

ΝΕΑ ΥΟΡΚΗ -5: 00 -18000

Αντιγράψτε τον ακόλουθο κώδικα και εισαγάγετε τον κωδικό πρόσβασης wifi και τον κωδικό πρόσβασής σας & Εισαγάγετε τη μετατόπιση ώρας στον κώδικα και, στη συνέχεια, ανεβάστε τον στους πίνακες esp8266.:

#include "NTPClient.h" #include "ESP8266WiFi.h" // παρέχει ESP8266 συγκεκριμένες ρουτίνες Wi-Fi που καλούμε να συνδεθούν στο δίκτυο #συμπεριλάβετε "WiFiUdp.h" // χειρίζεται την αποστολή και λήψη πακέτων UDP

#include "SPI.h" // SPI για διασύνδεση OLED με NodeMCu

#include "Adafruit_GFX.h"

#include "Adafruit_SSD1306.h"

#define SCREEN_WIDTH 128 // OLED πλάτος οθόνης, σε pixel

#define SCREEN_HEIGHT 64 // heightψος οθόνης OLED, σε pixel

#define OLED_RESET -1

Οθόνη Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, & Wire, OLED_RESET);

constchar *ssid = "yourwifissid";

const char *password = "yourwifipass";

WiFiUDP ntpUDP;

NTPClient timeClient (ntpUDP, "pool.ntp.org", 19800, 60000);

String arr_days = {"Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο"};

Συμβολοσειρά date_time; // Μπορείτε να καθορίσετε την ομάδα διακομιστή ώρας και την αντιστάθμιση (σε δευτερόλεπτα, μπορεί να // αλλάξει αργότερα με το setTimeOffset ()). Επιπλέον, μπορείτε να καθορίσετε το διάστημα ενημέρωσης // (σε χιλιοστά του δευτερολέπτου, μπορεί να αλλάξει χρησιμοποιώντας το setUpdateInterval ()).

void setup ()

{

Serial.begin (115200);

WiFi.begin (ssid, κωδικός πρόσβασης);

ενώ (WiFi.status ()! = WL_CONNECTED)

{

καθυστέρηση (500)?

Serial.print (".");

}

εάν (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C))

{

Serial.println (F ("Η κατανομή SSD1306 απέτυχε"));

Για(;;); // Μην προχωράς, κάνε βρόχο για πάντα

}

display.clearDisplay ();

display.setTextSize (2); // Σχεδιάστε κείμενο σε κλίμακα 2Χ

display.setTextColor (ΛΕΥΚΟ);

display.setCursor (5, 2);

display.println ("ΚΑΛΩΣ ΗΡΘΑΤΕ");

display.println ("Εκπαιδευτικά");

display.println ("Έργο");

display.display ();

καθυστέρηση (3000)?

timeClient.begin ();

}

κενός βρόχος ()

{

timeClient.update ();

display.clearDisplay ();

Serial.println (timeClient.getFormattedTime ());

display.setTextSize (2); // Σχεδιάστε κείμενο σε κλίμακα 2Χ

display.setTextColor (ΜΠΛΕ);

display.setCursor (0, 2);

int hh = timeClient.getHours ();

int mm = timeClient.getMinutes ();

int ss = timeClient.getSeconds ();

αν (ωω> 12)

{

hh = hh-12;

display.print (hh);

display.print (":");

display.print (mm);

display.print (":");

display.print (ss);

display.println ("PM");

}

αλλού

{

display.print (hh);

display.print (":");

display.print (mm).

display.print (":");

display.print (ss);

display.println ("ΠΜ");

}

int day = timeClient.getDay ();

display.println ("'"+arr_days [day]+"'");

date_time = timeClient.getFormattedDate ();

int index_date = date_time.indexOf ("T");

String date = date_time.substring (0, index_date);

Serial.println (ημερομηνία);

display.println (ημερομηνία);

display.display ();

// Εμφάνιση αρχικού κειμένου}

Βήμα 6: Λήψη ημερομηνίας και ώρας

Λήψη ημερομηνίας και ώρας
Λήψη ημερομηνίας και ώρας

αν έχετε συνδέσει τα πάντα σωστά και έχετε ανεβάσει σωστά τον κώδικα επίσης, τότε θα μπορείτε να βλέπετε το ρολόι ntp σας να λειτουργεί σε oled οθόνη όπως το δικό μου σε λειτουργία στην oled οθόνη. Ανατρέξτε στην εικόνα για έξοδο.

Συνιστάται: