添加人体门状态检测功能,包含初始化和读取状态的逻辑,并更新主程序以集成此功能
This commit is contained in:
@@ -1,3 +1,3 @@
|
||||
idf_component_register(SRCS "main.cpp"
|
||||
INCLUDE_DIRS "."
|
||||
REQUIRES nvs_flash esp_wifi sntp_time aht30 esp_event esp_system wifi-connect ui lvgl_st7789_use efuse relay_ctrl bh1750 MQ-2 JW01)
|
||||
REQUIRES nvs_flash esp_wifi sntp_time aht30 esp_event esp_system wifi-connect ui lvgl_st7789_use efuse relay_ctrl bh1750 MQ-2 JW01 human_door)
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "aht30.h"
|
||||
#include "MQ-2.h"
|
||||
#include "JW01.h"
|
||||
#include "human_door.h"
|
||||
|
||||
#define TAG "MAIN"
|
||||
#define CO2_SPOILAGE_THRESHOLD_PPM 1000.0f
|
||||
@@ -35,6 +36,8 @@ typedef struct
|
||||
float tvoc;
|
||||
float hcho;
|
||||
float co2;
|
||||
bool human_present;
|
||||
bool door_closed;
|
||||
} env_data_t;
|
||||
|
||||
static env_data_t s_env_data;
|
||||
@@ -81,6 +84,26 @@ static void ui_task(void *arg)
|
||||
}
|
||||
}
|
||||
|
||||
static void status_task(void *arg)
|
||||
{
|
||||
(void)arg;
|
||||
for (;;) {
|
||||
human_door_state_t io_state{};
|
||||
if (human_door_read(&io_state) == ESP_OK) {
|
||||
set_var_hum_status(io_state.human_present ? "有人" : "无人");
|
||||
set_var_door_status(io_state.door_closed ? "关闭" : "开启");
|
||||
|
||||
if (s_env_data_lock) {
|
||||
xSemaphoreTake(s_env_data_lock, portMAX_DELAY);
|
||||
s_env_data.human_present = io_state.human_present;
|
||||
s_env_data.door_closed = io_state.door_closed;
|
||||
xSemaphoreGive(s_env_data_lock);
|
||||
}
|
||||
}
|
||||
vTaskDelay(pdMS_TO_TICKS(200));
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void app_main(void)
|
||||
{
|
||||
vTaskDelay(pdMS_TO_TICKS(100));
|
||||
@@ -123,6 +146,11 @@ extern "C" void app_main(void)
|
||||
// JW01 使用 UART0(GPIO43/44)
|
||||
ESP_ERROR_CHECK(jw01_init());
|
||||
|
||||
// GPIO16: HC-SR312, GPIO17: Door switch(低电平=关门)
|
||||
ESP_ERROR_CHECK(human_door_init());
|
||||
set_var_hum_status("无人");
|
||||
set_var_door_status("关闭");
|
||||
|
||||
// 6. 创建传感器读取任务
|
||||
xTaskCreate([](void *arg)
|
||||
{
|
||||
@@ -190,5 +218,8 @@ extern "C" void app_main(void)
|
||||
xSemaphoreGive(s_env_data_lock);
|
||||
}
|
||||
vTaskDelay(pdMS_TO_TICKS(1000));
|
||||
} }, "sensor_task", 4096 * 2, (void *)aht30_dev, 6, NULL);
|
||||
} }, "sensor_task", 4096 * 3, (void *)aht30_dev, 6, NULL);
|
||||
|
||||
// 独立任务:人体与门状态检测
|
||||
xTaskCreate(status_task, "status_task", 4096, NULL, 6, NULL);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user