添加 JW01 传感器支持,包含初始化和数据读取功能,判断CO2值来判断实物状态。1000为初始阈值
This commit is contained in:
@@ -20,8 +20,10 @@
|
||||
#include "bh1750_use.h"
|
||||
#include "aht30.h"
|
||||
#include "MQ-2.h"
|
||||
#include "JW01.h"
|
||||
|
||||
#define TAG "MAIN"
|
||||
#define CO2_SPOILAGE_THRESHOLD_PPM 1000.0f
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@@ -30,6 +32,9 @@ typedef struct
|
||||
float temp;
|
||||
float humidity;
|
||||
float gas_percent;
|
||||
float tvoc;
|
||||
float hcho;
|
||||
float co2;
|
||||
} env_data_t;
|
||||
|
||||
static env_data_t s_env_data;
|
||||
@@ -92,6 +97,7 @@ extern "C" void app_main(void)
|
||||
lvgl_port_lock(100 / portTICK_PERIOD_MS);
|
||||
ui_init();
|
||||
lvgl_port_unlock();
|
||||
set_var_food_status("良好");
|
||||
|
||||
// 7. 创建 UI 任务
|
||||
xTaskCreate(ui_task, "ui_task", 8192, NULL, 5, NULL);
|
||||
@@ -114,32 +120,61 @@ extern "C" void app_main(void)
|
||||
// MQ-2 使用 ADC(GPIO8)
|
||||
ESP_ERROR_CHECK(mq2_init());
|
||||
|
||||
// JW01 使用 UART0(GPIO43/44)
|
||||
ESP_ERROR_CHECK(jw01_init());
|
||||
|
||||
// 6. 创建传感器读取任务
|
||||
xTaskCreate([](void *arg)
|
||||
{
|
||||
aht30_handle_t aht30 = (aht30_handle_t)arg;
|
||||
uint32_t log_cnt = 0;
|
||||
for (;;) {
|
||||
float lux = 0.0f, temp = 0.0f, hum = 0.0f, gas_percent = 0.0f;
|
||||
jw01_data_t jw01{};
|
||||
esp_err_t bh_ret = ESP_FAIL;
|
||||
esp_err_t aht_ret = ESP_FAIL;
|
||||
esp_err_t mq2_ret = ESP_FAIL;
|
||||
esp_err_t jw_ret = ESP_FAIL;
|
||||
// 读取 BH1750
|
||||
if (bh1750_user_read(&lux) == ESP_OK) {
|
||||
bh_ret = bh1750_user_read(&lux);
|
||||
if (bh_ret == ESP_OK) {
|
||||
set_var_light_val(lux);
|
||||
}
|
||||
// 读取 AHT30
|
||||
if (aht30_get_temperature_humidity_value(aht30, &temp, &hum) == ESP_OK) {
|
||||
aht_ret = aht30_get_temperature_humidity_value(aht30, &temp, &hum);
|
||||
if (aht_ret == ESP_OK) {
|
||||
set_var_temp(temp);
|
||||
set_var_humity_val(hum);
|
||||
}
|
||||
|
||||
// 读取 MQ-2,更新空气质量变量
|
||||
if (mq2_read_percent(&gas_percent) == ESP_OK) {
|
||||
mq2_ret = mq2_read_percent(&gas_percent);
|
||||
if (mq2_ret == ESP_OK) {
|
||||
set_var_air_quity(gas_percent);
|
||||
}
|
||||
|
||||
// 读取 JW01(TVOC/HCHO/CO2)
|
||||
jw_ret = jw01_read(&jw01, 200);
|
||||
if (jw_ret == ESP_OK) {
|
||||
if (jw01.co2_valid) {
|
||||
if (jw01.co2 >= CO2_SPOILAGE_THRESHOLD_PPM) {
|
||||
set_var_food_status("变质");
|
||||
} else {
|
||||
set_var_food_status("良好");
|
||||
}
|
||||
|
||||
if (s_env_data_lock) {
|
||||
xSemaphoreTake(s_env_data_lock, portMAX_DELAY);
|
||||
s_env_data.gas_percent = gas_percent;
|
||||
xSemaphoreGive(s_env_data_lock);
|
||||
}
|
||||
}
|
||||
|
||||
// 每 5 次打印一次综合状态,避免日志刷屏
|
||||
if ((log_cnt++ % 10) == 0) {
|
||||
ESP_LOGI(TAG,
|
||||
"SENS bh=%s lux=%.1f | aht=%s t=%.1f h=%.1f | mq2=%s gas=%.1f | jw01=%s co2_valid=%d co2=%.1f",
|
||||
esp_err_to_name(bh_ret), lux,
|
||||
esp_err_to_name(aht_ret), temp, hum,
|
||||
esp_err_to_name(mq2_ret), gas_percent,
|
||||
esp_err_to_name(jw_ret), jw01.co2_valid ? 1 : 0, jw01.co2);
|
||||
}
|
||||
|
||||
|
||||
// 数据存入共享结构体
|
||||
@@ -148,6 +183,10 @@ extern "C" void app_main(void)
|
||||
s_env_data.lux = lux;
|
||||
s_env_data.temp = temp;
|
||||
s_env_data.humidity = hum;
|
||||
s_env_data.gas_percent = gas_percent;
|
||||
if (jw01.tvoc_valid) s_env_data.tvoc = jw01.tvoc;
|
||||
if (jw01.hcho_valid) s_env_data.hcho = jw01.hcho;
|
||||
if (jw01.co2_valid) s_env_data.co2 = jw01.co2;
|
||||
xSemaphoreGive(s_env_data_lock);
|
||||
}
|
||||
vTaskDelay(pdMS_TO_TICKS(1000));
|
||||
|
||||
Reference in New Issue
Block a user