This is the code that I am working on:
//My 60 Pixel Ring Clock Version 2
#include <Wire.h>
#include <Adafruit_NeoPixel.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#define getNTPtime
#define PIN 4
#define PIXEL 60
int LED = 0;
int ihour;
int iminute;
int isecond;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL, PIN, NEO_GRB + NEO_KHZ800);
//DateTime Clock; // Holds current clock time
byte hourval, minuteval, secondval;
char ssid[] = "jcoones"; // your network SSID (name)
char pass[] = "VE3JOCb/a!"; // your network password
unsigned int localPort = 2390; // local port to listen for UDP packets
/* Don't hardwire the IP address or we won't get the benefits of the pool.
Lookup the IP address for the host name instead */
//IPAddress timeServer(129, 6, 15, 28); // time.nist.gov NTP server
IPAddress timeServerIP; // time.nist.gov NTP server address
const char* ntpServerName = "0.pool.ntp.org";
const int NTP_PACKET_SIZE = 48; // NTP time stamp is in the first 48 bytes of the message
byte packetBuffer[ NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets
// A UDP instance to let us send and receive packets over UDP
WiFiUDP udp;
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println();
Wire.begin(); // Begin I2C
getNTPtime(hourval, minuteval, secondval); //Get the time from NTP Server
strip.begin();
strip.show(); // Initialize all pixels to 'off'
strip.setBrightness(20);
}
void loop() {
secondval = isecond; // get seconds
minuteval = iminute; // get minutes
hourval = ihour; // get the hour
switch (hourval) { //Synchronize the LEDs for 12 hour clock.
case 1: case 13:
LED = 5;
break;
case 2: case 14:
LED = 10;
break;
case 3: case 15:
LED = 15;
break;
case 4: case 16:
LED = 20;
break;
case 5: case 17:
LED = 25;
break;
case 6: case 18:
LED = 30;
break;
case 7: case 19:
LED = 35;
break;
case 8: case 20:
LED = 40;
break;
case 9: case 21:
LED = 45;
break;
case 10: case 22:
LED = 50;
break;
case 11: case 23:
LED = 55;
break;
case 12: case 0:;
LED = 0;
break;
}
strip.setPixelColor(minuteval, 0x008000); // Turn on LED for minutes.
strip.setPixelColor(secondval, 0x0000ff); // Turn on LED for seconds.
strip.setPixelColor(LED, 0xff0000); // Turn on LED for hours.
strip.show();
strip.setPixelColor(LED, 0x000000); // Turn off LED for minutes.
strip.setPixelColor(minuteval, 0x000000); // Turn off LED for seconds.
strip.setPixelColor(secondval, 0x000000); // Turn off LED for hours.
//=========================================
//Get the time from NTP Server
//=========================================
getNTPtime(hourval, minuteval, secondval); // We start by connecting to a WiFi network
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.println("Starting UDP");
udp.begin(localPort);
Serial.print("Local port: ");
Serial.println(udp.localPort());
}
//get a random server from the pool
WiFi.hostByName(ntpServerName, timeServerIP);
sendNTPpacket(timeServerIP); // send an NTP packet to a time server
// wait to see if a reply is available
delay(1000);
int cb = udp.parsePacket();
if (!cb) {
Serial.println("no packet yet");
}
else {
Serial.print("packet received, length=");
Serial.println(cb);
// We've received a packet, read the data from it
udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer
//the timestamp starts at byte 40 of the received packet and is four bytes,
// or two words, long. First, esxtract the two words:
unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
// combine the four bytes (two words) into a long integer
// this is NTP time (seconds since Jan 1 1900):
unsigned long secsSince1900 = highWord << 16 | lowWord;
Serial.print("Seconds since Jan 1 1900 = " );
Serial.println(secsSince1900);
// now convert NTP time into everyday time:
Serial.print("Unix time = ");
// Unix time starts on Jan 1 1970. In seconds, that's 2208988800:
const unsigned long seventyYears = 2208988800UL;
// subtract seventy years:
unsigned long epoch = secsSince1900 - seventyYears;
// print Unix time:
Serial.println(epoch);
// print the hour, minute and second:
ihour = (epoch % 86400L) / 3600; //Get the Hour
Serial.print("The UTC time is "); // UTC is the time at Greenwich Meridian (GMT)
Serial.print((epoch % 86400L) / 3600); // print the hour (86400 equals secs per day)
Serial.print(':');
//if ( ((epoch % 3600) / 60) < 10 ) {
// In the first 10 minutes of each hour, we'll want a leading '0'
//Serial.print('0');
}
iminute = (epoch % 3600) / 60); //Get the minutes
Serial.print((epoch % 3600) / 60); // print the minute (3600 equals secs per minute)
Serial.print(':');
//if ( (epoch % 60) < 10 ) {
// In the first 10 seconds of each minute, we'll want a leading '0'
//Serial.print('0');
//}
isecond = (epoch % 60); //Get the seconds
Serial.println(epoch % 60); // print the second
return hourval, minuteval, secondval;