功能:集成SU-03T语音模块,完善UI代码文档
- 在CMakeLists.txt中添加SU-03T语音模块依赖。 - 在main.cpp中实现SU-03T接收回调函数,处理接收消息。 - 完善各UI源文件文档,包括动作、屏幕和字体,明确模块作用与数据流向。 - 更新主应用逻辑,初始化并启动SU-03T接收器。 - 修改过程中确保兼容性,保留原有接口。
This commit is contained in:
@@ -1,3 +1,12 @@
|
||||
/*
|
||||
* 文件: main/main.cpp
|
||||
* 角色: 系统主流程与任务调度入口
|
||||
* 说明:
|
||||
* - 本文件用于实现当前模块的核心功能或接口定义。
|
||||
* - 修改前请先确认该模块与其它任务/外设之间的数据流关系。
|
||||
* - 涉及协议与硬件时,优先保持现有接口兼容,避免联调回归。
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
@@ -27,6 +36,7 @@
|
||||
#include "human_door.h"
|
||||
#include "fire_sensor.h"
|
||||
#include "hx711.hpp"
|
||||
#include "su-03t.h"
|
||||
|
||||
#define TAG "MAIN"
|
||||
#define CO2_SPOILAGE_THRESHOLD_PPM 1500.0f
|
||||
@@ -66,12 +76,18 @@ typedef struct
|
||||
bool light_on;
|
||||
bool cool_on;
|
||||
bool hot_on;
|
||||
uint8_t su03t_last_msgno;
|
||||
uint32_t su03t_rx_count;
|
||||
} env_data_t;
|
||||
|
||||
static env_data_t s_env_data;
|
||||
static SemaphoreHandle_t s_env_data_lock = NULL;
|
||||
static volatile bool s_ui_ready = false;
|
||||
|
||||
/* 函数: reconfigure_twdt
|
||||
* 作用: 执行模块内与函数名对应的业务逻辑。
|
||||
* 重点: 关注输入合法性、返回码与并发安全。
|
||||
*/
|
||||
static void reconfigure_twdt(uint32_t timeout_ms, uint32_t idle_core_mask)
|
||||
{
|
||||
const esp_task_wdt_config_t twdt_cfg = {
|
||||
@@ -86,6 +102,10 @@ static void reconfigure_twdt(uint32_t timeout_ms, uint32_t idle_core_mask)
|
||||
}
|
||||
}
|
||||
|
||||
/* 函数: wait_for_wifi_connected
|
||||
* 作用: 执行模块内与函数名对应的业务逻辑。
|
||||
* 重点: 关注输入合法性、返回码与并发安全。
|
||||
*/
|
||||
static bool wait_for_wifi_connected(TickType_t timeout_ticks)
|
||||
{
|
||||
const TickType_t start_ticks = xTaskGetTickCount();
|
||||
@@ -98,6 +118,10 @@ static bool wait_for_wifi_connected(TickType_t timeout_ticks)
|
||||
return false;
|
||||
}
|
||||
|
||||
/* 函数: env_data_update_system_info
|
||||
* 作用: 执行模块内与函数名对应的业务逻辑。
|
||||
* 重点: 关注输入合法性、返回码与并发安全。
|
||||
*/
|
||||
static void env_data_update_system_info(void)
|
||||
{
|
||||
if (s_env_data_lock == NULL)
|
||||
@@ -115,6 +139,10 @@ static void env_data_update_system_info(void)
|
||||
set_var_local_time(s_env_data.time_str);
|
||||
}
|
||||
|
||||
/* 函数: ui_task
|
||||
* 作用: 执行模块内与函数名对应的业务逻辑。
|
||||
* 重点: 关注输入合法性、返回码与并发安全。
|
||||
*/
|
||||
static void ui_task(void *arg)
|
||||
{
|
||||
for (;;)
|
||||
@@ -132,6 +160,10 @@ static void ui_task(void *arg)
|
||||
}
|
||||
}
|
||||
|
||||
/* 函数: ui_init_task
|
||||
* 作用: 执行模块内与函数名对应的业务逻辑。
|
||||
* 重点: 关注输入合法性、返回码与并发安全。
|
||||
*/
|
||||
static void ui_init_task(void *arg)
|
||||
{
|
||||
(void)arg;
|
||||
@@ -147,6 +179,10 @@ static void ui_init_task(void *arg)
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
|
||||
/* 函数: status_task
|
||||
* 作用: 执行模块内与函数名对应的业务逻辑。
|
||||
* 重点: 关注输入合法性、返回码与并发安全。
|
||||
*/
|
||||
static void status_task(void *arg)
|
||||
{
|
||||
(void)arg;
|
||||
@@ -170,11 +206,19 @@ static void status_task(void *arg)
|
||||
}
|
||||
}
|
||||
|
||||
/* 函数: relay_status_text
|
||||
* 作用: 执行模块内与函数名对应的业务逻辑。
|
||||
* 重点: 关注输入合法性、返回码与并发安全。
|
||||
*/
|
||||
static const char *relay_status_text(bool on)
|
||||
{
|
||||
return on ? "开" : "关";
|
||||
}
|
||||
|
||||
/* 函数: relay_status_task
|
||||
* 作用: 执行模块内与函数名对应的业务逻辑。
|
||||
* 重点: 关注输入合法性、返回码与并发安全。
|
||||
*/
|
||||
static void relay_status_task(void *arg)
|
||||
{
|
||||
(void)arg;
|
||||
@@ -220,6 +264,10 @@ static void relay_status_task(void *arg)
|
||||
}
|
||||
}
|
||||
|
||||
/* 函数: sntp_task
|
||||
* 作用: 执行模块内与函数名对应的业务逻辑。
|
||||
* 重点: 关注输入合法性、返回码与并发安全。
|
||||
*/
|
||||
static void sntp_task(void *arg)
|
||||
{
|
||||
(void)arg;
|
||||
@@ -234,6 +282,47 @@ static void sntp_task(void *arg)
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
|
||||
/* 函数: su03t_rx_callback
|
||||
* 作用: 执行模块内与函数名对应的业务逻辑。
|
||||
* 重点: 关注输入合法性、返回码与并发安全。
|
||||
*/
|
||||
static void su03t_rx_callback(const su03t_frame_t *frame, void *user_ctx)
|
||||
{
|
||||
(void)user_ctx;
|
||||
if (frame == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
char hex_buf[256];
|
||||
size_t pos = 0;
|
||||
for (size_t i = 0; i < frame->params_len && pos + 4 < sizeof(hex_buf); ++i) {
|
||||
int n = snprintf(&hex_buf[pos], sizeof(hex_buf) - pos, "%02X ", frame->params[i]);
|
||||
if (n <= 0) {
|
||||
break;
|
||||
}
|
||||
pos += (size_t)n;
|
||||
}
|
||||
if (pos == 0) {
|
||||
snprintf(hex_buf, sizeof(hex_buf), "(no params)");
|
||||
}
|
||||
|
||||
ESP_LOGI(TAG, "SU03T RX msgno=0x%02X len=%u params=%s",
|
||||
frame->msgno,
|
||||
(unsigned)frame->params_len,
|
||||
hex_buf);
|
||||
|
||||
if (s_env_data_lock) {
|
||||
xSemaphoreTake(s_env_data_lock, portMAX_DELAY);
|
||||
s_env_data.su03t_last_msgno = frame->msgno;
|
||||
s_env_data.su03t_rx_count++;
|
||||
xSemaphoreGive(s_env_data_lock);
|
||||
}
|
||||
}
|
||||
|
||||
/* 函数: hx711_task
|
||||
* 作用: 执行模块内与函数名对应的业务逻辑。
|
||||
* 重点: 关注输入合法性、返回码与并发安全。
|
||||
*/
|
||||
static void hx711_task(void *arg)
|
||||
{
|
||||
(void)arg;
|
||||
@@ -330,6 +419,10 @@ static void hx711_task(void *arg)
|
||||
}
|
||||
}
|
||||
|
||||
/* 函数: app_main
|
||||
* 作用: 执行模块内与函数名对应的业务逻辑。
|
||||
* 重点: 关注输入合法性、返回码与并发安全。
|
||||
*/
|
||||
extern "C" void app_main(void)
|
||||
{
|
||||
vTaskDelay(pdMS_TO_TICKS(100));
|
||||
@@ -398,6 +491,10 @@ extern "C" void app_main(void)
|
||||
// 火焰传感器使用 ADC(GPIO3)
|
||||
ESP_ERROR_CHECK(fire_sensor_init());
|
||||
|
||||
// SU-03T 语音模块(UART2: RX=IO41 TX=IO42)
|
||||
ESP_ERROR_CHECK(su03t_init());
|
||||
ESP_ERROR_CHECK(su03t_start_receiver(su03t_rx_callback, NULL, 4096, 5));
|
||||
|
||||
// GPIO16: HC-SR312, GPIO17: Door switch(低电平=关门)
|
||||
ESP_ERROR_CHECK(human_door_init());
|
||||
set_var_hum_status("无人");
|
||||
|
||||
Reference in New Issue
Block a user