添加继电器状态同步功能,更新环境数据结构以支持风扇、灯光、冷却和加热状态
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user