Πίνακας περιεχομένων:
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-13 06:57
Κάνε τον χρόνο σου να μετράει! Αυτό είναι ένα θέμα που συζητείται συχνά μεταξύ των συνδρομητών μου και για ποιο λόγο; Λόγω του απλού και απαραίτητου γεγονότος ότι όταν φτιάχνετε έναν καταγραφικό δεδομένων και για οτιδήποτε περιλαμβάνει αυτοματοποίηση, χρειάζεστε τον σωστό χρόνο! Και υπάρχουν διάφοροι τρόποι μέτρησης του χρόνου: ρολόι με μπαταρία, RTC (Ρολόι πραγματικού χρόνου), μεταξύ άλλων. Αλλά αυτό που θέλω να σας δείξω σήμερα (το οποίο ενημερώνει την ημερομηνία, την εβδομάδα και την ώρα) είναι το NTP (Network Time Protocol), το οποίο είναι online. Σε αυτό το βίντεο, θα ανακτήσουμε τις πληροφορίες ημερομηνίας και ώρας στο διαδίκτυο και θα εμφανίσουμε τις πληροφορίες στην οθόνη.
Βήμα 1: Επίδειξη
Βήμα 2: Συναρμολόγηση
Βήμα 3: Συναρμολόγηση - Πίνακας
Βήμα 4: Βιβλιοθήκη Adafruit GFX
Στο Arduino IDE, μεταβείτε στο Sketch-> Include Library-> Manage Libraries…
Εγκαταστήστε τη βιβλιοθήκη Adafruit GFX
Βήμα 5: Βιβλιοθήκη Adafruit ST7735
Στο Arduino IDE, μεταβείτε στο Sketch-> Include Library-> Manage Libraries…
Εγκαταστήστε το Adafruit ST7735
Βήμα 6: Βιβλιοθήκη NTPClient
Μεταβείτε στη διεύθυνση https://github.com/taranais/NTPClient και κάντε λήψη της τροποποιημένης με taranais βιβλιοθήκης NTPClient.
Αποσυμπιέστε και τοποθετήστε το φάκελο στις βιβλιοθήκες C: / Users / Documents / Arduino
Βήμα 7: ESP32_NTP.ino
Περιλαμβάνει και ορίζει
#include #include // Biblioteca NTPClient modificada #include // Socket UDP #include // Display #include // Display #include // Pinos do display #define DISPLAY_DC 12 // A0 #define DISPLAY_CS 13 // CS #define DISPLAY_MOSI 14 // SDA #define DISPLAY_CLK 27 // SCK #define DISPLAY_RST 0 // Fuso Horário, no caso horário de verão de Brasília int timeZone = -2; // Struct com os dados do dia e hora struct Ημερομηνία {int dayOfWeek; int ημέρα? int μήνα? int έτος? int ώρες? int λεπτά? int δευτερόλεπτα? }; // Υποδοχή UDP που χρησιμοποιεί μια υπηρεσία για την ανάκτηση του αρχείου σας μέσω WiFiUDP udp; // Objeto responsável for recuperar dados sobre horário NTPClient ntpClient (udp, // socket udp "0.br.pool.ntp.org", // URL do servwer NTP timeZone*3600, // Deslocamento do horário em relacão ao GMT 0 60000); // Intervalo entre verificações online // Nomes dos dias da semana char* dayOfWeekNames = {"Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο"}; // Objeto responsável pelo display Adafruit_ST7735 display = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLK, DISPLAY_RST);
Ρύθμιση
void setup () {Serial.begin (115200); setupDisplay (); connectWiFi (); setupNTP (); // Cria uma nova tarefa no core 0 xTaskCreatePinnedToCore (wifiConnectionTask, // Função que será executiveada "wifiConnectionTask", // Nome da tarefa 10000, // Tamanho da memória disponível (em WORDs) NULam parametre, N2l, // 2, // prioridade NULL, // Não precisamos de referência para a tarefa 0); // Número do core}
SetupNTP
void setupNTP () {// Inicializa ή client NTP ntpClient.begin (); // Espera pelo primeiro update online Serial.println ("Αναμονή για την πρώτη ενημέρωση"); while (! ntpClient.update ()) {Serial.print ("."); ntpClient.forceUpdate (); καθυστέρηση (500)? } Serial.println (); Serial.println ("Πρώτη ενημέρωση ολοκληρώθηκε"); }
WifiConnectionTask
// Tarefa que verifica se a conexão caiu e tenta reconectarvoid wifiConnectionTask (void* param) {while (true) {// Se a WiFi não está conectada if (WiFi.status ()! = WL_CONNECTED) {// Manda conectar connectWiFi (); } // Delay de 100 ticks vTaskDelay (100); }}
ConnectWiFi
void connectWiFi () {Serial.println ("Σύνδεση"); // Troque pelo nome e senha da sua rede WiFi WiFi.begin ("SSID", "12345678"); // Espera enquanto não estiver conectado while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); καθυστέρηση (500)? } Serial.println (); Serial.print ("Συνδέθηκε με"); Serial.println (WiFi. SSID ()); }
SetupDisplay
void setupDisplay () {display.initR (INITR_BLACKTAB); // Inicializa o display display.setRotation (3); // Rotaciona display.setTextSize (2); // Tamanho do texto display.fillScreen (ST77XX_BLACK); // Preenche com a cor preta display.setCursor (0, 0); // Coloca o cursor no começo display.setTextColor (ST77XX_WHITE, ST77XX_BLACK); // Texto branco com fundo preto display.setTextWrap (false); // Não pula linha automaticamente}
Βρόχος
void loop () {// Recupera os dados sobre a data e horário Date date = getDate (); // Reseta o cursor display.setCursor (0, 0); // Exibe os dados no display display.printf (" %s / n / n %s / n / n %02d/ %02d/ %d / n / n %02d: %02d: %02d", WiFi. SSID ().c_str (), dayOfWeekNames [date.dayOfWeek], date.day, date.month, date.year, date.hours, date.minutes, date.seconds)? καθυστέρηση (100)? }
GetDate
Ημερομηνία getDate () {// Recupera os dados de data and horário usando or client or NTP char* strDate = (char*) ntpClient.getFormattedDate (). C_str (); // Passa os dados da string para a struct Ημερομηνία; sscanf (strDate, "%d-%d-%dT%d:%d:%dZ", & date.year, & date.month, & date.day, & date.hours, & date.minutes, & date.seconds); // Dia da semana de 0 a 6, sendo 0 o domingo date.dayOfWeek = ntpClient.getDay (); ημερομηνία επιστροφής; }
Βήμα 8: Αρχεία
Κατεβάστε τα αρχεία
ΕΓΩ ΔΕΝ