NTP library

Projecten die niet passen in bovenstaande onderwerpen
Gebruikers-avatar
Berichten: 43
Geregistreerd: 09 Jan 2015, 15:09

NTP library

Berichtdoor hv0805 » 14 Jun 2017, 09:17

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.



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

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: NTP library

Berichtdoor Koepel » 14 Jun 2017, 09:53

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.

Gebruikers-avatar
Berichten: 43
Geregistreerd: 09 Jan 2015, 15:09

Re: NTP library

Berichtdoor hv0805 » 14 Jun 2017, 10:05

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

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: NTP library

Berichtdoor Koepel » 14 Jun 2017, 12:25

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);

Gebruikers-avatar
Berichten: 43
Geregistreerd: 09 Jan 2015, 15:09

Re: NTP library

Berichtdoor hv0805 » 14 Jun 2017, 12:57

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

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Google [Bot] en 6 gasten