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 = 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

View File

@@ -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)