ntp attempt#2
This commit is contained in:
@@ -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
|
||||
@@ -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;
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "TimeLib.h"
|
||||
#include "util.h"
|
||||
#include <Timezone.h> // https://github.com/JChristensen/Timezone
|
||||
#include <ESPNtpClient.h>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,31 +1,9 @@
|
||||
#include <Arduino.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 <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 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!");
|
||||
|
||||
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -3,10 +3,13 @@
|
||||
#include <WiFi.h>
|
||||
#include <WiFiUdp.h>
|
||||
#include <TimeLib.h>
|
||||
#include <ESPNtpClient.h>
|
||||
|
||||
|
||||
|
||||
void initNTP();
|
||||
void initWifi();
|
||||
|
||||
void loopNTP();
|
||||
|
||||
time_t getNtpTime();
|
||||
|
||||
Reference in New Issue
Block a user