Sync time using NTP

This commit is contained in:
Correl Roush 2023-01-22 11:40:04 -05:00
parent 548a89f824
commit c0220110d6
2 changed files with 35 additions and 18 deletions

View file

@ -1,6 +1,11 @@
#ifndef CONFIG_H_ #ifndef CONFIG_H_
#define CONFIG_H_ #define CONFIG_H_
// Olson - POSIX time zone lookup table: https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
#define NTP_TIMEZONE "EST5EDT,M3.2.0,M11.1.0" // America/New_York
#define NTP_SERVER1 "0.pool.ntp.org"
#define NTP_SERVER2 "1.pool.ntp.org"
#define NTP_SERVER3 "2.pool.ntp.org"
#define WIFI_SSID "REPLACE_WITH_YOUR_SSID" #define WIFI_SSID "REPLACE_WITH_YOUR_SSID"
#define WIFI_PASSWORD "REPLACE_WITH_YOUR_PASSWORD" #define WIFI_PASSWORD "REPLACE_WITH_YOUR_PASSWORD"

View file

@ -3,6 +3,7 @@
#include <WiFi.h> #include <WiFi.h>
#include <ESPAsyncWebServer.h> #include <ESPAsyncWebServer.h>
#include <AsyncElegantOTA.h> #include <AsyncElegantOTA.h>
#include <sntp.h>
#include "config.h" #include "config.h"
class App { class App {
@ -61,19 +62,20 @@ public:
} }
void loop() { void loop() {
static constexpr const char* const wd[7] = {"Sun","Mon","Tue","Wed","Thr","Fri","Sat"}; static constexpr const char* const wd[7] = {"Sun","Mon","Tue","Wed","Thr","Fri","Sat"};
auto dt = M5.Rtc.getDateTime(); auto t = time(nullptr);
auto tm = localtime(&t);
M5.Display.setCursor(0, M5.Display.height() / 3); M5.Display.setCursor(0, M5.Display.height() / 3);
M5.Display.setFont(&fonts::Orbitron_Light_24); M5.Display.setFont(&fonts::Orbitron_Light_24);
M5.Display.printf("%s\n%04d.%02d.%02d\n" M5.Display.printf("%s\n%04d.%02d.%02d\n"
, wd[dt.date.weekDay] , wd[tm->tm_wday]
, dt.date.year , tm->tm_year + 1900
, dt.date.month , tm->tm_mon + 1
, dt.date.date , tm->tm_mday
); );
M5.Display.setFont(&fonts::Orbitron_Light_32); M5.Display.setFont(&fonts::Orbitron_Light_32);
M5.Display.printf("%02d:%02d " M5.Display.printf("%02d:%02d "
, dt.time.hours , tm->tm_hour
, dt.time.minutes , tm->tm_min
); );
delay(10000); delay(10000);
} }
@ -88,25 +90,35 @@ void setup(void) {
M5.begin(cfg); M5.begin(cfg);
M5.Display.init(); M5.Display.init();
M5.Display.setTextSize(3); M5.Display.setTextSize(3);
M5.Display.startWrite(); M5.Display.setCursor(0, M5.Display.height() / 4);
M5.Display.setCursor(0, M5.Display.height() / 2);
M5.Display.printf("Starting up..."); M5.Display.printf("Starting up...");
M5.Display.endWrite();
M5.Display.print("Connecting to WiFi");
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD); WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.println(""); M5.Display.println("");
// Wait for connection // Wait for connection
while (WiFi.status() != WL_CONNECTED) { while (WiFi.status() != WL_CONNECTED) {
delay(500); delay(500);
Serial.print("."); M5.Display.print(".");
} }
Serial.println(""); M5.Display.println("");
Serial.print("Connected to "); M5.Display.print("Connected to ");
Serial.println(WIFI_SSID); M5.Display.println(WIFI_SSID);
Serial.print("IP address: "); M5.Display.print("IP address: ");
Serial.println(WiFi.localIP()); M5.Display.println(WiFi.localIP());
M5.Display.print("Syncing time");
configTzTime(NTP_TIMEZONE, NTP_SERVER1, NTP_SERVER2, NTP_SERVER3);
while (sntp_get_sync_status() != SNTP_SYNC_STATUS_COMPLETED) {
M5.Display.print('.');
delay(1000);
}
M5.Display.println("");
time_t t = time(nullptr)+1; // Advance one second.
while (t > time(nullptr)); /// Synchronization in seconds
M5.Rtc.setDateTime( gmtime( &t ) );
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) { server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
request->send(200, "text/plain", "Hi! I am ESP32."); request->send(200, "text/plain", "Hi! I am ESP32.");
@ -114,7 +126,7 @@ void setup(void) {
AsyncElegantOTA.begin(&server); // Start ElegantOTA AsyncElegantOTA.begin(&server); // Start ElegantOTA
server.begin(); server.begin();
Serial.println("HTTP server started"); M5.Display.println("HTTP server started");
app = new Clock; app = new Clock;
current_app = App::Clock; current_app = App::Clock;