Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Naj se vaš čas šteje! To je tema, o kateri moji naročniki pogosto razpravljajo, in iz katerega razloga? Zaradi preprostega in nepogrešljivega dejstva, da pri izdelavi zapisovalnika podatkov in za vse, kar vključuje avtomatizacijo, potrebujete pravilen čas! Obstaja več načinov za merjenje časa: ura z baterijo, RTC (ura realnega časa), med drugim. Toda tisti, ki vam ga želim pokazati danes (ki obvešča datum, dan v tednu in čas), je NTP (Network Time Protocol), ki je na spletu. V tem videoposnetku bomo na spletu pridobili podatke o datumu in času ter podatke prikazali na zaslonu.
1. korak: demonstracija
2. korak: Montaža
3. korak: Montaža - miza
4. korak: Knjižnica Adafruit GFX
V Arduino IDE pojdite na Sketch-> Include Library-> Manage Libraries …
Namestite knjižnico Adafruit GFX
5. korak: Knjižnica Adafruit ST7735
V Arduino IDE pojdite na Sketch-> Include Library-> Manage Libraries …
Namestite Adafruit ST7735
6. korak: Knjižnica NTPClient
Pojdite na https://github.com/taranais/NTPClient in prenesite knjižnico NTPClient, spremenjeno s taranaisom.
Razpakirajte in mapo postavite v knjižnice C: / Users / Documents / Arduino
7. korak: ESP32_NTP.ino
Vključuje in opredeljuje
#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; int dan; int mesec; int leto; int ure; int minute; int sekunde; }; // Socket UDP que a lib utilization para recuperar dados sobre or horário WiFiUDP udp; // Objekt odziven na recuperar dados sobre horário NTPClient ntpClient (udp, // vtičnica udp "0.br.pool.ntp.org", // URL za strežnik 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 = {"nedelja", "ponedeljek", "torek", "sreda", "četrtek", "petek", "sobota"}; // Objeto responvel pelo display Adafruit_ST7735 display = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLK, DISPLAY_RST);
Nastaviti
void setup () {Serial.begin (115200); setupDisplay (); connectWiFi (); setupNTP (); // Cria uma nova tarefa brez jedra 0 xTaskCreatePinnedToCore (wifiConnectionTask, // Função que será executada "wifiConnectionTask", // Nome da tarefa 10000, // Tamanho da memória disponível (em WORDs) NULL, // Nomo vamos pass, // prioriteta NULL, // Não precisamos de referência para a tarefa 0); // Número do core}
NastavitevNTP
void setupNTP () {// Inicializacijo odjemalca NTP ntpClient.begin (); // posodobitev Espera pelo primeiro na spletu Serial.println ("Čakanje na prvo posodobitev"); while (! ntpClient.update ()) {Serial.print ("."); ntpClient.forceUpdate (); zamuda (500); } Serial.println (); Serial.println ("Prva posodobitev dokončana"); }
WifiConnectionTask
// Tarefa que verifica is 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 (); } // Zamuda za 100 klopov vTaskDelay (100); }}
ConnectWiFi
void connectWiFi () {Serial.println ("Povezovanje"); // 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 ("."); zamuda (500); } Serial.println (); Serial.print ("Povezano z"); Serial.println (WiFi. SSID ()); }
SetupDisplay
void setupDisplay () {display.initR (INITR_BLACKTAB); // Inicializa o zaslonu 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 kurzorju brez prihajajočega prikaza.setTextColor (ST77XX_WHITE, ST77XX_BLACK); // Texto branco com fundo preto display.setTextWrap (false); // Não pula linha automaticamente}
Zanka
void loop () {// Recupera os dados sobre a data e horário Date date = getDate (); // Ponastavi prikaz kurzorja.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); zamuda (100); }
GetDate
Datum getDate () {// Recupera os dados de data and horário usando o 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 (); datum vračila; }
8. korak: Datoteke
Prenesite datoteke
JAZ NE