smart-home/雷达传感器UART修复说明.md
2026-02-26 09:16:34 +08:00

3.9 KiB
Raw Blame History

雷达传感器UART通信修复说明

问题分析

根据HLK-LD2410B-P雷达传感器原理图分析发现了UART通信不可用的根本原因

原理图分析

  • U11模块引脚1OUT → 连接到 RADAR_DETGPIO6
  • 这个OUT脚是UART输出使能脚,不是人体检测脚
  • 必须配置为输出高电平才能启用雷达模块的UART数据输出

原始错误配置

// ❌ 错误将UART使能脚配置为输入模式
gpio_config_t radar_config = {};
radar_config.mode = GPIO_MODE_INPUT;  // 错误配置

修复方案

1. GPIO6配置修复

// ✅ 正确将GPIO6配置为输出高电平启用UART
gpio_config_t radar_config = {};
radar_config.mode = GPIO_MODE_OUTPUT;  // 改为输出模式
gpio_set_level(PIN_RADAR_DET, 1);     // 输出高电平启用UART

2. 检测逻辑修复

// ❌ 错误使用GPIO6读取人体检测状态
temp_data.detected = gpio_get_level(PIN_RADAR_DET) == 1;

// ✅ 正确完全依赖UART数据解析结果
// 在parseUARTData函数中根据目标状态判断
radar_data.detected = (target_state > 0) || 
                     (radar_data.moving_distance > 0) || 
                     (radar_data.static_distance > 0);

3. UART数据解析增强

// 目标状态含义:
// 0x00 = 无目标
// 0x01 = 运动目标
// 0x02 = 静止目标  
// 0x03 = 运动+静止目标
uint8_t target_state = data[data_start];

修复文件清单

修改的文件

  1. firefly_esp32/main/Module/RadarSensor.h

    • 更新类注释说明
    • 修正数据结构注释
  2. firefly_esp32/main/Module/RadarSensor.cpp

    • initGPIO(): GPIO6改为输出高电平
    • parseUARTData(): 增加人体检测逻辑
    • dataTaskFunction(): 移除GPIO检测代码
    • 更新相关日志信息

预期效果

修复前的问题

I (176539) RadarSensor: 🔍 UART读取状态: 字节数=0
📊 UART通信: 不可用
📏 距离分段: none
⚠️ UART数据不可用仅使用GPIO检测

修复后的预期结果

I (xxx) RadarSensor: ✅ 雷达UART使能脚(OUT)已拉高UART输出启用 (GPIO6)
I (xxx) RadarSensor: 🔍 UART读取状态: 字节数=21
I (xxx) RadarSensor: 📡 UART解析成功: 状态=0x01, 有人=是, 运动=150cm(能量45), 静止=0cm(能量0)
📊 UART通信: 可用
📏 距离分段: 1-3m

测试验证

1. 编译烧录

cd firefly_esp32
idf.py build
idf.py -p COM7 flash monitor

2. 观察日志

关注以下关键日志:

  • ✅ 雷达UART使能脚(OUT)已拉高UART输出启用
  • 🔍 UART读取状态: 字节数=21 (不再是0)
  • 📡 UART解析成功: 状态=0xXX, 有人=X

3. API测试

python test_radar_distance.py
python quick_radar_test.py

预期看到:

  • 📊 UART通信: 可用
  • 📏 距离分段: 0-1m/1-3m/>3m (不再是none)

技术要点

雷达模块工作原理

  1. 供电: 5V供电+5V_RADAR
  2. UART使能: GPIO6(OUT脚)输出高电平启用
  3. 数据通信: UART0 (TXD0/RXD0) 256000波特率
  4. 数据格式: 21字节/帧,包含目标状态和距离信息

引脚对应关系

模块引脚 功能 ESP32连接 代码中定义
1脚(OUT) UART使能 RADAR_DET GPIO6
2脚(TX) 数据发送 TXD_HLK RXD0
3脚(RX) 数据接收 RXD_HLK TXD0
4脚(GND) 地线 GND -
5脚(VCC) 供电 +5V_RADAR -

总结

这次修复解决了雷达传感器UART通信的根本问题

  1. 正确理解原理图: GPIO6是UART使能脚不是检测脚
  2. 正确配置GPIO: 输出高电平启用UART通信
  3. 完善数据解析: 根据UART数据判断人体检测状态
  4. 移除错误逻辑: 不再使用GPIO6读取检测状态

修复后雷达传感器将能够正常输出UART数据提供精确的距离检测和人体感应功能。