/****************************************************************************** * 作者:kerwincui * 时间:2021-06-08 * 邮箱:164770707@qq.com * 源码地址:https://gitee.com/kerwincui/wumei-smart * author: kerwincui * create: 2021-06-08 * email:164770707@qq.com * source:https://github.com/kerwincui/wumei-smart ******************************************************************************/ #include "lwip_sntp.h" static const char *TAG = "sntp"; static void obtain_time(void); void sntp_start(void) { time_t now; struct tm timeinfo; time(&now); localtime_r(&now, &timeinfo); ESP_LOGI(TAG, "Connecting to WiFi and getting time over NTP."); obtain_time(); // 使用当前时间更新'now'变量 time(&now); char strftime_buf[64]; // 将时区设置为东部标准时间并打印本地时间 setenv("TZ", "EST5EDT,M3.2.0/2,M11.1.0", 1); tzset(); localtime_r(&now, &timeinfo); strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo); ESP_LOGI(TAG, "The current date/time in New York is: %s", strftime_buf); // 设置时区为中国标准时间 setenv("TZ", "CST-8", 1); tzset(); localtime_r(&now, &timeinfo); strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo); ESP_LOGI(TAG, "The current date/time in Shanghai is: %s", strftime_buf); } //时间同步通知的回调函数 void time_sync_notification_cb(struct timeval *tv) { ESP_LOGI(TAG, "Notification of a time synchronization event"); } //获取时间 static void obtain_time(void) { ESP_LOGI(TAG, "Initializing SNTP"); sntp_setoperatingmode(SNTP_OPMODE_POLL); sntp_setservername(0, "ntp1.aliyun.com"); sntp_setservername(1, "time2.cloud.tencent.com"); sntp_setservername(2, "ntp.ntsc.ac.cn"); sntp_setservername(3, "pool.ntp.org"); sntp_set_time_sync_notification_cb(time_sync_notification_cb); sntp_init(); // 等待时间设定 time_t now = 0; struct tm timeinfo = { 0 }; int retry = 0; const int retry_count = 10; while (sntp_get_sync_status() == SNTP_SYNC_STATUS_RESET && ++retry < retry_count) { ESP_LOGI(TAG, "Waiting for system time to be set... (%d/%d)", retry, retry_count); vTaskDelay(2000 / portTICK_PERIOD_MS); } time(&now); localtime_r(&now, &timeinfo); }