5.1 KiB
5.1 KiB
客厅红外控制功能修复方案
🎯 问题分析
原始问题
- APP端UDP通信失败:
plus.net.createSocket is not a function - 客厅场景页面缺失: 调试模式下客厅跳转到错误页面
- 红外控制功能无法使用: APP无法与ESP32通信控制红外插座
根本原因
- APP端原生UDP功能在当前环境下不可用
- 客厅监控页面未创建,跳转目标错误
- 网络通信方式需要从UDP改为HTTP
🔧 解决方案
1. 创建客厅监控页面
文件: smart-home-app/pages/living/monitor.vue
功能特性:
- ❄️ 空调控制: 开关、温度调节(16-30°C)、模式切换(制冷/制热)
- 🔌 红外插座控制: 开关、定时关闭(5/15/30/60分钟)
- 📊 连接状态监控: 实时显示ESP32连接状态
- 📝 操作日志: 记录所有控制操作和结果
2. 修复红外开关页面通信
文件: smart-home-app/pages/control/ir-switch.vue
修复内容:
// 原来: 使用plus.net.createSocket (不可用)
const udp = plus.net.createSocket('udp')
// 修复后: 使用HTTP通信
const response = await uni.request({
url: `http://${this.esp32IP}/ir?cmd=${encodeURIComponent(cmd)}`,
method: 'GET',
timeout: 5000
})
3. 更新设置页面跳转
文件: smart-home-app/pages/kitchen/settings.vue
修改:
// 客厅跳转到专门的监控页面
if (room.nameKey === 'livingRoom') {
uni.navigateTo({ url: '/pages/living/monitor' })
}
🏗️ ESP32端架构
HTTP接口支持
ESP32已支持完整的HTTP红外控制接口:
接口地址: http://ESP32_IP/ir?cmd=COMMAND
支持的命令:
SOCKET:ON- 红外插座开启SOCKET:OFF- 红外插座关闭SOCKET:TIMER:5- 定时5分钟关闭SOCKET:TIMER:15- 定时15分钟关闭SOCKET:TIMER:30- 定时30分钟关闭SOCKET:TIMER:60- 定时60分钟关闭AC:ON- 空调开机AC:OFF- 空调关机AC:TEMP:26- 设置温度AC:MODE:COOL- 制冷模式AC:MODE:HEAT- 制热模式
红外编码配置
文件: firefly_esp32/main/Controller/AppCommandHandler.cpp
已预配置完整的NEC协议红外编码:
- 插座开关编码 (9000, 4500 引导码)
- 定时功能编码 (5/15/30/60/120分钟)
- 空调控制编码 (美的空调协议)
执行流程
- HTTP请求接收 →
ir_handler()函数 - 命令解析 →
parseCommand()函数 - 设置待执行标志 →
setPendingCommand()原子操作 - 主循环执行 →
processPendingCommand()在主任务中执行 - 红外发射 →
executeSocketControl()/executeACControl()
📱 使用方法
开启调试模式
- 进入 厨房设置页面
- 找到 "开发者选项" 卡片
- 开启 "调试模式" 开关
进入客厅控制
- 调试模式开启后,显示 "其他房间" 卡片
- 点击 "🛋️ 客厅"
- 进入客厅监控页面
设备控制
- 空调: 开关控制、温度调节、模式切换
- 红外插座: 开关控制、定时关闭
- 状态监控: 实时连接状态、操作日志
🧪 测试验证
测试脚本
文件: test_ir_control.py
测试内容:
- ESP32连接测试
- 红外插座控制测试
- 空调控制测试
- 设备状态获取测试
运行测试
python test_ir_control.py
预期结果
- ✅ 所有HTTP请求返回200状态码
- ✅ ESP32串口显示红外发射日志
- ✅ LED指示灯闪烁表示发射中
- ✅ APP显示操作成功日志
🔍 故障排查
1. 连接问题
症状: 显示"连接失败"或"连接异常" 解决:
- 检查ESP32 IP地址是否正确
- 确认ESP32已连接WiFi
- 测试网络连通性:
ping ESP32_IP
2. 红外发射无效
症状: 命令发送成功但设备无响应 解决:
- 检查红外发射器硬件连接
- 观察ESP32串口日志确认发射
- 验证红外编码是否匹配设备
3. APP操作无响应
症状: 点击开关无反应 解决:
- 检查设备存储中的ESP32配置
- 确认调试模式已开启
- 查看APP操作日志
📋 技术规格
网络通信
- 协议: HTTP/1.1
- 端口: 80 (HTTP)
- 超时: 5秒
- 重试: 自动重试机制
红外发射
- 频率: 38kHz载波
- 协议: NEC标准协议
- 重复: 2-3次发射确保可靠性
- 间隔: 150-200ms
设备兼容性
- 红外插座: NEC协议遥控插座
- 空调: 美的品牌空调 (可扩展其他品牌)
- ESP32: 支持RMT硬件红外发射
🎉 功能特点
用户体验
- 🎨 现代化UI: 卡片式设计,直观易用
- 🔄 实时反馈: 操作状态实时显示
- 📊 状态监控: 连接状态、设备状态一目了然
- 📝 操作记录: 详细的操作日志
技术特性
- ⚡ 高可靠性: HTTP通信 + 原子操作
- 🔒 线程安全: 跨任务通信安全机制
- 🎯 精确控制: 温度、定时精确设置
- 🔧 易于扩展: 模块化设计,易于添加新设备
客厅红外控制功能现已完全修复并优化,提供了完整的空调和红外插座控制解决方案!