NTP library
5 berichten
• Pagina 1 van 1
NTP library
Ik ben bezig met een klein programma om een teller uit te lezen en door te sturen naar een Raspberry.
Dit werkt relatief goed.
Mijn vraag is nu ivm met de NTP library.
In het voorbeeld van de code van de library staat:
// You can specify the time server pool and the offset, (in seconds)
// additionaly you can specify the update interval (in milliseconds).
// NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600, 60000);
wil dit zeggen dat, als ik 60000 vervang door 3600000 dat de update van de tijd maar elk uur (3600000) ipv elke minuut (60000) zal gebeuren? Wat is de "offset" juist?
Verder staat er in de loop : timeClient.update();
kan ik dit vervangen door
if (timeClient.getHours() != voriguur)
{
timeClient.update();
voriguur=timeClient.getHours();
}
Dit omdat ik denk dat het updaten van de tijd veel clockcycles in beslag neemt en ik daardoor een aantal pulsen zou missen.
Dank u
Dit werkt relatief goed.
Mijn vraag is nu ivm met de NTP library.
In het voorbeeld van de code van de library staat:
// You can specify the time server pool and the offset, (in seconds)
// additionaly you can specify the update interval (in milliseconds).
// NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600, 60000);
wil dit zeggen dat, als ik 60000 vervang door 3600000 dat de update van de tijd maar elk uur (3600000) ipv elke minuut (60000) zal gebeuren? Wat is de "offset" juist?
Verder staat er in de loop : timeClient.update();
kan ik dit vervangen door
if (timeClient.getHours() != voriguur)
{
timeClient.update();
voriguur=timeClient.getHours();
}
Dit omdat ik denk dat het updaten van de tijd veel clockcycles in beslag neemt en ik daardoor een aantal pulsen zou missen.
- Code: Alles selecteren
#include <NTPClient.h>
// change next line to use with another board/shield
#include <ESP8266WiFi.h>
//#include <WiFi.h> // for WiFi shield
//#include <WiFi101.h> // for WiFi 101 shield or MKR1000
#include <WiFiUdp.h>
const char *ssid = "<SSID>";
const char *password = "<PASSWORD>";
WiFiUDP ntpUDP;
// By default 'time.nist.gov' is used with 60 seconds update interval and
// no offset
NTPClient timeClient(ntpUDP);
// You can specify the time server pool and the offset, (in seconds)
// additionaly you can specify the update interval (in milliseconds).
// NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600, 60000);
int val=0;
void setup(){
Serial.begin(115200);
WiFi.begin(ssid, password);
while ( WiFi.status() != WL_CONNECTED ) {
delay ( 500 );
Serial.print ( "." );
}
timeClient.begin();
}
void loop() {
timeClient.update();
....
}
Dank u
Advertisement
Re: NTP library
Misschien is dit de code van de NTPclient: https://github.com/arduino-libraries/NTPClient/blob/master/NTPClient.cpp
Op een gewone Arduino (Uno of Mega of Leonardo) werkt dat niet zo best, want daar is een integer een 16-bits waarde.
Jij kunt gewoon NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600, 3600000) doen.
Dit issue gaat over die parameter: https://github.com/arduino-libraries/NTPClient/issues/25
De .update() gebruikt die interval. Dus als de interval goed staat, dan kun je in de loop() de .update() heel vaak aanroepen, dat geeft niet.
Jouw voorstel met (timeClient.getHours() != voriguur) kan volgens mij ook als voriguur een globale variable is. Maar dat is dus niet nodig.
Je kunt zelf met millis() een timer maken, en ieder uur een .forceUpdate() doen. Maar ook dat is niet nodig.
Ik keek eens in mijn project van een Arduino Mega met een Ethernet Shield. Daar doe ik iedere 7 uur een NTP. Dat is echt te lang. Mijn X-tal van de Arduino Mega heeft een afwijking van 7 seconden per uur.
Op een gewone Arduino (Uno of Mega of Leonardo) werkt dat niet zo best, want daar is een integer een 16-bits waarde.
Jij kunt gewoon NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600, 3600000) doen.
Dit issue gaat over die parameter: https://github.com/arduino-libraries/NTPClient/issues/25
De .update() gebruikt die interval. Dus als de interval goed staat, dan kun je in de loop() de .update() heel vaak aanroepen, dat geeft niet.
Jouw voorstel met (timeClient.getHours() != voriguur) kan volgens mij ook als voriguur een globale variable is. Maar dat is dus niet nodig.
Je kunt zelf met millis() een timer maken, en ieder uur een .forceUpdate() doen. Maar ook dat is niet nodig.
Ik keek eens in mijn project van een Arduino Mega met een Ethernet Shield. Daar doe ik iedere 7 uur een NTP. Dat is echt te lang. Mijn X-tal van de Arduino Mega heeft een afwijking van 7 seconden per uur.
Re: NTP library
Dank voor de reply,
voriguur is een globale variable, dus zou het moeten lukken op deze manier.
Als je voorkeur uitgaat naar millis() denk ik dat ik het op die manier doe.
zoiets als
if (millis() > vorig_millis)
{
vorig_millis=millis();
timeClient.forceUpdate(); (of moet het timeClient.update(); zijn)
}
Herman
voriguur is een globale variable, dus zou het moeten lukken op deze manier.
Als je voorkeur uitgaat naar millis() denk ik dat ik het op die manier doe.
zoiets als
if (millis() > vorig_millis)
{
vorig_millis=millis();
timeClient.forceUpdate(); (of moet het timeClient.update(); zijn)
}
Herman
Re: NTP library
Uhm, sorry, dat is niet hoe je millis() gebruikt, dus vergeet dat maar snel.
De "Blink Without Delay" is een voorbeeld van millis() : https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
Ook met "voriguur" is niet nodig zoals ik schreef.
Dit zou moeten werken: NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600, 3600000);
De "Blink Without Delay" is een voorbeeld van millis() : https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
Ook met "voriguur" is niet nodig zoals ik schreef.
Dit zou moeten werken: NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600, 3600000);
Re: NTP library
dank u,
ik gebruik NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600, 3600000);
het gebruik van Millis... is inderdaad fout zoals ik het nu geschreven heb.
Dank u voor de geleverde tijd.
Herman
ik gebruik NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600, 3600000);
het gebruik van Millis... is inderdaad fout zoals ik het nu geschreven heb.
Dank u voor de geleverde tijd.
Herman
5 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 31 gasten