ntp attempt#2
This commit is contained in:
@@ -15,4 +15,9 @@ framework = arduino
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
paulstoffregen/Time@^1.6.1
|
paulstoffregen/Time@^1.6.1
|
||||||
jchristensen/Timezone@^1.2.4
|
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
|
||||||
@@ -9,6 +9,9 @@ Timezone myTZ(CEST, CET);
|
|||||||
|
|
||||||
TimeChangeRule *tcr;
|
TimeChangeRule *tcr;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool timeIsSet()
|
bool timeIsSet()
|
||||||
{
|
{
|
||||||
return RTC_present;
|
return RTC_present;
|
||||||
@@ -26,17 +29,18 @@ void printDateTime(time_t t, const char *tz)
|
|||||||
|
|
||||||
time_t getLocalTime()
|
time_t getLocalTime()
|
||||||
{
|
{
|
||||||
|
if(!getWifiStatus) return 0;
|
||||||
time_t utc = getNtpTime();
|
time_t utc = getNtpTime();
|
||||||
time_t local = myTZ.toLocal(utc, &tcr);
|
time_t local = myTZ.toLocal(utc, &tcr);
|
||||||
printDateTime(local,tcr -> abbrev);
|
printDateTime(local,tcr -> abbrev);
|
||||||
printDateTime(utc,"UTC");
|
printDateTime(utc,"UTC");
|
||||||
|
|
||||||
return local;
|
return utc;
|
||||||
}
|
}
|
||||||
|
|
||||||
void initClock()
|
void initClock()
|
||||||
{
|
{
|
||||||
initNTP();
|
initWifi();
|
||||||
}
|
}
|
||||||
|
|
||||||
void loopClock()
|
void loopClock()
|
||||||
@@ -45,6 +49,7 @@ void loopClock()
|
|||||||
{
|
{
|
||||||
if(!NTPinit && getWifiStatus())
|
if(!NTPinit && getWifiStatus())
|
||||||
{
|
{
|
||||||
|
initNTP();
|
||||||
setSyncProvider(getLocalTime);
|
setSyncProvider(getLocalTime);
|
||||||
setSyncInterval(300);
|
setSyncInterval(300);
|
||||||
NTPinit = true;
|
NTPinit = true;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include "TimeLib.h"
|
#include "TimeLib.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include <Timezone.h> // https://github.com/JChristensen/Timezone
|
#include <Timezone.h> // https://github.com/JChristensen/Timezone
|
||||||
|
#include <ESPNtpClient.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,31 +1,9 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include "clock.h"
|
#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 <SPI.h>
|
#include <SPI.h>
|
||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
//#include <ClickButton.h>
|
|
||||||
//#include <TimeLib.h>
|
|
||||||
//#include <Tone.h>
|
|
||||||
// #include <EEPROM.h>
|
|
||||||
|
|
||||||
// #include <RTClib.h>
|
|
||||||
// #include "JC_Button.h"
|
|
||||||
|
|
||||||
#define Anode0Pin 10
|
#define Anode0Pin 10
|
||||||
#define Anode1Pin 3
|
#define Anode1Pin 3
|
||||||
@@ -109,6 +87,8 @@ void setup()
|
|||||||
|
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
|
|
||||||
|
log_i("init hardware");
|
||||||
|
|
||||||
pinMode(LEpin, OUTPUT);
|
pinMode(LEpin, OUTPUT);
|
||||||
|
|
||||||
// SPI setup
|
// SPI setup
|
||||||
@@ -120,6 +100,7 @@ void setup()
|
|||||||
pinMode(Anode1Pin, OUTPUT);
|
pinMode(Anode1Pin, OUTPUT);
|
||||||
pinMode(Anode2Pin, OUTPUT);
|
pinMode(Anode2Pin, OUTPUT);
|
||||||
|
|
||||||
|
log_i("init clock");
|
||||||
initClock();
|
initClock();
|
||||||
|
|
||||||
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
@@ -128,6 +109,9 @@ void setup()
|
|||||||
doTest();
|
doTest();
|
||||||
loopClock();
|
loopClock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log_i("init done, GO!");
|
||||||
|
|
||||||
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,33 +1,40 @@
|
|||||||
#include "ntp.h"
|
#include "ntp.h"
|
||||||
|
|
||||||
|
|
||||||
static const char ntpServerName[] = "us.pool.ntp.org";
|
static const char ntpServerName[] = "us.pool.ntp.org";
|
||||||
const int timeZone = 2;
|
// const int timeZone = 2;
|
||||||
unsigned int localPort = 8888; // local port to listen for UDP packets
|
// unsigned int localPort = 8888; // local port to listen for UDP packets
|
||||||
const char *ssid = "iot";
|
const char *ssid = "iot";
|
||||||
const char *password = "Rijnstraat214";
|
const char *password = "Rijnstraat214";
|
||||||
const int NTP_PACKET_SIZE = 48; // NTP time is in the first 48 bytes of message
|
// 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
|
// byte packetBuffer[NTP_PACKET_SIZE]; //buffer to hold incoming & outgoing packets
|
||||||
const unsigned int remotePort = 123;
|
// const unsigned int remotePort = 123;
|
||||||
|
|
||||||
bool printed = false;
|
bool printed = false;
|
||||||
bool wifiConnected = false;
|
bool wifiConnected = false;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
WiFiUDP Udp;
|
// WiFiUDP Udp;
|
||||||
// NTPClient timeClient(Udp);
|
|
||||||
|
|
||||||
bool _timeupdated = false;
|
|
||||||
|
|
||||||
bool timeUpdated()
|
// bool timeUpdated()
|
||||||
|
// {
|
||||||
|
// return _timeupdated;
|
||||||
|
// }
|
||||||
|
|
||||||
|
void initWifi()
|
||||||
{
|
{
|
||||||
return _timeupdated;
|
log_i("init wifi");
|
||||||
|
WiFi.begin(ssid, password);
|
||||||
}
|
}
|
||||||
|
|
||||||
void initNTP()
|
void initNTP()
|
||||||
{
|
{
|
||||||
WiFi.begin(ssid, password);
|
log_i("init ntp");
|
||||||
|
NTP.setTimeZone(TZ_Etc_UTC);
|
||||||
|
NTP.begin();
|
||||||
|
// Udp.begin(localPort);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool getWifiStatus()
|
bool getWifiStatus()
|
||||||
@@ -38,68 +45,73 @@ bool getWifiStatus()
|
|||||||
{
|
{
|
||||||
Serial.print("IP number assigned by DHCP is ");
|
Serial.print("IP number assigned by DHCP is ");
|
||||||
Serial.println(WiFi.localIP());
|
Serial.println(WiFi.localIP());
|
||||||
Serial.println("Starting UDP");
|
|
||||||
Udp.begin(localPort);
|
|
||||||
Serial.println("waiting for sync");
|
|
||||||
printed = true;
|
printed = true;
|
||||||
}
|
}
|
||||||
return wifiConnected;
|
return wifiConnected;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// send an NTP request to the time server at the given address
|
// // send an NTP request to the time server at the given address
|
||||||
void sendNTPpacket(IPAddress &address)
|
// void sendNTPpacket(IPAddress &address)
|
||||||
{
|
// {
|
||||||
// set all bytes in the buffer to 0
|
// // set all bytes in the buffer to 0
|
||||||
memset(packetBuffer, 0, NTP_PACKET_SIZE);
|
// memset(packetBuffer, 0, NTP_PACKET_SIZE);
|
||||||
// Initialize values needed to form NTP request
|
// // Initialize values needed to form NTP request
|
||||||
// (see URL above for details on the packets)
|
// // (see URL above for details on the packets)
|
||||||
packetBuffer[0] = 0b11100011; // LI, Version, Mode
|
// packetBuffer[0] = 0b11100011; // LI, Version, Mode
|
||||||
packetBuffer[1] = 0; // Stratum, or type of clock
|
// packetBuffer[1] = 0; // Stratum, or type of clock
|
||||||
packetBuffer[2] = 6; // Polling Interval
|
// packetBuffer[2] = 6; // Polling Interval
|
||||||
packetBuffer[3] = 0xEC; // Peer Clock Precision
|
// packetBuffer[3] = 0xEC; // Peer Clock Precision
|
||||||
// 8 bytes of zero for Root Delay & Root Dispersion
|
// // 8 bytes of zero for Root Delay & Root Dispersion
|
||||||
packetBuffer[12] = 49;
|
// packetBuffer[12] = 49;
|
||||||
packetBuffer[13] = 0x4E;
|
// packetBuffer[13] = 0x4E;
|
||||||
packetBuffer[14] = 49;
|
// packetBuffer[14] = 49;
|
||||||
packetBuffer[15] = 52;
|
// packetBuffer[15] = 52;
|
||||||
// all NTP fields have been given values, now
|
// // all NTP fields have been given values, now
|
||||||
// you can send a packet requesting a timestamp:
|
// // you can send a packet requesting a timestamp:
|
||||||
Udp.beginPacket(address, 123); // NTP requests are to port 123
|
// Udp.beginPacket(address, 123); // NTP requests are to port 123
|
||||||
Udp.write(packetBuffer, NTP_PACKET_SIZE);
|
// Udp.write(packetBuffer, NTP_PACKET_SIZE);
|
||||||
Udp.endPacket();
|
// Udp.endPacket();
|
||||||
}
|
// }
|
||||||
|
|
||||||
time_t getNtpTime()
|
time_t getNtpTime()
|
||||||
{
|
{
|
||||||
IPAddress ntpServerIP; // NTP server's ip address
|
static int last = 0;
|
||||||
|
|
||||||
while (Udp.parsePacket() > 0)
|
if ((millis () - last) > 1000) {
|
||||||
; // discard any previously received packets
|
last = millis ();
|
||||||
Serial.println("Transmit NTP Request");
|
Serial.println (NTP.getTimeDateStringUs ());
|
||||||
// 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;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
Serial.println("No NTP Response :-(");
|
return NTP.getLastNTPSync();
|
||||||
return 0; // return 0 if unable to get the time
|
// 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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,13 @@
|
|||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
#include <WiFiUdp.h>
|
#include <WiFiUdp.h>
|
||||||
#include <TimeLib.h>
|
#include <TimeLib.h>
|
||||||
|
#include <ESPNtpClient.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void initNTP();
|
void initNTP();
|
||||||
|
void initWifi();
|
||||||
|
|
||||||
void loopNTP();
|
void loopNTP();
|
||||||
|
|
||||||
time_t getNtpTime();
|
time_t getNtpTime();
|
||||||
|
|||||||
Reference in New Issue
Block a user