新增通过SNTP获取时间功能

This commit is contained in:
jarvis 2025-03-27 14:57:30 +08:00
parent 8110f25142
commit ccf28d0904
11 changed files with 173 additions and 20 deletions

View File

@ -35,6 +35,7 @@
"fluxdisplayport.h": "c",
"esp_lcd_panel_vendor.h": "c",
"float.h": "c",
"esp_log.h": "c"
"esp_log.h": "c",
"sntp.h": "c"
}
}

View File

@ -0,0 +1,3 @@
idf_component_register(SRCS "FluxTime.c"
REQUIRES driver freertos nvs_flash FluxUI lvgl esp_netif
INCLUDE_DIRS ".")

View File

@ -0,0 +1,50 @@
#include <stdio.h>
#include "FluxTime.h"
#include "ui.h"
#include "esp_err.h"
#include "esp_log.h"
/*包含SNTP的头文件*/
#include "lwip/apps/sntp.h"
#include <time.h>
void time_synic_task(void *arg)
{
/*用来进行显示的字符串*/
char strftime_buf[64];
/*大数*/
time_t now = 0;
/*时间结构体*/
struct tm timeinfo = {0};
ESP_LOGI("SNTP..........","SNTP task start");
while (1)
{ /*1秒钟更新一下显示时间*/
vTaskDelay(1000 / portTICK_PERIOD_MS);
time(&now);
localtime_r(&now, &timeinfo);
strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo);
lv_label_set_text_fmt(ui_pageTimeDebug_labelHearderTime,"%s",strftime_buf);
ESP_LOGI("SNTP","The current date/time in China is: %s", strftime_buf);
}
}
char get_time_str(void)
{
char strftime_buf[64];
time_t now = 0;
struct tm timeinfo = {0};
time(&now);
localtime_r(&now, &timeinfo);
strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo);
return strftime_buf;
}

View File

@ -0,0 +1,32 @@
/*
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Unlicense OR CC0-1.0
*/
#ifndef _FLUX_TIME_H
#define _FLUX_TIME_H
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#define USE_TIME_SYNC_TASK 0
/*时间同步任务*/
void time_synic_task(void *arg);
/*获取当前时间*/
char get_time_str(void);
#ifdef __cplusplus
}
#endif
#endif /*_FLUX_TIME_H */

View File

@ -41,5 +41,5 @@ ui_event_debug.c
)
idf_component_register(SRCS ${SOURCES}
PRIV_REQUIRES driver lvgl FluxWifi FluxUart FluxSD FluxProtocol
PRIV_REQUIRES driver lvgl FluxWifi FluxUart FluxSD FluxProtocol lwip esp_netif
INCLUDE_DIRS "." )

View File

@ -19,7 +19,7 @@
/*选择是否使能Debug页面的操作*/
#define MODE_TEST 1
#define MODE_TEST 0
/*流量计当前示数回传函数——Debug模式*/
void on_buttonFluxRead_clicked(lv_event_t * e)
@ -45,7 +45,44 @@ void on_buttonFluxRead_clicked(lv_event_t * e)
/*流量计当前示数显示——Debug模式*/
void on_buttonClearTextarea_clicked(lv_event_t * e)
{
#if MODE_TEST
#if MODE_TEST
lv_textarea_set_text(ui_pageFluxDebug_textAreaContent, "");
#endif
#endif
}
void on_buttonGetTime_clicked(lv_event_t * e)
{
#if MODE_TEST
/*获取当前北京时间*/
/*当WiFi开启时进行时间获取*/
char strftime_buf[64];
time_t now = 0;
struct tm timeinfo = {0};
int retry = 0;
while(timeinfo.tm_year < (2022 - 1900)) {
ESP_LOGI("SNTP","Waiting for system time to be set... (%d)", ++retry);
vTaskDelay(1000 / portTICK_PERIOD_MS);
time(&now);
localtime_r(&now, &timeinfo);
strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo);
ESP_LOGI("SNTP","The current date/time in China is: %s", strftime_buf);
if (retry == 2)
{
break;
}
}
strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo);
ESP_LOGI("SNTP","The current date/time in China is: %s", strftime_buf);
#endif
}

View File

@ -18,6 +18,10 @@
#include "FluxProtocol.h"
/*包含SNTP的头文件*/
#include "lwip/apps/sntp.h"
#include <time.h>
#define LOWERST_LIGHT_LEVEL (7222)
/*更新当前测试标准*/
@ -470,10 +474,3 @@ void on_dropdownPulseTimes_valueChanged(lv_event_t * e)
ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame));
}
void on_buttonGetTime_clicked(lv_event_t * e)
{
/*获取当前北京时间*/
}

View File

@ -3,6 +3,10 @@
#include "ui.h"
/*包含SNTP的头文件*/
#include "lwip/apps/sntp.h"
#include <time.h>
wifi_ap_record_t ap_info[DEFAULT_SCAN_LIST_SIZE];
int number = 0, ap_count = 0;
@ -69,14 +73,19 @@ static void event_handler(void* arg, esp_event_base_t event_base,
} else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED)
{
/* Disconnected from Wi-Fi */
ESP_LOGI(TAG, "Disconnected from Wi-Fi");
lv_label_set_text_fmt(ui_pageWifiConnect_labelHeaderTitle, "%s", "WIFI-Disconnected");
lv_obj_clear_state(ui_pageHome_switchWifiShow, LV_STATE_CHECKED);
lv_label_set_text(ui_pageWifiConnect_labelConnectWifi, "Connect");
/*关闭SNTP*/
sntp_stop();
} else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP)
{
/*成功连入互联网同时获得IP地址*/
ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;
ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip));
@ -85,6 +94,22 @@ static void event_handler(void* arg, esp_event_base_t event_base,
lv_obj_add_state(ui_pageHome_switchWifiShow, LV_STATE_CHECKED);
lv_label_set_text(ui_pageWifiConnect_labelConnectWifi, "disconnect");
/*开启SNTP进行时间同步*/
/*初始化SNTP*/
ESP_LOGI("on_buttonGetTime_clicked","wifi is open");
ESP_LOGI("SNTP","Initializing SNTP");
sntp_setoperatingmode(SNTP_OPMODE_POLL);
sntp_setservername(0,"ntp1.aliyun.com");
sntp_setservername(1,"ntp2.aliyun.com");
sntp_init();
setenv("TZ","GMT-8", 1);
tzset();
}
}

View File

@ -4,7 +4,7 @@ if(CONFIG_EXAMPLE_LCD_IMAGE_FROM_EMBEDDED_BINARY)
endif()
idf_component_register(SRCS "main.cpp" ${embedded_images}
REQUIRES FluxDisplayPort FluxUI FluxPower spiffs FluxSD FluxButton FluxWifi FluxUart 78__esp-wifi-connect nvs_flash FluxProtocol
REQUIRES FluxDisplayPort FluxUI FluxPower spiffs FluxSD FluxButton FluxWifi FluxUart 78__esp-wifi-connect nvs_flash FluxProtocol FluxTime
INCLUDE_DIRS ".")
if(CONFIG_EXAMPLE_LCD_IMAGE_FROM_FILE_SYSTEM)

View File

@ -9,6 +9,8 @@
/*包含通讯协议头文件*/
#include "FluxProtocol.h"
#define PROGRESS_DELAY_TIME 500
extern "C" void app_main(void)
{
/*初始化SD卡*/
@ -49,38 +51,42 @@ extern "C" void app_main(void)
lv_bar_set_value(ui_pageWelCome_barStartProgress,20,LV_ANIM_ON);
lv_label_set_text(ui_pageWelCome_labelStartInfo,"turned on backlight 20%");
vTaskDelay(500/portTICK_PERIOD_MS);
vTaskDelay(PROGRESS_DELAY_TIME/portTICK_PERIOD_MS);
/*初始化按键*/
lv_bar_set_value(ui_pageWelCome_barStartProgress,30,LV_ANIM_ON);
lv_label_set_text(ui_pageWelCome_labelStartInfo,"Release the power button 30%");
vTaskDelay(500/portTICK_PERIOD_MS);
vTaskDelay(PROGRESS_DELAY_TIME/portTICK_PERIOD_MS);
/*初始化电源管理系统*/
powerInit();
lv_bar_set_value(ui_pageWelCome_barStartProgress,50,LV_ANIM_ON);
lv_label_set_text(ui_pageWelCome_labelStartInfo,"power management system 50%");
vTaskDelay(500/portTICK_PERIOD_MS);
vTaskDelay(PROGRESS_DELAY_TIME/portTICK_PERIOD_MS);
lv_bar_set_value(ui_pageWelCome_barStartProgress,70,LV_ANIM_ON);
lv_label_set_text(ui_pageWelCome_labelStartInfo,"WiFi scanning environment 70%");
vTaskDelay(500/portTICK_PERIOD_MS);
vTaskDelay(PROGRESS_DELAY_TIME/portTICK_PERIOD_MS);
/*创建串口任务*/
/*创建UART1响应任务*/
xTaskCreate(uart1_echoTask, "uart1_echo_task", ECHO_TASK_STACK_SIZE, NULL, 10, NULL);
xTaskCreate(uart1_echoTask, "uart1_echo_task", 8*1024, NULL, 10, NULL);
lv_bar_set_value(ui_pageWelCome_barStartProgress,90,LV_ANIM_ON);
lv_label_set_text(ui_pageWelCome_labelStartInfo,"serial port task 90%");
vTaskDelay(300/portTICK_PERIOD_MS);
vTaskDelay(PROGRESS_DELAY_TIME/portTICK_PERIOD_MS);
#if USE_TIME_SYNC_TASK
/*创建本地时间同步任务*/
xTaskCreate(time_synic_task, "time_synic_task", 8*1024, NULL, 10, NULL);
#endif
#if 0/*暂时不支持呼吸模拟器*/
/*创建UART2响应任务*/
xTaskCreate(uart2_echoTask, "uart2_echo_task", ECHO_TASK_STACK_SIZE, NULL, 10, NULL);
lv_bar_set_value(ui_pageWelCome_barStartProgress,100,LV_ANIM_ON);
lv_label_set_text(ui_pageWelCome_labelStartInfo,"serial port task 100%");
vTaskDelay(500/portTICK_PERIOD_MS);
vTaskDelay(PROGRESS_DELAY_TIME/portTICK_PERIOD_MS);
#endif
lv_scr_load_anim(ui_pageHome, LV_SCR_LOAD_ANIM_OUT_TOP, 800, 0, false);

View File

@ -49,5 +49,7 @@
/* Include key control header file */
#include "FluxButton.h"
/*包含时间同步头文件*/
#include "FluxTime.h"
#endif