From 3fc594b8246b5ab2ecbfc4353ce8c85b6e760df9 Mon Sep 17 00:00:00 2001 From: Willem Oldemans Date: Sun, 17 Sep 2023 20:50:01 +0200 Subject: [PATCH] ntp attempt#2 --- FW/NCM107-ESP32C3/platformio.ini | 7 +- FW/NCM107-ESP32C3/src/clock.cpp | 9 +- FW/NCM107-ESP32C3/src/clock.h | 1 + FW/NCM107-ESP32C3/src/main.cpp | 28 ++---- FW/NCM107-ESP32C3/src/ntp.cpp | 142 +++++++++++++++++-------------- FW/NCM107-ESP32C3/src/ntp.h | 3 + 6 files changed, 100 insertions(+), 90 deletions(-) diff --git a/FW/NCM107-ESP32C3/platformio.ini b/FW/NCM107-ESP32C3/platformio.ini index 9d854a4..66458e8 100644 --- a/FW/NCM107-ESP32C3/platformio.ini +++ b/FW/NCM107-ESP32C3/platformio.ini @@ -15,4 +15,9 @@ framework = arduino lib_deps = paulstoffregen/Time@^1.6.1 jchristensen/Timezone@^1.2.4 - arduino-libraries/NTPClient@^3.2.1 + ESPNtpClient +build_src_filter = ${env.build_src_filter} +lib_ldf_mode = deep+ +build_flags = + -DCORE_DEBUG_LEVEL=3 + -DNDEF_DEBUG=1 \ No newline at end of file diff --git a/FW/NCM107-ESP32C3/src/clock.cpp b/FW/NCM107-ESP32C3/src/clock.cpp index 6f08efd..b84e332 100644 --- a/FW/NCM107-ESP32C3/src/clock.cpp +++ b/FW/NCM107-ESP32C3/src/clock.cpp @@ -9,6 +9,9 @@ Timezone myTZ(CEST, CET); TimeChangeRule *tcr; + + + bool timeIsSet() { return RTC_present; @@ -26,17 +29,18 @@ void printDateTime(time_t t, const char *tz) time_t getLocalTime() { + if(!getWifiStatus) return 0; time_t utc = getNtpTime(); time_t local = myTZ.toLocal(utc, &tcr); printDateTime(local,tcr -> abbrev); printDateTime(utc,"UTC"); - return local; + return utc; } void initClock() { - initNTP(); + initWifi(); } void loopClock() @@ -45,6 +49,7 @@ void loopClock() { if(!NTPinit && getWifiStatus()) { + initNTP(); setSyncProvider(getLocalTime); setSyncInterval(300); NTPinit = true; diff --git a/FW/NCM107-ESP32C3/src/clock.h b/FW/NCM107-ESP32C3/src/clock.h index 945e978..129f33d 100644 --- a/FW/NCM107-ESP32C3/src/clock.h +++ b/FW/NCM107-ESP32C3/src/clock.h @@ -5,6 +5,7 @@ #include "TimeLib.h" #include "util.h" #include // https://github.com/JChristensen/Timezone +#include diff --git a/FW/NCM107-ESP32C3/src/main.cpp b/FW/NCM107-ESP32C3/src/main.cpp index 507d554..a3cf826 100644 --- a/FW/NCM107-ESP32C3/src/main.cpp +++ b/FW/NCM107-ESP32C3/src/main.cpp @@ -1,31 +1,9 @@ #include #include "clock.h" - const String FirmwareVersion="010310"; -//Format _X.XX__ -//NIXIE CLOCK MCU107 by GRA & AFCH (fominalec@gmail.com) -//1.0.31 27.04.2017 -//Added Antipoisoning effect - slot machine -//1.0.3 17.02.2017 -// Added: time synchronizing each 10 seconds -//1.02 17.10.2016 -//Fixed: RGB color controls -//Update to Arduino IDE 1.6.12 (Time.h replaced to TimeLib.h) -//1.01 -//Added RGB LEDs lock(by UP and Down Buttons) -//Added Down and Up buttons pause and resume self testing -//25.09.2016 update to HW ver 1.1 -//25.05.2016 #include #include -//#include -//#include -//#include -// #include - -// #include -// #include "JC_Button.h" #define Anode0Pin 10 #define Anode1Pin 3 @@ -109,6 +87,8 @@ void setup() Serial.begin(115200); + log_i("init hardware"); + pinMode(LEpin, OUTPUT); // SPI setup @@ -120,6 +100,7 @@ void setup() pinMode(Anode1Pin, OUTPUT); pinMode(Anode2Pin, OUTPUT); + log_i("init clock"); initClock(); //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -128,6 +109,9 @@ void setup() doTest(); loopClock(); } + + log_i("init done, GO!"); + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/FW/NCM107-ESP32C3/src/ntp.cpp b/FW/NCM107-ESP32C3/src/ntp.cpp index 46f5f60..edc34f7 100644 --- a/FW/NCM107-ESP32C3/src/ntp.cpp +++ b/FW/NCM107-ESP32C3/src/ntp.cpp @@ -1,33 +1,40 @@ #include "ntp.h" + static const char ntpServerName[] = "us.pool.ntp.org"; -const int timeZone = 2; -unsigned int localPort = 8888; // local port to listen for UDP packets +// const int timeZone = 2; +// unsigned int localPort = 8888; // local port to listen for UDP packets const char *ssid = "iot"; const char *password = "Rijnstraat214"; -const int NTP_PACKET_SIZE = 48; // NTP time is in the first 48 bytes of message -byte packetBuffer[NTP_PACKET_SIZE]; //buffer to hold incoming & outgoing packets -const unsigned int remotePort = 123; +// const int NTP_PACKET_SIZE = 48; // NTP time is in the first 48 bytes of message +// byte packetBuffer[NTP_PACKET_SIZE]; //buffer to hold incoming & outgoing packets +// const unsigned int remotePort = 123; bool printed = false; bool wifiConnected = false; -WiFiUDP Udp; -// NTPClient timeClient(Udp); +// WiFiUDP Udp; -bool _timeupdated = false; -bool timeUpdated() +// bool timeUpdated() +// { +// return _timeupdated; +// } + +void initWifi() { - return _timeupdated; + log_i("init wifi"); + WiFi.begin(ssid, password); } void initNTP() { - WiFi.begin(ssid, password); - + log_i("init ntp"); + NTP.setTimeZone(TZ_Etc_UTC); + NTP.begin(); + // Udp.begin(localPort); } bool getWifiStatus() @@ -38,68 +45,73 @@ bool getWifiStatus() { Serial.print("IP number assigned by DHCP is "); Serial.println(WiFi.localIP()); - Serial.println("Starting UDP"); - Udp.begin(localPort); - Serial.println("waiting for sync"); printed = true; } return wifiConnected; } -// send an NTP request to the time server at the given address -void sendNTPpacket(IPAddress &address) -{ - // set all bytes in the buffer to 0 - memset(packetBuffer, 0, NTP_PACKET_SIZE); - // Initialize values needed to form NTP request - // (see URL above for details on the packets) - packetBuffer[0] = 0b11100011; // LI, Version, Mode - packetBuffer[1] = 0; // Stratum, or type of clock - packetBuffer[2] = 6; // Polling Interval - packetBuffer[3] = 0xEC; // Peer Clock Precision - // 8 bytes of zero for Root Delay & Root Dispersion - packetBuffer[12] = 49; - packetBuffer[13] = 0x4E; - packetBuffer[14] = 49; - packetBuffer[15] = 52; - // all NTP fields have been given values, now - // you can send a packet requesting a timestamp: - Udp.beginPacket(address, 123); // NTP requests are to port 123 - Udp.write(packetBuffer, NTP_PACKET_SIZE); - Udp.endPacket(); -} +// // send an NTP request to the time server at the given address +// void sendNTPpacket(IPAddress &address) +// { +// // set all bytes in the buffer to 0 +// memset(packetBuffer, 0, NTP_PACKET_SIZE); +// // Initialize values needed to form NTP request +// // (see URL above for details on the packets) +// packetBuffer[0] = 0b11100011; // LI, Version, Mode +// packetBuffer[1] = 0; // Stratum, or type of clock +// packetBuffer[2] = 6; // Polling Interval +// packetBuffer[3] = 0xEC; // Peer Clock Precision +// // 8 bytes of zero for Root Delay & Root Dispersion +// packetBuffer[12] = 49; +// packetBuffer[13] = 0x4E; +// packetBuffer[14] = 49; +// packetBuffer[15] = 52; +// // all NTP fields have been given values, now +// // you can send a packet requesting a timestamp: +// Udp.beginPacket(address, 123); // NTP requests are to port 123 +// Udp.write(packetBuffer, NTP_PACKET_SIZE); +// Udp.endPacket(); +// } time_t getNtpTime() { - IPAddress ntpServerIP; // NTP server's ip address + static int last = 0; - while (Udp.parsePacket() > 0) - ; // discard any previously received packets - Serial.println("Transmit NTP Request"); - // get a random server from the pool - WiFi.hostByName(ntpServerName, ntpServerIP); - Serial.print(ntpServerName); - Serial.print(": "); - Serial.println(ntpServerIP); - sendNTPpacket(ntpServerIP); - uint32_t beginWait = millis(); - while (millis() - beginWait < 1500) - { - int size = Udp.parsePacket(); - if (size >= NTP_PACKET_SIZE) - { - Serial.println("Receive NTP Response"); - Udp.read(packetBuffer, NTP_PACKET_SIZE); // read packet into the buffer - unsigned long secsSince1900; - // convert four bytes starting at location 40 to a long integer - secsSince1900 = (unsigned long)packetBuffer[40] << 24; - secsSince1900 |= (unsigned long)packetBuffer[41] << 16; - secsSince1900 |= (unsigned long)packetBuffer[42] << 8; - secsSince1900 |= (unsigned long)packetBuffer[43]; - return secsSince1900 - 2208988800UL * SECS_PER_HOUR; - } + if ((millis () - last) > 1000) { + last = millis (); + Serial.println (NTP.getTimeDateStringUs ()); } - Serial.println("No NTP Response :-("); - return 0; // return 0 if unable to get the time + + return NTP.getLastNTPSync(); +// IPAddress ntpServerIP; // NTP server's ip address + +// while (Udp.parsePacket() > 0) +// ; // discard any previously received packets +// Serial.println("Transmit NTP Request"); +// // get a random server from the pool +// WiFi.hostByName(ntpServerName, ntpServerIP); +// Serial.print(ntpServerName); +// Serial.print(": "); +// Serial.println(ntpServerIP); +// sendNTPpacket(ntpServerIP); +// uint32_t beginWait = millis(); +// while (millis() - beginWait < 3000) +// { +// int size = Udp.parsePacket(); +// if (size >= NTP_PACKET_SIZE) +// { +// Serial.printf("Receive NTP Response in %dms \n",(millis() - beginWait)); +// Udp.read(packetBuffer, NTP_PACKET_SIZE); // read packet into the buffer +// unsigned long secsSince1900; +// // convert four bytes starting at location 40 to a long integer +// secsSince1900 = (unsigned long)packetBuffer[40] << 24; +// secsSince1900 |= (unsigned long)packetBuffer[41] << 16; +// secsSince1900 |= (unsigned long)packetBuffer[42] << 8; +// secsSince1900 |= (unsigned long)packetBuffer[43]; +// return secsSince1900 - 2208988800UL * SECS_PER_HOUR; +// } +// } +// Serial.println("No NTP Response :-("); +// return 0; // return 0 if unable to get the time } diff --git a/FW/NCM107-ESP32C3/src/ntp.h b/FW/NCM107-ESP32C3/src/ntp.h index 0d4ba93..29064e7 100644 --- a/FW/NCM107-ESP32C3/src/ntp.h +++ b/FW/NCM107-ESP32C3/src/ntp.h @@ -3,10 +3,13 @@ #include #include #include +#include void initNTP(); +void initWifi(); + void loopNTP(); time_t getNtpTime();