Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
Faceți-vă timpul să conteze! Acesta este un subiect frecvent discutat în rândul abonaților mei și din ce motiv? Datorită faptului simplu și indispensabil că atunci când creați un datalogger și pentru tot ceea ce implică automatizarea, aveți nevoie de ora corectă! Și există mai multe moduri de măsurare a timpului: ceas cu baterie, RTC (Real Time Clock), printre altele. Dar cel pe care vreau să vi-l arăt astăzi (care informează data, ziua săptămânii și ora) este NTP (Network Time Protocol), care este online. În acest videoclip, vom prelua informațiile despre dată și oră online și vom afișa informațiile pe ecran.
Pasul 1: demonstrație
Pasul 2: Asamblare
Pasul 3: Asamblare - Tabel
Pasul 4: Biblioteca Adafruit GFX
În IDE-ul Arduino, accesați Schiță-> Includeți bibliotecă-> Gestionați bibliotecile …
Instalați Biblioteca Adafruit GFX
Pasul 5: Biblioteca Adafruit ST7735
În IDE-ul Arduino, accesați Schiță-> Includeți bibliotecă-> Gestionați bibliotecile …
Instalați Adafruit ST7735
Pasul 6: Biblioteca NTPClient
Accesați https://github.com/taranais/NTPClient și descărcați biblioteca NTPClient modificată de taranais.
Dezarhivați și puneți folderul în bibliotecile C: / Users / Documents / Arduino
Pasul 7: ESP32_NTP.ino
Include și definește
#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 Date {int dayOfWeek; zi int; int luna; int an; orele int; minute int; secunde int; }; // Socket UDP care a lib utilizează pentru a recupera date despre orar WiFiUDP udp; // Obiecțiunea de recuperare a datelor recuperate asupra orarului NTPClient ntpClient (udp, // socket udp "0.br.pool.ntp.org", // URL servire NTP timeZone * 3600, // Deslocamento do horario in relacão ao GMT 0 60000); // Intervalo între verificări online // Nomes dos dias da semana char * dayOfWeekNames = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; // Objeto responsável pelo display Adafruit_ST7735 display = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLK, DISPLAY_RST);
Înființat
void setup () {Serial.begin (115200); setupDisplay (); connectWiFi (); setupNTP (); // Cria uma nova tarefa no core 0 xTaskCreatePinnedToCore (wifiConnectionTask, // Funcția care va fi executată "wifiConnectionTask", // Numele da tarefa 10000, // Tamanho da memória disponível (em WORDs) NULL, // Não vamos passar nenhum parametro 2, // prioritate NULL, // Não precisamos de referência para a tarefa 0); // Número do core}
SetupNTP
void setupNTP () {// Inicializa o client NTP ntpClient.begin (); // Espera pelo primul update online Serial.println ("Se așteaptă prima actualizare"); while (! ntpClient.update ()) {Serial.print ("."); ntpClient.forceUpdate (); întârziere (500); } Serial.println (); Serial.println („Prima actualizare finalizată”); }
WifiConnectionTask
// Tarefa care verifica se a conexiune caiu e tenta reconectarvoid wifiConnectionTask (void * param) {while (true) {// Se a WiFi não está conectada if (WiFi.status ()! = WL_CONNECTED) {// Manda conectar connectWiFi (); } // Întârziere de 100 de căpușe vTaskDelay (100); }}
ConnectWiFi
void connectWiFi () {Serial.println ("Conectare"); // 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 ("."); întârziere (500); } Serial.println (); Serial.print („Conectat la”); 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 automat}
Buclă
void loop () {// Recupera os dados sobre a data e horário Date date = getDate (); // Resetați cursorul 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); întârziere (100); }
GetDate
Date getDate () {// Recupera os dados de data e horario folosind clientul NTP char * strDate = (char *) ntpClient.getFormattedDate (). C_str (); // Passa os dados da string para a struct Date date; 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 (); data returului; }
Pasul 8: Fișiere
Descărcați fișierele
EU NU