Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Laat je tijd tellen! Dit is een veelbesproken onderwerp onder mijn abonnees, en om welke reden? Vanwege het simpele en onmisbare feit dat wanneer je een datalogger maakt, en voor alles wat met automatisering te maken heeft, je de juiste tijd nodig hebt! En er zijn verschillende manieren om tijd te meten: klok met batterij, RTC (Real Time Clock), onder andere. Maar degene die ik je vandaag wil laten zien (die datum, dag van de week en tijd aangeeft) is het NTP (Network Time Protocol), dat online is. In deze video halen we de datum- en tijdinformatie online op en tonen de informatie op het display.
Stap 1: Demonstratie
Stap 2: Montage
Stap 3: Montage - Tafel
Stap 4: Adafruit GFX-bibliotheek
Ga in de Arduino IDE naar Sketch->Bibliotheek opnemen->Bibliotheken beheren …
Installeer de Adafruit GFX-bibliotheek
Stap 5: Adafruit ST7735-bibliotheek
Ga in de Arduino IDE naar Sketch->Bibliotheek opnemen->Bibliotheken beheren …
Installeer Adafruit ST7735
Stap 6: NTPClient-bibliotheek
Ga naar https://github.com/taranais/NTPClient en download de taranais-gemodificeerde NTPClient-bibliotheek.
Unzip en plaats de map in C:\Users\Documents\Arduino\libraries
Stap 7: ESP32_NTP.ino
Omvat en definieer
#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 dag; int maand; int jaar; int. uren; int minuten; int seconden; }; //Socket UDP kan worden gebruikt om te herstellen van de laatste tijd WiFiUDP udp; //Objeto responsável por 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 = {"zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"}; //Objeto responsavel pelo display Adafruit_ST7735 display = Adafruit_ST7735 (DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLK, DISPLAY_RST);
Opstelling
void setup(){ Serial.begin(115200); setupDisplay(); verbindWiFi(); setupNTP(); //Cria uma nova tarefa no core 0 xTaskCreatePinnedToCore(wifiConnectionTask, //Função que será executada "wifiConnectionTask", //Nome da tarefa 10000, //Tamanho da memória disponível (em WORDs) NULL, //No neen hum va mos, //prioridade NULL, //No precisamos de referência para a tarefa 0); //Numero do core}
NTP instellen
void setupNTP(){ //Inicializa o client NTP ntpClient.begin(); // Espera pelo primeiro update online Serial.println ("Wachten op eerste update"); while(!ntpClient.update()) { Serial.print("."); ntpClient.forceUpdate(); vertraging (500); } Serieel.println(); Serial.println("Eerste update voltooid"); }
WifiVerbindingTaak
// Verificatie van een verbinding met wifiConnectionTask (void * param) { while (true) { // Zoek een wifi-verbinding als (WiFi.status ()! = WL_CONNECTED) { // Manda sluit wifi (); } //Delay de 100 ticks vTaskDelay(100); } }
VerbindWiFi
void connectWiFi(){ Serial.println("Verbinden"); //Troque pelo nome en senha da sua rede WiFi WiFi.begin ("SSID", "12345678"); //Espera enquanto não estiver conectado while(WiFi.status()!= WL_CONNECTED) {Serial.print("."); vertraging (500); } Serieel.println(); Serial.print("Verbonden met "); Seriële.println(WiFi. SSID()); }
InstellingenDisplay
void setupDisplay(){ display.initR(INITR_BLACKTAB); // Beginnen om display.setRotation (3) weer te geven; // Rotaciona display.setTextSize (2); //Tamanho do texto display.fillScreen (ST77XX_BLACK); //Preenche com a cor preta display.setCursor (0, 0); // Coloca of cursor geen começo display.setTextColor (ST77XX_WHITE, ST77XX_BLACK); //Texto branco com fundo preto display.setTextWrap (false); //No pula linha automaticamente}
Lus
void loop () { // Recupera os dados sobre a data e horário Date date = getDate (); // Reset de cursorweergave.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); vertraging (100); }
Krijg datum
Datum getDate(){ //Recuperatie van data en gebruik van de client NTP char* strDate = (char*)ntpClient.getFormattedDate().c_str(); // Passa os dados da string para a struct Datum datum; sscanf(strDate, "%d-%d-%dT%d:%d:%dZ", &datum.jaar, &datum.maand, &datum.dag, &datum.uren, &datum.minuten, &datum.seconden); //Dia da semana de 0 a 6, sendo 0 of domingo date.dayOfWeek = ntpClient.getDay(); retourdatum; }
Stap 8: Bestanden
Download de bestanden
INO