Added clock.
This commit is contained in:
parent
85ce092f39
commit
f531b89c4d
|
@ -4,7 +4,6 @@ idf_component_register(SRCS
|
||||||
"assets/fonts/bebas_neue/bebas_neue_120.c"
|
"assets/fonts/bebas_neue/bebas_neue_120.c"
|
||||||
"assets/fonts/material_webfont/material_webfont_32.c"
|
"assets/fonts/material_webfont/material_webfont_32.c"
|
||||||
"main.c"
|
"main.c"
|
||||||
"service/service_wifi.c"
|
|
||||||
"impl/impl_btn.c"
|
"impl/impl_btn.c"
|
||||||
"impl/impl_dht.c"
|
"impl/impl_dht.c"
|
||||||
"impl/impl_epd.c"
|
"impl/impl_epd.c"
|
||||||
|
@ -166,7 +165,9 @@ idf_component_register(SRCS
|
||||||
"lib/lvgl/src/widgets/lv_switch.c"
|
"lib/lvgl/src/widgets/lv_switch.c"
|
||||||
"lib/lvgl/src/widgets/lv_table.c"
|
"lib/lvgl/src/widgets/lv_table.c"
|
||||||
"lib/lvgl/src/widgets/lv_textarea.c"
|
"lib/lvgl/src/widgets/lv_textarea.c"
|
||||||
|
"service/service_clock.c"
|
||||||
"service/service_dht.c"
|
"service/service_dht.c"
|
||||||
|
"service/service_wifi.c"
|
||||||
|
|
||||||
INCLUDE_DIRS
|
INCLUDE_DIRS
|
||||||
"lib"
|
"lib"
|
||||||
|
|
|
@ -230,7 +230,7 @@ esp_err_t impl_lvgl_init(void) {
|
||||||
lv_theme_t *default_theme = lv_theme_mono_init(disp, false, &lv_font_unscii_16);
|
lv_theme_t *default_theme = lv_theme_mono_init(disp, false, &lv_font_unscii_16);
|
||||||
lv_disp_set_theme(disp, default_theme);
|
lv_disp_set_theme(disp, default_theme);
|
||||||
|
|
||||||
s_lv_semphr_handle = xSemaphoreCreateBinary();
|
s_lv_semphr_handle = xSemaphoreCreateMutex();
|
||||||
if (s_lv_semphr_handle == NULL) {
|
if (s_lv_semphr_handle == NULL) {
|
||||||
ESP_LOGE(LOG_TAG, "LVGL semaphore creation failed.");
|
ESP_LOGE(LOG_TAG, "LVGL semaphore creation failed.");
|
||||||
return ESP_FAIL;
|
return ESP_FAIL;
|
||||||
|
|
|
@ -159,7 +159,18 @@ void if_standby_task(void *pvParameters) {
|
||||||
case IF_STANDBY_ITEM_HUMID:
|
case IF_STANDBY_ITEM_HUMID:
|
||||||
lv_label_set_text(humid_label, queue_item.payload);
|
lv_label_set_text(humid_label, queue_item.payload);
|
||||||
lv_obj_align(humid_label, LV_ALIGN_CENTER, 0, 16);
|
lv_obj_align(humid_label, LV_ALIGN_CENTER, 0, 16);
|
||||||
|
break;
|
||||||
|
case IF_STANDBY_ITEM_TIME:
|
||||||
|
lv_label_set_text(time_label, queue_item.payload);
|
||||||
|
lv_obj_set_align(time_label, LV_ALIGN_CENTER);
|
||||||
|
break;
|
||||||
|
case IF_STANDBY_ITEM_DATE:
|
||||||
|
lv_label_set_text(date_label, queue_item.payload);
|
||||||
|
lv_obj_set_align(date_label, LV_ALIGN_CENTER);
|
||||||
|
break;
|
||||||
|
case IF_STANDBY_ITEM_WEEKDAY:
|
||||||
|
lv_label_set_text(weekday_label, queue_item.payload);
|
||||||
|
lv_obj_set_align(weekday_label, LV_ALIGN_CENTER);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -175,7 +186,7 @@ esp_err_t if_standby_init(void) {
|
||||||
impl_lvgl_unlock();
|
impl_lvgl_unlock();
|
||||||
|
|
||||||
g_standby_screen_queue = xQueueCreate(8, sizeof(if_standby_queue_t));
|
g_standby_screen_queue = xQueueCreate(8, sizeof(if_standby_queue_t));
|
||||||
if(g_standby_screen_queue == NULL) {
|
if (g_standby_screen_queue == NULL) {
|
||||||
return ESP_FAIL;
|
return ESP_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
|
|
||||||
#include "lvgl.h"
|
#include "lvgl.h"
|
||||||
|
|
||||||
|
#define IF_STANDBY_PAYLOAD_LENGTH 16
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
IF_STANDBY_ITEM_WIFI,
|
IF_STANDBY_ITEM_WIFI,
|
||||||
IF_STANDBY_ITEM_WEEKDAY,
|
IF_STANDBY_ITEM_WEEKDAY,
|
||||||
|
@ -20,7 +22,7 @@ typedef enum {
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
if_standby_item_t item;
|
if_standby_item_t item;
|
||||||
char payload[16];
|
char payload[IF_STANDBY_PAYLOAD_LENGTH];
|
||||||
} if_standby_queue_t;
|
} if_standby_queue_t;
|
||||||
|
|
||||||
extern lv_obj_t *g_standby_screen;
|
extern lv_obj_t *g_standby_screen;
|
||||||
|
|
|
@ -2,6 +2,11 @@
|
||||||
|
|
||||||
#include "esp_system.h"
|
#include "esp_system.h"
|
||||||
|
|
||||||
|
|
||||||
|
void if_wifi_task(void *pvParameters) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Initialize WiFi status/configuration component
|
* @brief Initialize WiFi status/configuration component
|
||||||
*
|
*
|
||||||
|
@ -11,8 +16,3 @@
|
||||||
esp_err_t if_wifi_init(lv_obj_t *parent_obj) {
|
esp_err_t if_wifi_init(lv_obj_t *parent_obj) {
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
esp_err_t if_wifi_destroy(void) {
|
|
||||||
//
|
|
||||||
return ESP_OK;
|
|
||||||
}
|
|
|
@ -181,7 +181,7 @@ e.g. "stm32f769xx.h" or "stm32f429xx.h"*/
|
||||||
*LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail
|
*LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail
|
||||||
*LV_LOG_LEVEL_USER Only logs added by the user
|
*LV_LOG_LEVEL_USER Only logs added by the user
|
||||||
*LV_LOG_LEVEL_NONE Do not log anything*/
|
*LV_LOG_LEVEL_NONE Do not log anything*/
|
||||||
# define LV_LOG_LEVEL LV_LOG_LEVEL_INFO
|
# define LV_LOG_LEVEL LV_LOG_LEVEL_WARN
|
||||||
|
|
||||||
/*1: Print the log with 'printf';
|
/*1: Print the log with 'printf';
|
||||||
*0: User need to register a callback with `lv_log_register_print_cb()`*/
|
*0: User need to register a callback with `lv_log_register_print_cb()`*/
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include "if_standby.h"
|
#include "if_standby.h"
|
||||||
#include "impl_lvgl.h"
|
#include "impl_lvgl.h"
|
||||||
#include "service_dht.h"
|
#include "service_dht.h"
|
||||||
|
#include "service_clock.h"
|
||||||
|
|
||||||
#define APP_I2C_MASTER_NUM 0
|
#define APP_I2C_MASTER_NUM 0
|
||||||
#define APP_I2C_SDA_NUM GPIO_NUM_39
|
#define APP_I2C_SDA_NUM GPIO_NUM_39
|
||||||
|
@ -59,6 +60,7 @@ void app_main(void) {
|
||||||
ESP_ERROR_CHECK(if_standby_init());
|
ESP_ERROR_CHECK(if_standby_init());
|
||||||
|
|
||||||
ESP_ERROR_CHECK(service_dht_init());
|
ESP_ERROR_CHECK(service_dht_init());
|
||||||
|
ESP_ERROR_CHECK(service_clock_init());
|
||||||
|
|
||||||
/* Dead loop */
|
/* Dead loop */
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
#include "service_clock.h"
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
#include "esp_log.h"
|
||||||
|
#include "if_standby.h"
|
||||||
|
|
||||||
|
#define LOG_TAG "SERVICE_CLOCK"
|
||||||
|
|
||||||
|
static TaskHandle_t s_clock_task_handle;
|
||||||
|
|
||||||
|
static char *s_wday_array[] = {"SUN", "MON", "TUE", "WED", "THU", "FRI"};
|
||||||
|
|
||||||
|
void clock_task(void *pvParameters) {
|
||||||
|
struct tm timeinfo;
|
||||||
|
time_t now;
|
||||||
|
|
||||||
|
uint8_t prev_min = 0xFF;
|
||||||
|
uint8_t prev_mday = 0xFF;
|
||||||
|
uint8_t prev_wday = 0xFF;
|
||||||
|
|
||||||
|
if_standby_queue_t queue_item;
|
||||||
|
|
||||||
|
setenv("TZ", "CST-8", 1);
|
||||||
|
tzset();
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
time(&now);
|
||||||
|
localtime_r(&now, &timeinfo);
|
||||||
|
|
||||||
|
if ((timeinfo.tm_min != prev_min) || (prev_min == 0xFF)) {
|
||||||
|
queue_item.item = IF_STANDBY_ITEM_TIME;
|
||||||
|
snprintf(queue_item.payload, IF_STANDBY_PAYLOAD_LENGTH, "%02u:%02u", timeinfo.tm_hour, timeinfo.tm_min);
|
||||||
|
xQueueSendToBack(g_standby_screen_queue, &queue_item, 0);
|
||||||
|
|
||||||
|
prev_min = timeinfo.tm_min;
|
||||||
|
}
|
||||||
|
if ((timeinfo.tm_mday != prev_mday) || (prev_mday == 0xFF)) {
|
||||||
|
queue_item.item = IF_STANDBY_ITEM_DATE;
|
||||||
|
snprintf(queue_item.payload, IF_STANDBY_PAYLOAD_LENGTH, "%04u/%02d/%02d",
|
||||||
|
(uint16_t)(timeinfo.tm_year + 1900), (uint8_t)(timeinfo.tm_mon + 1), (uint8_t)timeinfo.tm_mday);
|
||||||
|
xQueueSendToBack(g_standby_screen_queue, &queue_item, 0);
|
||||||
|
|
||||||
|
prev_mday = timeinfo.tm_mday;
|
||||||
|
}
|
||||||
|
if ((timeinfo.tm_wday != prev_wday) || (prev_wday == 0xFF)) {
|
||||||
|
queue_item.item = IF_STANDBY_ITEM_WEEKDAY;
|
||||||
|
memcpy(queue_item.payload, s_wday_array[timeinfo.tm_wday], 4);
|
||||||
|
xQueueSendToBack(g_standby_screen_queue, &queue_item, 0);
|
||||||
|
|
||||||
|
prev_wday = timeinfo.tm_wday;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Set an alarm at 0sec every 1 minute.
|
||||||
|
vTaskDelay(pdMS_TO_TICKS(200));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
esp_err_t service_clock_init(void) {
|
||||||
|
if (xTaskCreate(clock_task, "CLOCK", 2048, NULL, 6, &s_clock_task_handle) != pdTRUE) {
|
||||||
|
return ESP_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ESP_OK;
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
#ifndef SERVICE_CLOCK_H
|
||||||
|
#define SERVICE_CLOCK_H
|
||||||
|
|
||||||
|
#include "esp_system.h"
|
||||||
|
|
||||||
|
esp_err_t service_clock_init(void);
|
||||||
|
|
||||||
|
#endif
|
|
@ -29,11 +29,11 @@ void dht_task(void *pvParameters) {
|
||||||
}
|
}
|
||||||
|
|
||||||
queue_item.item = IF_STANDBY_ITEM_TEMP,
|
queue_item.item = IF_STANDBY_ITEM_TEMP,
|
||||||
snprintf(queue_item.payload, 16, "%.2f", result.temperature);
|
snprintf(queue_item.payload, IF_STANDBY_PAYLOAD_LENGTH, "%.2f", result.temperature);
|
||||||
xQueueSendToBack(g_standby_screen_queue, &queue_item, 0);
|
xQueueSendToBack(g_standby_screen_queue, &queue_item, 0);
|
||||||
|
|
||||||
queue_item.item = IF_STANDBY_ITEM_HUMID;
|
queue_item.item = IF_STANDBY_ITEM_HUMID;
|
||||||
snprintf(queue_item.payload, 16, "%.2f", result.humidity);
|
snprintf(queue_item.payload, IF_STANDBY_PAYLOAD_LENGTH, "%.2f", result.humidity);
|
||||||
xQueueSendToBack(g_standby_screen_queue, &queue_item, 0);
|
xQueueSendToBack(g_standby_screen_queue, &queue_item, 0);
|
||||||
|
|
||||||
vTaskDelay(pdMS_TO_TICKS(30000));
|
vTaskDelay(pdMS_TO_TICKS(30000));
|
||||||
|
|
Loading…
Reference in New Issue