mirror of
https://gitee.com/beecue/fastbee.git
synced 2025-12-19 01:15:54 +08:00
79 lines
2.3 KiB
C
79 lines
2.3 KiB
C
/******************************************************************************
|
||
* 作者: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);
|
||
|
||
}
|
||
|