introduce NTP
This commit is contained in:
@@ -15,3 +15,4 @@ framework = arduino
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
fbiego/ESP32Time@^2.0.4
|
fbiego/ESP32Time@^2.0.4
|
||||||
neironx/RTCLib@^1.6.0
|
neironx/RTCLib@^1.6.0
|
||||||
|
arduino-libraries/NTPClient@^3.2.1
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
#include <NTPClient.h>
|
||||||
|
// change next line to use with another board/shield
|
||||||
|
#include <WiFi.h>
|
||||||
|
//#include <WiFi.h> // for WiFi shield
|
||||||
|
//#include <WiFi101.h> // for WiFi 101 shield or MKR1000
|
||||||
|
#include <WiFiUdp.h>
|
||||||
const String FirmwareVersion="010310";
|
const String FirmwareVersion="010310";
|
||||||
//Format _X.XX__
|
//Format _X.XX__
|
||||||
//NIXIE CLOCK MCU107 by GRA & AFCH (fominalec@gmail.com)
|
//NIXIE CLOCK MCU107 by GRA & AFCH (fominalec@gmail.com)
|
||||||
@@ -21,7 +27,7 @@
|
|||||||
//#include <ClickButton.h>
|
//#include <ClickButton.h>
|
||||||
//#include <TimeLib.h>
|
//#include <TimeLib.h>
|
||||||
//#include <Tone.h>
|
//#include <Tone.h>
|
||||||
#include <EEPROM.h>
|
// #include <EEPROM.h>
|
||||||
#include <ESP32Time.h>
|
#include <ESP32Time.h>
|
||||||
#include <RTClib.h>
|
#include <RTClib.h>
|
||||||
|
|
||||||
@@ -183,8 +189,13 @@ int functionDownButton=0;
|
|||||||
int functionUpButton=0;
|
int functionUpButton=0;
|
||||||
bool LEDsLock=false;
|
bool LEDsLock=false;
|
||||||
|
|
||||||
ESP32Time tijd(3600);
|
//ESP32Time tijd(3600);
|
||||||
DS1307 rtc;
|
DS1307 rtc;
|
||||||
|
const char *ssid = "iot";
|
||||||
|
const char *password = "Rijnstraat214";
|
||||||
|
|
||||||
|
WiFiUDP ntpUDP;
|
||||||
|
NTPClient timeClient(ntpUDP);
|
||||||
|
|
||||||
void doTest();
|
void doTest();
|
||||||
void getRTCTime();
|
void getRTCTime();
|
||||||
@@ -208,12 +219,18 @@ void setup()
|
|||||||
//setRTCDateTime(23,40,00,25,7,15,1);
|
//setRTCDateTime(23,40,00,25,7,15,1);
|
||||||
|
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
|
WiFi.begin(ssid, password);
|
||||||
if (!rtc.isrunning()) {
|
|
||||||
Serial.println("RTC is NOT running!");
|
while ( WiFi.status() != WL_CONNECTED ) {
|
||||||
// following line sets the RTC to the date & time this sketch was compiled
|
delay ( 500 );
|
||||||
rtc.adjust(DateTime(__DATE__, __TIME__));
|
Serial.print ( "." );
|
||||||
}
|
}
|
||||||
|
timeClient.begin();
|
||||||
|
// if (!rtc.isrunning()) {
|
||||||
|
// Serial.println("RTC is NOT running!");
|
||||||
|
// // following line sets the RTC to the date & time this sketch was compiled
|
||||||
|
// rtc.adjust(DateTime(__DATE__, __TIME__));
|
||||||
|
// }
|
||||||
|
|
||||||
// if (EEPROM.read(HourFormatEEPROMAddress)!=12) value[hModeValueIndex]=24; else value[hModeValueIndex]=12;
|
// if (EEPROM.read(HourFormatEEPROMAddress)!=12) value[hModeValueIndex]=24; else value[hModeValueIndex]=12;
|
||||||
// if (EEPROM.read(RGBLEDsEEPROMAddress)!=0) RGBLedsOn=true; else RGBLedsOn=false;
|
// if (EEPROM.read(RGBLEDsEEPROMAddress)!=0) RGBLedsOn=true; else RGBLedsOn=false;
|
||||||
@@ -247,6 +264,9 @@ void setup()
|
|||||||
SPI.setDataMode (SPI_MODE3); // Mode 3 SPI
|
SPI.setDataMode (SPI_MODE3); // Mode 3 SPI
|
||||||
SPI.setClockDivider(SPI_CLOCK_DIV128); // SCK = 16MHz/128= 125kHz
|
SPI.setClockDivider(SPI_CLOCK_DIV128); // SCK = 16MHz/128= 125kHz
|
||||||
|
|
||||||
|
pinMode(Anode0Pin, OUTPUT);
|
||||||
|
pinMode(Anode1Pin, OUTPUT);
|
||||||
|
pinMode(Anode2Pin, OUTPUT);
|
||||||
//buttons pins inits
|
//buttons pins inits
|
||||||
// pinMode(pinSet, INPUT_PULLUP);
|
// pinMode(pinSet, INPUT_PULLUP);
|
||||||
// pinMode(pinUp, INPUT_PULLUP);
|
// pinMode(pinUp, INPUT_PULLUP);
|
||||||
@@ -319,14 +339,14 @@ long modesChangePeriod=timeModePeriod;
|
|||||||
MAIN Programm
|
MAIN Programm
|
||||||
***************************************************************************************************************/
|
***************************************************************************************************************/
|
||||||
void loop() {
|
void loop() {
|
||||||
|
timeClient.update();
|
||||||
if (((millis()%60000)==0)&&(RTC_present)) //synchronize with RTC every 10 seconds
|
// if (((millis()%60000)==0)&&(RTC_present)) //synchronize with RTC every 10 seconds
|
||||||
{
|
// {
|
||||||
getRTCTime();
|
// getRTCTime();
|
||||||
setTime(RTC_hours, RTC_minutes, RTC_seconds, RTC_day, RTC_month, RTC_year);
|
// setTime(RTC_hours, RTC_minutes, RTC_seconds, RTC_day, RTC_month, RTC_year);
|
||||||
Serial.println("sync:");
|
// Serial.println("sync:");
|
||||||
Serial.println(RTC_seconds);
|
// Serial.println(RTC_seconds);
|
||||||
}
|
// }
|
||||||
|
|
||||||
//p=playmusic(p);
|
//p=playmusic(p);
|
||||||
|
|
||||||
@@ -336,22 +356,22 @@ void loop() {
|
|||||||
// prevTime4FireWorks=millis();
|
// prevTime4FireWorks=millis();
|
||||||
// }
|
// }
|
||||||
|
|
||||||
if ((menuPosition==TimeIndex) || (modeChangedByUser==false) ) modesChanger();
|
// if ((menuPosition==TimeIndex) || (modeChangedByUser==false) ) modesChanger();
|
||||||
doIndication();
|
doIndication();
|
||||||
|
|
||||||
// setButton.Update();
|
// setButton.Update();
|
||||||
// upButton.Update();
|
// upButton.Update();
|
||||||
// downButton.Update();
|
// downButton.Update();
|
||||||
if (editMode==false)
|
// if (editMode==false)
|
||||||
{
|
// {
|
||||||
blinkMask=B00000000;
|
// blinkMask=B00000000;
|
||||||
|
|
||||||
} else if ((millis()-enteringEditModeTime)>60000)
|
// } else if ((millis()-enteringEditModeTime)>60000)
|
||||||
{
|
// {
|
||||||
editMode=false;
|
// editMode=false;
|
||||||
menuPosition=firstChild[menuPosition];
|
// menuPosition=firstChild[menuPosition];
|
||||||
blinkMask=blinkPattern[menuPosition];
|
// blinkMask=blinkPattern[menuPosition];
|
||||||
}
|
// }
|
||||||
// if (setButton.clicks>0) //short click
|
// if (setButton.clicks>0) //short click
|
||||||
// {
|
// {
|
||||||
// modeChangedByUser=true;
|
// modeChangedByUser=true;
|
||||||
@@ -484,33 +504,33 @@ void loop() {
|
|||||||
case TimeIndex: //time mode
|
case TimeIndex: //time mode
|
||||||
if (!transactionInProgress) stringToDisplay=updateDisplayString();
|
if (!transactionInProgress) stringToDisplay=updateDisplayString();
|
||||||
doDotBlink();
|
doDotBlink();
|
||||||
checkAlarmTime();
|
//checkAlarmTime();
|
||||||
break;
|
break;
|
||||||
case DateIndex: //date mode
|
case DateIndex: //date mode
|
||||||
if (!transactionInProgress) stringToDisplay=updateDateString();
|
if (!transactionInProgress) stringToDisplay=updateDateString();
|
||||||
dotPattern=B01000000;//turn on lower dots
|
dotPattern=B01000000;//turn on lower dots
|
||||||
/*digitalWrite(pinUpperDots, LOW);
|
/*digitalWrite(pinUpperDots, LOW);
|
||||||
digitalWrite(pinLowerDots, HIGH);*/
|
digitalWrite(pinLowerDots, HIGH);*/
|
||||||
checkAlarmTime();
|
//checkAlarmTime();
|
||||||
break;
|
|
||||||
case AlarmIndex: //alarm mode
|
|
||||||
stringToDisplay=PreZero(value[AlarmHourIndex])+PreZero(value[AlarmMinuteIndex])+PreZero(value[AlarmSecondIndex]);
|
|
||||||
if (value[Alarm01]==1) /*digitalWrite(pinUpperDots, HIGH);*/ dotPattern=B10000000; //turn on upper dots
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/*digitalWrite(pinUpperDots, LOW);
|
|
||||||
digitalWrite(pinLowerDots, LOW);*/
|
|
||||||
dotPattern=B00000000; //turn off upper dots
|
|
||||||
}
|
|
||||||
checkAlarmTime();
|
|
||||||
break;
|
|
||||||
case hModeIndex: //12/24 hours mode
|
|
||||||
stringToDisplay="00"+String(value[hModeValueIndex])+"00";
|
|
||||||
dotPattern=B00000000;//turn off all dots
|
|
||||||
/*digitalWrite(pinUpperDots, LOW);
|
|
||||||
digitalWrite(pinLowerDots, LOW);*/
|
|
||||||
checkAlarmTime();
|
|
||||||
break;
|
break;
|
||||||
|
// case AlarmIndex: //alarm mode
|
||||||
|
// stringToDisplay=PreZero(value[AlarmHourIndex])+PreZero(value[AlarmMinuteIndex])+PreZero(value[AlarmSecondIndex]);
|
||||||
|
// if (value[Alarm01]==1) /*digitalWrite(pinUpperDots, HIGH);*/ dotPattern=B10000000; //turn on upper dots
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// /*digitalWrite(pinUpperDots, LOW);
|
||||||
|
// digitalWrite(pinLowerDots, LOW);*/
|
||||||
|
// dotPattern=B00000000; //turn off upper dots
|
||||||
|
// }
|
||||||
|
// //checkAlarmTime();
|
||||||
|
// break;
|
||||||
|
// case hModeIndex: //12/24 hours mode
|
||||||
|
// stringToDisplay="00"+String(value[hModeValueIndex])+"00";
|
||||||
|
// dotPattern=B00000000;//turn off all dots
|
||||||
|
// /*digitalWrite(pinUpperDots, LOW);
|
||||||
|
// digitalWrite(pinLowerDots, LOW);*/
|
||||||
|
// //checkAlarmTime();
|
||||||
|
// break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -579,9 +599,9 @@ void doIndication()
|
|||||||
|
|
||||||
switch (b)
|
switch (b)
|
||||||
{
|
{
|
||||||
case 1:{Anode0ON; Anode1OFF; Anode2OFF; break;};
|
case 1:{Anode0ON; Anode1OFF; Anode2OFF; break;};
|
||||||
case 2:{Anode0OFF; Anode1ON; Anode2OFF; break;};
|
case 2:{Anode0OFF; Anode1ON; Anode2OFF; break;};
|
||||||
case 3:{Anode0OFF; Anode1OFF; Anode2ON; break;};
|
case 3:{Anode0OFF; Anode1OFF; Anode2ON; break;};
|
||||||
}
|
}
|
||||||
b=b+1;
|
b=b+1;
|
||||||
if (b==4) {b=1;}
|
if (b==4) {b=1;}
|
||||||
@@ -744,9 +764,9 @@ byte bcdToDec(byte val) {
|
|||||||
|
|
||||||
void getRTCTime()
|
void getRTCTime()
|
||||||
{
|
{
|
||||||
DateTime now = rtc.now();
|
DateTime now = timeClient.;
|
||||||
char buf[20];
|
// char buf[20];
|
||||||
Serial.println(now.tostr(buf));
|
// Serial.println(tijd.tostr(buf));
|
||||||
// Wire.beginTransmission(DS1307_ADDRESS);
|
// Wire.beginTransmission(DS1307_ADDRESS);
|
||||||
// Wire.write(zero);
|
// Wire.write(zero);
|
||||||
// Wire.endTransmission();
|
// Wire.endTransmission();
|
||||||
@@ -838,62 +858,62 @@ bool isValidDate()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
byte default_dur = 4;
|
// byte default_dur = 4;
|
||||||
byte default_oct = 6;
|
// byte default_oct = 6;
|
||||||
int bpm = 63;
|
// int bpm = 63;
|
||||||
int num;
|
// int num;
|
||||||
long wholenote;
|
// long wholenote;
|
||||||
long duration;
|
// long duration;
|
||||||
byte note;
|
// byte note;
|
||||||
byte scale;
|
// byte scale;
|
||||||
char* parseSong(char *p)
|
// char* parseSong(char *p)
|
||||||
{
|
// {
|
||||||
// Absolutely no error checking in here
|
// // Absolutely no error checking in here
|
||||||
// format: d=N,o=N,b=NNN:
|
// // format: d=N,o=N,b=NNN:
|
||||||
// find the start (skip name, etc)
|
// // find the start (skip name, etc)
|
||||||
|
|
||||||
while(*p != ':') p++; // ignore name
|
// while(*p != ':') p++; // ignore name
|
||||||
p++; // skip ':'
|
// p++; // skip ':'
|
||||||
|
|
||||||
// get default duration
|
// // get default duration
|
||||||
if(*p == 'd')
|
// if(*p == 'd')
|
||||||
{
|
// {
|
||||||
p++; p++; // skip "d="
|
// p++; p++; // skip "d="
|
||||||
num = 0;
|
// num = 0;
|
||||||
while(isdigit(*p))
|
// while(isdigit(*p))
|
||||||
{
|
// {
|
||||||
num = (num * 10) + (*p++ - '0');
|
// num = (num * 10) + (*p++ - '0');
|
||||||
}
|
// }
|
||||||
if(num > 0) default_dur = num;
|
// if(num > 0) default_dur = num;
|
||||||
p++; // skip comma
|
// p++; // skip comma
|
||||||
}
|
// }
|
||||||
|
|
||||||
// get default octave
|
// // get default octave
|
||||||
if(*p == 'o')
|
// if(*p == 'o')
|
||||||
{
|
// {
|
||||||
p++; p++; // skip "o="
|
// p++; p++; // skip "o="
|
||||||
num = *p++ - '0';
|
// num = *p++ - '0';
|
||||||
if(num >= 3 && num <=7) default_oct = num;
|
// if(num >= 3 && num <=7) default_oct = num;
|
||||||
p++; // skip comma
|
// p++; // skip comma
|
||||||
}
|
// }
|
||||||
|
|
||||||
// get BPM
|
// // get BPM
|
||||||
if(*p == 'b')
|
// if(*p == 'b')
|
||||||
{
|
// {
|
||||||
p++; p++; // skip "b="
|
// p++; p++; // skip "b="
|
||||||
num = 0;
|
// num = 0;
|
||||||
while(isdigit(*p))
|
// while(isdigit(*p))
|
||||||
{
|
// {
|
||||||
num = (num * 10) + (*p++ - '0');
|
// num = (num * 10) + (*p++ - '0');
|
||||||
}
|
// }
|
||||||
bpm = num;
|
// bpm = num;
|
||||||
p++; // skip colon
|
// p++; // skip colon
|
||||||
}
|
// }
|
||||||
|
|
||||||
// BPM usually expresses the number of quarter notes per minute
|
// // BPM usually expresses the number of quarter notes per minute
|
||||||
wholenote = (60 * 1000L / bpm) * 4; // this is the time for whole note (in milliseconds)
|
// wholenote = (60 * 1000L / bpm) * 4; // this is the time for whole note (in milliseconds)
|
||||||
return p;
|
// return p;
|
||||||
}
|
// }
|
||||||
|
|
||||||
// now begin note loop
|
// now begin note loop
|
||||||
// static unsigned long lastTimeNotePlaying=0;
|
// static unsigned long lastTimeNotePlaying=0;
|
||||||
@@ -1131,14 +1151,14 @@ String updateDisplayString()
|
|||||||
|
|
||||||
String getTimeNow()
|
String getTimeNow()
|
||||||
{
|
{
|
||||||
DateTime time = rtc.now();
|
// DateTime time = rtc.now();
|
||||||
if (value[hModeValueIndex]==24) return PreZero(tijd.getHour())+PreZero(tijd.getMinute())+PreZero(tijd.getSecond());
|
if (value[hModeValueIndex]==24) return PreZero(tijd.getHour())+PreZero(tijd.getMinute())+PreZero(tijd.getSecond());
|
||||||
else return PreZero(tijd.getHour())+PreZero(tijd.getMinute())+PreZero(tijd.getSecond());
|
else return PreZero(tijd.getHour())+PreZero(tijd.getMinute())+PreZero(tijd.getSecond());
|
||||||
}
|
}
|
||||||
|
|
||||||
String updateDateString()
|
String updateDateString()
|
||||||
{
|
{
|
||||||
DateTime time = rtc.now();
|
// DateTime time = tijd.now();
|
||||||
static unsigned long lastTimeDateUpdate=millis();
|
static unsigned long lastTimeDateUpdate=millis();
|
||||||
static String DateString=PreZero(tijd.getDay())+PreZero(tijd.getMonth())+PreZero(tijd.getYear()%1000);
|
static String DateString=PreZero(tijd.getDay())+PreZero(tijd.getMonth())+PreZero(tijd.getYear()%1000);
|
||||||
if ((millis()-lastTimeDateUpdate)>1000)
|
if ((millis()-lastTimeDateUpdate)>1000)
|
||||||
|
|||||||
Reference in New Issue
Block a user