feat: 添加 UI 组件支持,整合界面元素和全局变量管理
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
idf_component_register(SRCS "main.c"
|
||||
INCLUDE_DIRS "."
|
||||
REQUIRES wifi-connect esp_lvgl_port lvgl_st7735s_use i2c_master_messager io_device_control console_simple_init console console_user_cmds capactive_soil_moisture_sensor_V2.0
|
||||
REQUIRES wifi-connect esp_lvgl_port lvgl_st7735s_use i2c_master_messager io_device_control console_simple_init console console_user_cmds capactive_soil_moisture_sensor_V2.0 ui
|
||||
)
|
||||
|
||||
65
main/main.c
65
main/main.c
@@ -12,6 +12,9 @@
|
||||
#include "console_simple_init.h" // 提供 console_cmd_user_register 和 console_cmd_all_register
|
||||
#include "console_user_cmds.h"
|
||||
#include "capactive_soil_moisture_sensor_V2.0.h"
|
||||
#include "ui.h" // 使用EEZStudio提供的ui组件,便于后续扩展
|
||||
#include "esp_lvgl_port.h"
|
||||
#include "vars.h" // 定义全局变量接口
|
||||
|
||||
#ifndef CONFIG_I2C_MASTER_MESSAGER_BH1750_ENABLE
|
||||
#define CONFIG_I2C_MASTER_MESSAGER_BH1750_ENABLE 0
|
||||
@@ -44,24 +47,23 @@
|
||||
|
||||
static const char *TAG = "main";
|
||||
|
||||
static const char *wifi_status_short_str(wifi_connect_status_t status)
|
||||
static char s_air_temp[16];
|
||||
static char s_air_hum[16];
|
||||
static char s_soil[16];
|
||||
static char s_lux[16];
|
||||
|
||||
static void ui_task(void *arg)
|
||||
{
|
||||
switch (status)
|
||||
(void)arg;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
case WIFI_CONNECT_STATUS_IDLE:
|
||||
return "IDLE";
|
||||
case WIFI_CONNECT_STATUS_PROVISIONING:
|
||||
return "PROV";
|
||||
case WIFI_CONNECT_STATUS_CONNECTING:
|
||||
return "CONN";
|
||||
case WIFI_CONNECT_STATUS_CONNECTED:
|
||||
return "UP";
|
||||
case WIFI_CONNECT_STATUS_FAILED:
|
||||
return "FAIL";
|
||||
case WIFI_CONNECT_STATUS_TIMEOUT:
|
||||
return "TIME";
|
||||
default:
|
||||
return "UNKN";
|
||||
lvgl_port_lock(0);
|
||||
ui_tick();
|
||||
lvgl_port_unlock();
|
||||
|
||||
// UI 刷新周期无需过高,20ms 兼顾流畅度与CPU占用。
|
||||
vTaskDelay(pdMS_TO_TICKS(20));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,6 +103,14 @@ void app_main(void)
|
||||
// 启动 LVGL 演示程序,显示简单的界面
|
||||
ESP_ERROR_CHECK(start_lvgl_demo());
|
||||
|
||||
// 初始化 UI 组件(需在 LVGL 锁内进行对象创建)
|
||||
lvgl_port_lock(0);
|
||||
ui_init();
|
||||
lvgl_port_unlock();
|
||||
|
||||
BaseType_t ui_task_ok = xTaskCreate(ui_task, "ui_task", 4096, NULL, 5, NULL);
|
||||
ESP_ERROR_CHECK(ui_task_ok == pdPASS ? ESP_OK : ESP_FAIL);
|
||||
|
||||
// 初始化 IO 设备控制组件(GPIO1 水泵,GPIO10 光照,高电平有效)
|
||||
ESP_ERROR_CHECK(io_device_control_init());
|
||||
|
||||
@@ -169,17 +179,30 @@ void app_main(void)
|
||||
cap_soil_sensor_data_t soil_data = {0};
|
||||
if (soil_ready && cap_soil_sensor_read(&soil_data) == ESP_OK)
|
||||
{
|
||||
// 读取成功,当前版本仅保留采样流程,显示逻辑由用户自定义。
|
||||
// 读取成功
|
||||
snprintf(s_soil, sizeof(s_soil), "%.0f", soil_data.moisture_percent);
|
||||
set_var_soil_moisture(s_soil);
|
||||
}
|
||||
|
||||
i2c_master_messager_data_t sensor_data = {0};
|
||||
if (i2c_ready && i2c_master_messager_get_data(&sensor_data) == ESP_OK)
|
||||
{
|
||||
// 读取成功,当前版本仅保留采样流程,显示逻辑由用户自定义。
|
||||
}
|
||||
// 读取成功
|
||||
if (sensor_data.aht30.valid)
|
||||
{
|
||||
snprintf(s_air_temp, sizeof(s_air_temp), "%.1f", sensor_data.aht30.temperature_c);
|
||||
set_var_air_temperature(s_air_temp);
|
||||
set_var_air_temperature_int((int32_t)(sensor_data.aht30.temperature_c * 100)); // 以 1°C 为单位的整数
|
||||
|
||||
// TODO: 在这里实现你自己的 LCD 显示内容与排版。
|
||||
// ESP_ERROR_CHECK(lvgl_st7735s_set_center_text("custom text"));
|
||||
snprintf(s_air_hum, sizeof(s_air_hum), "%.1f", sensor_data.aht30.humidity_rh);
|
||||
set_var_air_humidity(s_air_hum);
|
||||
}
|
||||
if (sensor_data.bh1750.valid)
|
||||
{
|
||||
snprintf(s_lux, sizeof(s_lux), "%.0f", sensor_data.bh1750.lux);
|
||||
set_var_light_intensity(s_lux);
|
||||
}
|
||||
}
|
||||
|
||||
vTaskDelay(pdMS_TO_TICKS(1000));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user