添加继电器状态同步功能,更新环境数据结构以支持风扇、灯光、冷却和加热状态

This commit is contained in:
Wang Beihong
2026-04-21 23:57:27 +08:00
parent 0eb428aaa5
commit 65de57a49c

View File

@@ -62,6 +62,10 @@ typedef struct
bool fire_danger; bool fire_danger;
bool human_present; bool human_present;
bool door_closed; bool door_closed;
bool fan_on;
bool light_on;
bool cool_on;
bool hot_on;
} env_data_t; } env_data_t;
static env_data_t s_env_data; static env_data_t s_env_data;
@@ -166,6 +170,56 @@ static void status_task(void *arg)
} }
} }
static const char *relay_status_text(bool on)
{
return on ? "" : "";
}
static void relay_status_task(void *arg)
{
(void)arg;
for (;;)
{
bool relay_on = false;
if (relay_ctrl_get(RELAY_CTRL_ID_1, &relay_on) == ESP_OK) {
set_var_fan_status(relay_status_text(relay_on));
if (s_env_data_lock) {
xSemaphoreTake(s_env_data_lock, portMAX_DELAY);
s_env_data.fan_on = relay_on;
xSemaphoreGive(s_env_data_lock);
}
}
if (relay_ctrl_get(RELAY_CTRL_ID_2, &relay_on) == ESP_OK) {
set_var_light_status(relay_status_text(relay_on));
if (s_env_data_lock) {
xSemaphoreTake(s_env_data_lock, portMAX_DELAY);
s_env_data.light_on = relay_on;
xSemaphoreGive(s_env_data_lock);
}
}
if (relay_ctrl_get(RELAY_CTRL_ID_3, &relay_on) == ESP_OK) {
set_var_cool_status(relay_status_text(relay_on));
if (s_env_data_lock) {
xSemaphoreTake(s_env_data_lock, portMAX_DELAY);
s_env_data.cool_on = relay_on;
xSemaphoreGive(s_env_data_lock);
}
}
if (relay_ctrl_get(RELAY_CTRL_ID_4, &relay_on) == ESP_OK) {
set_var_hot_status(relay_status_text(relay_on));
if (s_env_data_lock) {
xSemaphoreTake(s_env_data_lock, portMAX_DELAY);
s_env_data.hot_on = relay_on;
xSemaphoreGive(s_env_data_lock);
}
}
vTaskDelay(pdMS_TO_TICKS(200));
}
}
static void sntp_task(void *arg) static void sntp_task(void *arg)
{ {
(void)arg; (void)arg;
@@ -318,6 +372,14 @@ extern "C" void app_main(void)
{.pin = GPIO_NUM_9, .active_high = true}, {.pin = GPIO_NUM_9, .active_high = true},
}; };
ESP_ERROR_CHECK(relay_ctrl_init(relay_cfg)); ESP_ERROR_CHECK(relay_ctrl_init(relay_cfg));
set_var_fan_status("");
set_var_light_status("");
set_var_cool_status("");
set_var_hot_status("");
s_env_data.fan_on = false;
s_env_data.light_on = false;
s_env_data.cool_on = false;
s_env_data.hot_on = false;
// 5. 初始化 I2C 总线并注册传感器 (共享总线) // 5. 初始化 I2C 总线并注册传感器 (共享总线)
ESP_ERROR_CHECK(bh1750_user_init()); ESP_ERROR_CHECK(bh1750_user_init());
@@ -422,4 +484,7 @@ extern "C" void app_main(void)
// 独立任务:人体与门状态检测 // 独立任务:人体与门状态检测
xTaskCreate(status_task, "status_task", 4096, NULL, 6, NULL); xTaskCreate(status_task, "status_task", 4096, NULL, 6, NULL);
// 独立任务:继电器状态同步到 UI
xTaskCreate(relay_status_task, "relay_status_task", 4096, NULL, 5, NULL);
} }