smart-home/客厅红外控制功能修复方案.md
2026-02-26 09:16:34 +08:00

5.1 KiB

客厅红外控制功能修复方案

🎯 问题分析

原始问题

  1. APP端UDP通信失败: plus.net.createSocket is not a function
  2. 客厅场景页面缺失: 调试模式下客厅跳转到错误页面
  3. 红外控制功能无法使用: 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分钟)
  • 空调控制编码 (美的空调协议)

执行流程

  1. HTTP请求接收ir_handler() 函数
  2. 命令解析parseCommand() 函数
  3. 设置待执行标志setPendingCommand() 原子操作
  4. 主循环执行processPendingCommand() 在主任务中执行
  5. 红外发射executeSocketControl() / executeACControl()

📱 使用方法

开启调试模式

  1. 进入 厨房设置页面
  2. 找到 "开发者选项" 卡片
  3. 开启 "调试模式" 开关

进入客厅控制

  1. 调试模式开启后,显示 "其他房间" 卡片
  2. 点击 "🛋️ 客厅"
  3. 进入客厅监控页面

设备控制

  • 空调: 开关控制、温度调节、模式切换
  • 红外插座: 开关控制、定时关闭
  • 状态监控: 实时连接状态、操作日志

🧪 测试验证

测试脚本

文件: 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通信 + 原子操作
  • 🔒 线程安全: 跨任务通信安全机制
  • 🎯 精确控制: 温度、定时精确设置
  • 🔧 易于扩展: 模块化设计,易于添加新设备

客厅红外控制功能现已完全修复并优化,提供了完整的空调和红外插座控制解决方案!