Turinys:
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-13 06:57
Skaičiuok savo laiką! Tai dažnai aptariama tema tarp mano prenumeratorių ir dėl kokios priežasties? Dėl paprasto ir būtino fakto, kad kurdami duomenų registratorių ir viską, kas susiję su automatizavimu, jums reikia tinkamo laiko! Ir yra keli laiko matavimo būdai: laikrodis su baterija, RTC (realaus laiko laikrodis) ir kt. Tačiau tą, kurį šiandien noriu jums parodyti (nurodo datą, savaitės dieną ir laiką), yra NTP (tinklo laiko protokolas), kuris yra internete. Šiame vaizdo įraše mes nuskaitysime datos ir laiko informaciją internete ir parodysime informaciją ekrane.
1 žingsnis: demonstracija
2 žingsnis: Surinkimas
3 žingsnis: Surinkimas - stalas
4 žingsnis: „Adafruit GFX“biblioteka
„Arduino IDE“eikite į Eskizas-> Įtraukti biblioteką-> Tvarkyti bibliotekas …
Įdiekite „Adafruit GFX“biblioteką
5 veiksmas: „Adafruit ST7735“biblioteka
„Arduino IDE“eikite į Eskizas-> Įtraukti biblioteką-> Tvarkyti bibliotekas …
Įdiekite „Adafruit ST7735“
6 veiksmas: NTPClient biblioteka
Eikite į https://github.com/taranais/NTPClient ir atsisiųskite taranais pakeistą NTPClient biblioteką.
Išpakuokite ir įdėkite aplanką į C: / Users / Documents / Arduino / bibliotekas
7 veiksmas: ESP32_NTP.ino
Apima ir apibrėžia
#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 structure“Data {int dayOfWeek; int diena; int mėnuo; int metai; int valandos; int minutes; int sekundės; }; // Socket UDP que a lib utiliza para recuperar dados sobre o horário WiFiUDP udp; // Objekto atsakas į rekuperatorių, kad būtų galima valdyti NTPClient ntpClient (udp, // socket udp "0.br.pool.ntp.org", // URL serverio 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 = {"Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis"}; // Objektinis atsakas į pelės ekraną Adafruit_ST7735 ekranas = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLK, DISPLAY_RST);
Sąranka
void setup () {Serial.begin (115200); setupDisplay (); connectWiFi (); setupNTP (); // Cria uma nova tarefa no core 0 xTaskCreatePinnedToCore (wifiConnectionTask, // Função que será executab "wifiConnectionTask", // Nome da tarefa 10000, // Tamanho da memória disponível (em WORDs) NULL, // Não vamos pass, // prioridade NULL, // Não precisamos de referência para a tarefa 0); // Número do core}
SąrankaNTP
void setupNTP () {// Inicializa arba kliento NTP ntpClient.begin (); // Espera pelo primeiro update online Serial.println ("Laukiama pirmojo atnaujinimo"); while (! ntpClient.update ()) {Serial.print ("."); ntpClient.forceUpdate (); vėlavimas (500); } Serial.println (); Serial.println („Pirmasis atnaujinimas baigtas“); }
„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 erkių vTaskDelay (100); }}
„ConnectWiFi“
void connectWiFi () {Serial.println („Prisijungimas“); // 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 ("."); vėlavimas (500); } Serial.println (); Serial.print ("Prisijungta"); 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); // Spalva arba žymeklis be ekrano. SetTextColor (ST77XX_WHITE, ST77XX_BLACK); // Texto branco com fundo preto display.setTextWrap (false); // Não pula linha automaticamente}
Kilpa
void loop () {// Recupera os dados sobre a data e horário Date date = getDate (); // Atstatyti arba žymeklio rodymą.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); vėlavimas (100); }
„GetDate“
Data getDate () {// Atkurti duomenis iš duomenų ir išnaudoti kliento NTP char* strDate = (char*) ntpClient.getFormattedDate (). C_str (); // Passa os dados da string para a structure 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 (); grįžimo data; }
8 žingsnis: failai
Atsisiųskite failus
AŠ NE