Page 1 of 2
Best NTP-Time library for ESP32?
Posted: Thu Mar 29, 2018 9:26 am
by rin67630
Hi, I am looking forward to using a specific time library that uses the built-in RTC features of the ESP32.
That one seems to use them:
https://github.com/espressif/arduino-es ... leTime.ino
The code is hovewer scarcely documented, it's using the time.h lib which refers to timeLib.h...
That is however a developement of year 2011, can it be specifically intended for the ESP32, that came out later?
I am currently can't figure out how to use that undocumented example to use it to run tasks on specific timings. Polling the getLocalTime routine can't be the right way to use it, is it?
Re: Best NTP-Time library for ESP32?
Posted: Thu Mar 29, 2018 2:56 pm
by Deouss
I am looking for same thing. NTP seems easy - here RFCs
https://tools.ietf.org/html/rfc1305 (v3) or rfc1059 (v1) or rfc7822 (v4)
however needs network low level programming.
Simple example in c# is here
https://stackoverflow.com/questions/119 ... er-using-c
They query ntp server with TCP and get 48 bytes back with all time info
Re: Best NTP-Time library for ESP32?
Posted: Thu Mar 29, 2018 3:46 pm
by Deouss
I additionally found this library
https://github.com/arduino-libraries/NTPClient
and other example
https://github.com/gmag11/NtpClient/blo ... tESP32.ino
Looks like NTP is queried with UDP which is faster
Re: Best NTP-Time library for ESP32?
Posted: Fri Mar 30, 2018 5:14 pm
by rin67630
My problem is not only how to querry NTP with the ESP32, but also how to use its built-in RTC.
You are looking for generic ways to do it from scratch. That is inefficient.
The example given in
https://github.com/espressif/arduino-es ... leTime.ino shows how to synchronise with NTP with a simple routine:
Code: Select all
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
That's it!
The ESP32 seems to have low-level functions to gather this in a much more efficient way than the c++ code used to with the ESP8266 or Arduinos.
in Documents\Arduino\hardware\espressif\esp32\cores\esp32 you will find a routine esp32-hal-time.c
This seem to be the way to search for.
You will find elsewhere plenty of examples of legacy code, that may run on the ESP32, but don't use its capabilities.
Re: Best NTP-Time library for ESP32?
Posted: Fri Mar 30, 2018 6:56 pm
by Deouss
So - does it work? You are saying ntp sync is built into ESP itself?
Re: Best NTP-Time library for ESP32?
Posted: Fri Mar 30, 2018 9:39 pm
by rin67630
Deouss wrote:So - does it work? You are saying ntp sync is built into ESP itself?
I have extended the SimpleTime.ino example with time variables to be used by a program:
Code: Select all
#include <WiFi.h>
#include "time.h"
const char* ssid = "SSID";
const char* password = "PASS";
const char* ntpServer = "de.pool.ntp.org";
const long gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;
int second;
int minute;
int hour;
int day;
int month;
int year;
int weekday;
long current;
struct tm timeinfo;
/*
struct tm
{
int tm_sec; // Seconds [0,60].
int tm_min; // Minutes [0,59].
int tm_hour; // Hour [0,23].
int tm_mday; // Day of month [1,31].
int tm_mon; // Month of year [0,11].
int tm_year; // Years since 1900.
int tm_wday; // Day of week [0,6] (Sunday =0).
int tm_yday; // Day of year [0,365].
int tm_isdst; // Daylight Savings flag.
}
*/
void printLocalTime()
{
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
return;
}
Serial.println(&timeinfo, "%A, %d %B %Y %H:%M:%S");
}
void setup()
{
Serial.begin(115200);
//connect to WiFi
Serial.printf("Connecting to %s ", ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" CONNECTED");
//init and get the time
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
printLocalTime();
//disconnect WiFi as it's no longer needed
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
}
void loop()
{
delay(1000);
printLocalTime();
second = timeinfo.tm_sec;
minute = timeinfo.tm_min;
hour = timeinfo.tm_hour;
day = timeinfo.tm_mday;
month = timeinfo.tm_mon + 1;
year = timeinfo.tm_year + 1900;
weekday = timeinfo.tm_wday +1;
Serial.print("Time from variables: ");
Serial.print(day);
Serial.print(".");
Serial.print(month);
Serial.print(".");
Serial.print(year);
Serial.print(" --- ");
Serial.print(hour);
Serial.print(":");
Serial.print(minute);
Serial.print(":");
Serial.println(second);
}
Now I expect to be able to go to deepsleep and wake up without recalling the SNTP service...
Re: Best NTP-Time library for ESP32?
Posted: Sun Apr 01, 2018 2:31 pm
by Deouss
I just looked at \arduino-esp32-master\tools\sdk\include\lwip\apps\sntp
Seems like there is a dedicated code for sntp and configTime so no need to recreate ntp I guess.
If you drill down into esp-hal you can merge more features
Let us know how it works
Re: Best NTP-Time library for ESP32?
Posted: Sun Apr 01, 2018 7:32 pm
by rin67630
Deouss wrote:
Seems like there is a dedicated code for sntp and configTime so no need to recreate ntp I guess.
Sure, the SimpleTime example demonstrates exactly that pretty well.
I just added for didactic purposes the way to get individual time values.
Now the challange is to replace the delay(); by a deep sleep
and to wake up without resynchronizing via NTP.
Unfortunately makers are left alone here, I did not find any usable example of waking up from deep sleep
keeping time.
I hope it's possible.
Re: Best NTP-Time library for ESP32?
Posted: Sun Apr 01, 2018 7:52 pm
by Deouss
I would study datasheet. I think I saw some information pertaining to deep sleep that only certain level of interrupt can wake the device up. Or maybe it is some kind of external event signal - hopefully can be periodic. I know hardware timers should be able to completely wake system up
Re: Best NTP-Time library for ESP32?
Posted: Sun Apr 01, 2018 8:02 pm
by rin67630
Deouss wrote:I would study datasheet. I think I saw some information pertaining to deep sleep that only certain level of interrupt can wake the device up. Or maybe it is some kind of external event signal - hopefully can be periodic. I know hardware timers should be able to completely wake system up
You can go to deep sleep for x microseconds and wake up automagically after that time.
The only unsolved problem yet is that the processor restarts from scratch and I don't know how to sense that the RTC is up-to date in order to avoid a power-costly new SNTP sync.