smart-home/test_radar_distance.py
2026-02-26 09:16:34 +08:00

87 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
雷达距离检测测试脚本
测试ESP32雷达传感器的UART距离检测功能
"""
import requests
import json
import time
def test_radar_distance():
"""测试雷达距离检测功能"""
esp32_ip = "192.168.1.3"
api_url = f"http://{esp32_ip}:80/thermal_grid"
print("🔧 雷达距离检测测试")
print("=" * 50)
print(f"📡 ESP32地址: {esp32_ip}")
print(f"🌐 API地址: {api_url}")
print("=" * 50)
try:
for i in range(10):
print(f"\n📊 第 {i+1} 次测试:")
# 发送HTTP请求
response = requests.get(api_url, timeout=5)
if response.status_code == 200:
data = response.json()
# 解析PIR数据
pir_status = "有人" if data.get('pir', 0) == 1 else "无人"
print(f"🚶 PIR传感器: {pir_status}")
# 解析雷达数据
radar_data = data.get('radar', {})
if isinstance(radar_data, dict):
# 新格式:包含距离信息
detected = "有人" if radar_data.get('detected', 0) == 1 else "无人"
uart_available = "可用" if radar_data.get('uart_available', 0) == 1 else "不可用"
distance_range = radar_data.get('distance_range', 'unknown')
moving_distance = radar_data.get('moving_distance', 0)
static_distance = radar_data.get('static_distance', 0)
print(f"📡 雷达传感器: {detected}")
print(f"📊 UART通信: {uart_available}")
print(f"📏 距离分段: {distance_range}")
if uart_available == "可用":
print(f"🏃 运动目标: {moving_distance}cm")
print(f"🧍 静止目标: {static_distance}cm")
# 距离分段说明
range_desc = {
'none': '无目标',
'near': '近距离 (0-100cm)',
'medium': '中距离 (100-300cm)',
'far': '远距离 (300cm+)',
'unknown': '未知距离'
}
print(f"📍 距离说明: {range_desc.get(distance_range, '未知')}")
else:
print("⚠️ UART数据不可用仅使用GPIO检测")
else:
# 旧格式:仅布尔值
radar_status = "有人" if radar_data == 1 else "无人"
print(f"📡 雷达传感器: {radar_status} (旧格式)")
else:
print(f"❌ HTTP请求失败: {response.status_code}")
time.sleep(2) # 等待2秒
except requests.exceptions.RequestException as e:
print(f"❌ 网络错误: {e}")
except json.JSONDecodeError as e:
print(f"❌ JSON解析错误: {e}")
except KeyboardInterrupt:
print("\n⏹️ 测试被用户中断")
print("\n✅ 测试完成")
if __name__ == "__main__":
test_radar_distance()