Om de huidige datum en tijd te gebruiken binnen je applicatie kun je gebruik maken van de NTPClient library. Om deze te installeren ga je naar Sketch > Library > Manage Libraries en zoek je naar NTPClient. Deze library verbint via Wifi met een server die de huidige datum en tijd kan vertellen. Een voorbeeld van een zogenaamde NTP server is pool.ntp.org.
Functies
De library heeft de volgende functies.
getDay() geeft een nummer dat overeenkomt met de dagen van de week waarbij 0 zondag is.
getHours() geeft een nummber met het huidige uur in 24 uurs formaat.
getMinutes() geeft een nummer met de huidige minuut.
getSeconds() geeft een nummer met de huidige seconde.
getEpochTime() geeft een unsigned long met de huidige epoch tijd in seconden. Dat is het aantal seconden sinds middernacht 1 januari 1970 in GMT.
getFormattedTime() geeft een String met de tijd in HH:MM:SS format.
Er is geen functie om de datum te berekenen maar dit is wel af te leiden uit de epoch.
Voorbeeld
In het onderstaande voorbeeld worden alle functionaliteiten van de NTPclient library gedemonstreerd.
/* Rui Santos Complete project details at https://RandomNerdTutorials.com/esp8266-nodemcu-date-time-ntp-client-server-arduino/ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.*/#include<ESP8266WiFi.h>#include<NTPClient.h>#include<WiFiUdp.h>// Replace with your network credentialsconstchar*ssid="REPLACE_WITH_YOUR_SSID";constchar*password="REPLACE_WITH_YOUR_PASSWORD";// Define NTP Client to get timeWiFiUDPntpUDP;NTPClienttimeClient(ntpUDP,"pool.ntp.org");//Week DaysStringweekDays[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};//Month namesStringmonths[12]={"January","February","March","April","May","June","July","August","September","October","November","December"};voidsetup(){// Initialize Serial MonitorSerial.begin(115200);// Connect to Wi-FiSerial.print("Connecting to ");Serial.println(ssid);WiFi.begin(ssid,password);while(WiFi.status()!=WL_CONNECTED){delay(500);Serial.print(".");}// Initialize a NTPClient to get timetimeClient.begin();// Set offset time in seconds to adjust for your timezone, for example:// GMT +1 = 3600// GMT +8 = 28800// GMT -1 = -3600// GMT 0 = 0timeClient.setTimeOffset(0);}voidloop(){timeClient.update();unsignedlongepochTime=timeClient.getEpochTime();Serial.print("Epoch Time: ");Serial.println(epochTime);StringformattedTime=timeClient.getFormattedTime();Serial.print("Formatted Time: ");Serial.println(formattedTime);intcurrentHour=timeClient.getHours();Serial.print("Hour: ");Serial.println(currentHour);intcurrentMinute=timeClient.getMinutes();Serial.print("Minutes: ");Serial.println(currentMinute);intcurrentSecond=timeClient.getSeconds();Serial.print("Seconds: ");Serial.println(currentSecond);StringweekDay=weekDays[timeClient.getDay()];Serial.print("Week Day: ");Serial.println(weekDay);//Get a time structurestructtm*ptm=gmtime((time_t*)&epochTime);intmonthDay=ptm->tm_mday;Serial.print("Month day: ");Serial.println(monthDay);intcurrentMonth=ptm->tm_mon+1;Serial.print("Month: ");Serial.println(currentMonth);StringcurrentMonthName=months[currentMonth-1];Serial.print("Month name: ");Serial.println(currentMonthName);intcurrentYear=ptm->tm_year+1900;Serial.print("Year: ");Serial.println(currentYear);//Print complete date:StringcurrentDate=String(currentYear)+"-"+String(currentMonth)+"-"+String(monthDay);Serial.print("Current date: ");Serial.println(currentDate);Serial.println("");delay(2000);}
Werking
Allereerst moeten de benodigde libraries toegevoegd worden.
In de setup() maken we verbinding met het internet. Voor het gemak printen we de status hiervan naar de serialmonitor, dit zo je kunnen weglaten.
1 2 3 4 5 6 7 8 910
Serial.begin(9600);Serial.print("Connecting to ");Serial.println(ssid);WiFi.begin(ssid,password);while(WiFi.status()!=WL_CONNECTED){delay(500);Serial.print(".");}
Hierna initializeren we de NTP client.
1
timeClient.begin();
Tijdszone
Je kunt de huidige tijdszone instellen met de setTimeOffset() methode. Hier geef je het aantal seconden verschil met GMT, Nederlandse wintertijd is 3600 en zomertijd is 7200.
1
timeClient.setTimeOffset(3600);
loop()
In de loop() roepen we de update() functie aan om de huidige datum en tijd op te halen van de NTP server.
1
timeClient.update();
Tijd ophalen
Als we de huidige epoch tijd willen printen dan kan dat als volgt.
De getDay() functie geeft alleen een nummer tussen de 0 en 6, waarbij zondag 0 is, om de dag aan te geven. Als je graag de naam van de dag wilt printen dan kun je deze uit een lijst halen als volgt.
Er is geen standaard functie om de huidige datum op te halen. Het is wel mogelijk dit te bepalen door middel van een time structure. Meer informatie hierover vind je in de c++ referentie of kijk in het voorbeeld.