introduce NTP

This commit is contained in:
2023-09-15 12:52:27 +02:00
parent 4166deb4c3
commit 2be1b302ba
2 changed files with 125 additions and 104 deletions

View File

@@ -15,3 +15,4 @@ framework = arduino
lib_deps =
fbiego/ESP32Time@^2.0.4
neironx/RTCLib@^1.6.0
arduino-libraries/NTPClient@^3.2.1

View File

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