新增通过SNTP获取时间功能
This commit is contained in:
parent
8110f25142
commit
ccf28d0904
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
3
components/FluxTime/CMakeLists.txt
Normal file
3
components/FluxTime/CMakeLists.txt
Normal file
@ -0,0 +1,3 @@
|
||||
idf_component_register(SRCS "FluxTime.c"
|
||||
REQUIRES driver freertos nvs_flash FluxUI lvgl esp_netif
|
||||
INCLUDE_DIRS ".")
|
||||
50
components/FluxTime/FluxTime.c
Normal file
50
components/FluxTime/FluxTime.c
Normal 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;
|
||||
}
|
||||
32
components/FluxTime/FluxTime.h
Normal file
32
components/FluxTime/FluxTime.h
Normal 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 */
|
||||
@ -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 "." )
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
|
||||
|
||||
/*选择是否使能Debug页面的操作*/
|
||||
#define MODE_TEST 1
|
||||
#define MODE_TEST 0
|
||||
|
||||
/*流量计当前示数回传函数——Debug模式*/
|
||||
void on_buttonFluxRead_clicked(lv_event_t * e)
|
||||
@ -49,3 +49,40 @@ void on_buttonClearTextarea_clicked(lv_event_t * e)
|
||||
lv_textarea_set_text(ui_pageFluxDebug_textAreaContent, "");
|
||||
#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
|
||||
|
||||
}
|
||||
@ -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)
|
||||
{
|
||||
/*获取当前北京时间*/
|
||||
|
||||
}
|
||||
@ -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();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -49,5 +49,7 @@
|
||||
/* Include key control header file */
|
||||
#include "FluxButton.h"
|
||||
|
||||
/*包含时间同步头文件*/
|
||||
#include "FluxTime.h"
|
||||
|
||||
#endif
|
||||
Loading…
Reference in New Issue
Block a user