Skip to content

Instantly share code, notes, and snippets.

@dzonesasaki
Last active December 8, 2022 05:21
Show Gist options
  • Save dzonesasaki/76bf9b57f25118a015944d1ea1f08404 to your computer and use it in GitHub Desktop.
Save dzonesasaki/76bf9b57f25118a015944d1ea1f08404 to your computer and use it in GitHub Desktop.
a sample of manual setting the local time on ESP32 using arduino-IDE
#include "lwip/apps/sntp.h"
struct tm gtmCurrentTime;
//#define DEBUGON
void fixDatetime(){
gtmCurrentTime.tm_year = 2022 - 1900;
gtmCurrentTime.tm_mon = 12 -1;
gtmCurrentTime.tm_mday = 6;
gtmCurrentTime.tm_hour = 17;
gtmCurrentTime.tm_min = 30;
gtmCurrentTime.tm_sec = 5;
}
uint32_t calcUnixEpochSecond(){
uint32_t uiTmSec =
gtmCurrentTime.tm_sec
+ gtmCurrentTime.tm_min * 60
+ gtmCurrentTime.tm_hour * 3600
+ countDateFrom1970Jan01() * 3600*24;
return(uiTmSec);
}
uint32_t countDateFrom1970Jan01(){
uint32_t uiTblMonthSumDate[] = {0,31,59,90,120,151,181,212,243,273,304,334,365};
uint32_t uisum=0;
uint32_t uiYear = gtmCurrentTime.tm_year -70;
uint32_t uiLeap4 = uiYear>>2;//uiYear/4;
uint32_t uiSub4 = uiYear&3;//uiYear - uiLeap4*4;
uint32_t uiMonth = gtmCurrentTime.tm_mon;
#ifdef DEBUGON
Serial.print("uiYear= ");
Serial.println(uiYear);
Serial.print("uiLeap4= ");
Serial.println(uiLeap4);
Serial.print("uiSub4= ");
Serial.println(uiSub4);
#endif
uisum += uiTblMonthSumDate[uiMonth];
uisum += ( ((uiYear-2)&3)==0 )*(uiMonth>2);
uisum += gtmCurrentTime.tm_mday-1;
uisum += uiLeap4 * (365*4+1);
uisum += 1 * (uiYear <= 30); // for 1972 to 2000
uisum += uiSub4 * (365);
return(uisum);
}
void printTime(){
Serial.print(" ");
Serial.print(gtmCurrentTime.tm_year+1900);
Serial.print(" / ");
Serial.print(gtmCurrentTime.tm_mon+1);
Serial.print("/");
Serial.print(gtmCurrentTime.tm_mday);
Serial.print(" _ ");
Serial.print(gtmCurrentTime.tm_hour);
Serial.print(":");
Serial.print(gtmCurrentTime.tm_min);
Serial.print(":");
Serial.print(gtmCurrentTime.tm_sec);
Serial.println(" ");
}
void setup() {
Serial.begin(115200);
// put your setup code here, to run once:
Serial.println("initial time ");
getLocalTime( &gtmCurrentTime);
printTime();
Serial.print("date to set: ");
fixDatetime();
printTime();
Serial.print("config now...");
sntp_set_system_time(calcUnixEpochSecond(),0);
Serial.println("gettime :");
getLocalTime( &gtmCurrentTime);
printTime();
Serial.println("wait 5sec");
delay(5*1000);
getLocalTime( &gtmCurrentTime);
printTime();
}
void loop() {
// put your main code here, to run repeatedly:
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment